Skip to main content

Check in tickets from a gate scanner

A scanner at the door reads the ticket code and checks the guest in. The API makes the same decision as the vendor panel's check-in screen, so the panel and your scanner always agree.

Scopes: events:read to list events, events:checkin to check tickets in.

Find the event​

GET /v1/events
Authorization: Bearer xq_live_…

The answer lists your Space's events, latest event date first, in data, with has_more. Page with limit and offset. Use the event's id in the check-in call.

Check a ticket in​

POST /v1/events/{id}/check-ins
Authorization: Bearer xq_live_…
Idempotency-Key: gate-3-scan-20261008-091244-001
Content-Type: application/json

{ "code": "TKT-8F2K1Q" }

You can send the code with or without the TKT- prefix, in upper or lower case.

A ticket that can be checked in, or was already checked in, answers 200. The body has a check_in object:

{
"check_in": {
"result": "checked_in",
"event_id": "…",
"ticket": { "id": "…", "code": "TKT-8F2K1Q", "event_id": "…", "status": "used", "used_at": "…" },
"sessioned": false,
"just_checked_in": true
}
}
AnswerWhat it meansScanner shows
200, result: checked_inChecked in nowGreen
200, result: already_usedWas already checked inAmber: "already in"
200, result: door_admittedMulti-session event: admitted at the door nowGreen
200, result: already_admittedMulti-session event: was already admitted at the doorAmber: "already in"
404 not_foundNo such event in your Space, or no ticket with this code for this eventRed
409 cancelled · 409 expiredThe ticket is cancelled or expiredRed
409 not_eligibleThe ticket is in another state that cannot be checked inRed
409 race_lostAnother scanner checked it in at the same momentAmber: re-scan shows "already in"
503 temporarily_unavailableWe could not check the event or ticket right nowRetry with the same Idempotency-Key

just_checked_in is true only when this call admitted the guest. Use it to choose between green and amber.

A ticket of another event, or of another Space, answers 404. It is never checked in.

A re-scan is safe: a guest is never checked in twice.

Events with sessions​

For a multi-session event (sessioned: true), a door check-in admits the guest but does not use up the ticket, so scanning for each session still works afterwards.

Offline scanners​

Queue scans on the device with one Idempotency-Key per scan, and send them when the device is back online. A scan sent twice with the same key gets the first answer back.

Webhook​

Subscribe to event.ticket.checked_in to update a live headcount elsewhere. See Webhook events.