curl. A key is required (generate one) and the API host:
1
1 — Create an event
id.2
2 — Create a ticket type
priceAmount is minor units of the event’s currency — 12000 is ¥120.00 for a CNY event. 0 (or omitting it) makes the ticket free. Keep the returned id.3
3 — Open the ticket for sale
Ticket types are also created as draft. Opening is a status change:
4
4 — Read remaining seats
held counts seats inside live order holds from public checkout. The numbers are advisory. The binding check still happens at registration time, so a stale read cannot oversell.5
5 — Register an attendee
201 with "created": true — and note the registration’s checkinCode, the badge credential, and passUrl, the hosted entry-pass page the platform has just emailed them (it asks for their email before opening). Registering the same email again returns 200 with "created": false and the existing registration. Repeats are acknowledged, never duplicated.6
6 — Approve, if the ticket requires it
On a ticket with approval mode, API registrations land
pending. The API records the application. It does not make the admission decision. Decide it explicitly:7
7 — Check them in
201 records the arrival. Scanning the same badge again returns 200 with "alreadyCheckedIn": true — acknowledged, not an error.What this covers
- Draft-first lifecycles — events and ticket types are invisible until opened, same as the console.
- The capacity gate — when
confirmedreachescapacity, the next registration returns412(or landswaitlistedif the ticket allows a waitlist). - Idempotent repeats — duplicate registrations and duplicate scans acknowledge instead of erroring, so retries are safe.
- Automations — if this Business Unit has an “attendee added” or check-in automation, these API calls trigger it.
Related
Endpoint reference
Codes, add-ons, bundles, orders, errors, limits.
Ticket types
Capacity, waitlists, approval mode, and visibility.