Reading the dates
GET /api/events/public/{slug} carries performances[]:
statusisON_SALE,SOLD_OUTorCANCELLED. Hidden drafts never arrive.- When there are several dates, each one also carries
total_available,from_priceandsold_out, so you can draw the selector (“sáb 21 · desde $60.000 · agotada”) from this payload alone. ticketAvailability[]stays one row per ticket type × selling stage, summed across the dates, until you ask for one date:GET /api/events/public/{slug}?performance_id=…returns that date’s stock, and each row’sperformance_idis set.
Selling for a date
When the event has more than one date, every item you send must say which:checkout/start. An item without performance_id on a
multi-date event is refused with 400 PERFORMANCE_REQUIRED; guessing a date for a buyer is
worse than asking. A date that is not on sale is 400 PERFORMANCE_NOT_ON_SALE; an unknown one
is 400 PERFORMANCE_NOT_FOUND.
For a single-date event, omit the field. It defaults to the event’s only date.
Recommended UX
- Render the date selector above the tickets. Preselect nothing (a
?performance=deep link may). Marksold_outandCANCELLEDdates as disabled. - On pick, re-fetch the event with
?performance_id=so the ticket list shows that date’s stock, and clear the selection. - Show the picked date (not
event.start_date) in the header, the checkout summary and the confirmation page.

