/v1/event/{eventId}/….
Registration and Expo are Early Access. An event without Registration turned on answers
403 FORBIDDEN on the Registration endpoints, and an event without Expo answers 403 FORBIDDEN on the Expo endpoints — even with the right scopes.1. Get a token with the right scopes
These four scopes are in preview. A token carries them only when they are set on it explicitly — they are not part of a new token’s default scopes and the token picker does not offer them yet, so ask Sessionboard support to add them. An OAuth client gets them only by naming them in its
scope request; they are not listed in scopes_supported.
A write scope does not include the matching read scope, so an integration that reads back what it writes needs both. Legacy tokens with no scopes can read but not write. See Authentication and OAuth.
2. Sync registrations
List registrations returns one row per person in every status, with ticket type, form, order, answers, badge and approval state. Page through it withpage and page_size (up to 200).
For an incremental sync, send the latest updated_at you received (or the time you started the previous run) as updated_since:
status (comma-separated; an unknown value is a 400), form_id, ticket_type_id, registrant_type_id, account_id and email.
- For a door list or badge printer, List attendees returns only
confirmedandchecked_inpeople in a short shape, sorted by name, withupdated_aton each row. - For money, List orders returns each order’s lines, totals, payments and invoice. Amounts are integers in cents.
3. Place orders taken somewhere else
Create a registration places one order for one or more people through a registration form. Pick the form with List registration forms and the ticket types it sells (ticket_type_ids).
paymentiscomp,invoice,paid_externally,cashorcheck. No card is charged.- Always send an
idempotency_key(1–128 characters). If your request times out, send it again with the same key: you get the original order back with200instead of a second order. - One order takes up to 100 people.
- Capacity, per-order limits, required questions and one-registration-per-email all apply. A refusal is
409 CONFLICTwithdetails.reason(duplicate,sold_out, …). - Registrations come back
confirmed, orpending_approvalwhen the event’s approval rules hold them.
action.
4. Check people in from a scanner
Check someone in takes aregistration_id, an email or a scanned badge_code — the sb-checkin:… QR from the confirmation email, or a printed or in-app badge.
- It is safe to retry: a second scan answers
200withalready_checked_in: true. - A canceled, declined or transferred registration is refused with
409 CONFLICT(details.reason: wrong_status, with the status indetails.status). - Send
checked_in_atwhen uploading scans made offline.
since, which filters on the check-in time (checked_in_at). Key each check-in by its registration id.
5. Manage booths and sponsorships
List booths returns every booth on the event’s floor maps with its status (available, hold, reserved, sold, blocked), price, package and the exhibitor or sponsor holding it. Filter with floor_map_id and status.
Update a booth holds, reserves, sells, blocks or releases a booth, assigns it to an exhibitor or sponsor of the event (account_id), sets its own price (list_price_cents) or moves it to another booth package (product_id). A hold with hold_until lapses back to available on its own.
List sponsorships returns the active sponsorship packages with how many are sold and left (include_archived=true adds archived ones).
Errors
Errors use{ error, message, details }. The ones to handle:

