Skip to main content
A locality can be numbered (locality.seating === "NUMBERED"): its ticket types sell specific seats. General-admission localities ("GENERAL", the default) are untouched by everything on this page. You can support numbered seating at two levels:
  • Zero effort. Send items without seats. The hold (or checkout) assigns the best available contiguous seats for that ticket type: front rows first, never leaving a single orphan seat. Tickets come back with a seat_label such as Platea · Fila C · Silla 12.
  • A seat picker. Read the plan, draw it, let the buyer click seats, send seat_ids.

Endpoints

All three are public and need no authentication.

The plan

  • Coordinates are in chart units on a width × height canvas; draw seats as circles at (x, y). elevation and tilt exist for 3D renderings and can be ignored in 2D.
  • A seat’s zone is seat.zone_key ?? section.zone_key. The zone’s ticket_type_id is the ticket type that sells it. Colour seats by zone.
  • state other than AVAILABLE (BLOCKED, HOUSE) is never sellable. taken lists seats someone currently holds or bought for this performance; free seats are absent from it.
  • Poll /seating/occupancy every few seconds while the picker is open. Re-draw from taken.
For a multi-date event pass ?performance_id=; occupancy is per date.

Picking seats

Add seat_ids to the item, exactly quantity × group_size of them, all in the zone of that ticket type:
The seats are claimed inside the hold, atomically with the stock. If someone else got one of them first you receive 409 SEAT_TAKEN with detail.seat_ids: drop those seats, refresh occupancy, ask the buyer to pick again. Other seat errors are 400: SEAT_COUNT_MISMATCH (wrong number of seats), SEAT_NOT_IN_TICKET_TYPE (a seat from another zone), SEAT_NOT_SELLABLE (blocked or house seat), SEAT_NOT_FOUND.

Best available

This only suggests; send the ids on the hold to claim them. Omitting seat_ids on the hold does the same thing in one step.

After the sale

checkout/status tickets and the ticket email carry seat_label. A hold that changes seats at checkout (the buyer picked different ones) frees the old seats; cancelling an order frees its seats.