event.waiting_room === true). From
then on nobody reserves without an admitted pass: POST /api/checkout/holds answers
403 QUEUE_PASS_REQUIRED, and so does checkout/start without a hold_id. Your storefront
must put the buyer in the line, poll their place, and present the pass once admitted.
Events without the room (the default) are unaffected. A storefront that never implements this
page keeps selling every event that has no room.
How the line works
- Before
waiting_room_opens_ateveryone pre-queues with no position. When the doors open the pre-queue is drawn at random: arriving at 7:00 or 7:59 gives the same chance. - After opening, first come first served. Admission runs at
waiting_room_ratepeople per minute. An admitted pass liveswaiting_room_minutes. waiting_room_opens_atmay benull: the room is open from the start and only paces the flow.
Endpoints
Same session key as holds: the pass belongs to the browser that queued, and only that browser’s holds may use it.The entry
ADMITTED.
Implementation
- On the tickets page of an event with
waiting_room, callPOST /api/checkout/queuewith the session key. KeepidinsessionStorageso a reload keeps the place. - While
WAITING, hide the tickets and pollGET /api/checkout/queue/{id}every 4 to 5 seconds. Showposition,estimated_minutes, and a countdown toopens_atwhenopenis false. A session that stops polling for two minutes is dropped from the line. - When
statusbecomesADMITTED, show the tickets and a clock topass_expires_at. - Send
queue_pass: entry.idonPOST /api/checkout/holds. The pass stays valid until it expires, so the buyer may change their selection. checkout/startwithhold_idneeds no pass: the hold already went through the line. If you reserve inline (no hold), sendqueue_passoncheckout/startinstead.
When the pass is refused
403 QUEUE_PASS_INVALID means the pass expired, belongs to another session, or is for
another event. Call POST /api/checkout/queue again: an expired or left entry re-joins at
the back of the line. Never leave the buyer on a dead button.
400 QUEUE_NOT_ENABLED means you joined a room the event does not have; just show the
tickets.
