Holds & booking
Every seat is free, held or booked. Holds are temporary and owned by a hold token; bookings are permanent until you release them.
Holding
POST /v1/events/:key/holdwith{ seatIds, holdToken, ttlSeconds? }and the public key.- Up to 200 seat ids per request, here and when booking.
- All seats or none: if any seat is taken you get
409 SEATS_UNAVAILABLElisting it, and nothing is held. - Holding again with the same token extends the hold. Default 600 s; allowed 60–1800 s.
- Unknown or permanently blocked seat ids return
400 UNKNOWN_SEATS(hold, book and release-booking).
Booking
From your server, with the secret key:
POST /v1/events/:key/book
Authorization: Bearer sk_...
{ "seatIds": ["row-1-seat-4"], "holdToken": "...", "orderId": "order-1042" }
201 { "seatIds": ["row-1-seat-4"], "orderId": "order-1042" }
409 { "statusCode": 409, "error": "Conflict", "message": "SEATS_UNAVAILABLE", "seatIds": [...] }
400 { "statusCode": 400, "error": "Bad Request", "message": "UNKNOWN_SEATS", "seatIds": [...] }A seat can be booked only once; two simultaneous bookings for the same seat cannot both succeed. Seats that are free, or held by the given holdToken, can be booked. An expired hold is fine as long as nobody else took the seat. A seat held by another token, or already booked, is refused with 409, and nothing is booked. orderId is optional.
Releasing
POST /v1/events/:key/release(public key) frees seats held by a token. OmitseatIdsto release everything the token holds; ids it does not hold are ignored.POST /v1/events/:key/release-booking(secret key) un-books seats, for refunds.
Live updates
Every hold, release and booking shows up on all open maps for that event straight away. The embed handles this for you.