Skip to main content
All paths live under $BASE/v1 and require Authorization: Bearer <secret>. This page is the map. Detail lives in two places:
  • The Endpoints group in this tab documents every operation — full request and response schemas, field by field, with a Try it playground that accepts a key.
  • The API also describes itself: GET $BASE/openapi.json is the OpenAPI 3.1 spec (generate a client from it), and $BASE/docs serves the same interactive reference from the deployment.
This page covers the secret-key Developer API. The browser-facing Storefront API has its own reference: the Storefront endpoints group in this tab, GET $BASE/storefront/openapi.json, and $BASE/storefront/docs.

Events

Console rules apply unchanged: publishing needs a start time (400); the currency locks once the event has taken an order (412); moving the start date clears the agenda — the first attempt returns 412, restate with "confirmAgendaReset": true to confirm.

Ticket types

Repricing never rewrites sold orders — amounts on an order are purchase-time snapshots. Perk bindings, registration forms and refund policies are configured in the console, not over the API.

Registrations

Behaviour to design for:
  • Approval-mode tickets land pending when created over the API — unlike a console operator, the API is not an admission decision. Approve explicitly.
  • Full ticket → 412 (or the registration lands waitlisted if the ticket allows it).
  • Repeat email → 200 with "created": false and the existing registration — never a duplicate, never an error.
  • Approve/reject only move pending rows; anything else returns 412.
  • Every registration carries a checkinCode (CHK-…) — the badge credential for check-in — and a passUrl, the hosted entry-pass page (QR, wallet passes, certificate, surveys) that asks the person for their email before opening.

Redemption codes

A custom code that already exists in the event returns 409.

Add-ons and bundles

Every bundle item must be a real ticket type or add-on of the same event (400 otherwise).

Orders and checkout

Settlement of paid orders arrives by the platform’s Stripe webhook — poll the order until paid. Refunds stay a console decision. The whole flow, end to end: Checkout from your backend.

Check-ins

Only a confirmed registration can check in (412). A second scan at the same door returns 200 with "alreadyCheckedIn": true.

Program and venues

Attendees

Exhibitors

Read-only by design: confirming a company, editing the roster and allocating booths are console decisions. The registrationId filter returns the company that registration staffs — for example after a badge scan resolved to a registration.

The error envelope

Every error, whatever the status, uses the same shape:

Rate limits and retries

Each key may make 120 requests per minute. Beyond that, requests return 429 until the window resets. Back off on 429. Repeat registrations and repeat scans acknowledge rather than fail, so retrying writes is safe.

Quickstart

The same flow, end to end.

Orders

How those orders appear in the console.