Events, registration, and tickets

Published events, booking, registration, signed tickets, and attendee hubs.

All request and response shapes come from the concrete Zod contracts published in openapi.json. Public reads still enforce event visibility; a private event is not made public by knowing its slug.

OperationAccessPurpose
GET /api/events/categoriesPublicEvent categories.
GET /api/events/confirmed-countPublicGlobal confirmed-registration count.
GET /api/events/publishedPublicPublished top-level events.
GET /api/events/published-oneOptional session/inviteOne visible event by slug.
GET /api/events/pass-formPublicPublished questions for the selected public ticket type.
GET /api/events/organisingOrganiserEvents the signed-in organiser may manage.
GET /api/events/previewOrganiserPreview an event in a live organiser scope.
GET /api/events/takeVisibility-scopedCounts by ticket type for eventId.
GET /api/events/workshopsVisibility-scopedWorkshops under parentId.
GET /api/events/preferencesOptional sessionThe viewer's consented category preferences, otherwise an empty list.
GET /api/events/viewer-organizationsOptional sessionEligible organiser scopes for visibility checks.
GET /api/events/bookingOptional sessionnot_found, sign_in, or actor-specific booking state.
POST /api/events/registerOptional sessionServer-priced registration and payment redirect outcome; anonymous callers receive the existing action-state error.
POST /api/events/resume-registrationOptional sessionResume an actor-owned pending registration; anonymous callers receive the existing action-state error.
GET /api/events/registration-returnOptional sessionPaid, pending, or failed return state.
GET /api/events/ticketsOptional sessionGuest or account ticket-wallet state.
GET /api/events/ticketOptional sessionA verified signed ticket visible to the caller.
GET /api/events/hubOptional sessionActor-owned tickets, broadcasts, points, and giveaways.
POST /api/events/invite/resolveOptional sessionResolve a private invite into a bounded first-party UI cookie outcome.
POST /api/events/work-interestPublicRecord the bounded acquisition fields used by the existing work-interest flow.

Mutations require an exact configured Origin. Direct Nest POST operations return 201 unless their endpoint page says otherwise; error state carried in a successful action outcome remains part of the JSON contract.

Visitor source and ticket email

Registration accepts optional visitor source (brochure, entrance, direct) and visit-purpose context. Historical unknown sources are not guessed. Supplied visitor details are snapshotted for event reporting.

POST /api/events/ticket/resend requests delivery of the signed-in visitor's own ticket. A five-minute cooldown applies. Delivery status distinguishes a sent message from a queued retry; a valid ticket remains usable if email delivery fails. Ticket email processing is an internal API worker, not a public cron endpoint.

Registration limits

From API 1.3.0, an event capacity or ticket-type quantity of null means unlimited. A positive integer is a finite limit. Do not treat null as zero. Event and ticket-type limits are independent, and both must be unlimited for unrestricted exhibition registration. Workshop creation still requires a positive finite capacity. This requires migration 0006 and deployment of the matching API and clients.

Public event responses exclude organiser-only ticket types. An explicit unavailable ticket-type ID is rejected instead of silently selecting another type. Registration rechecks the public setting while holding locks in event-before-ticket order. Existing issued tickets remain valid.

Published event responses may include an optional ordered schedule. Organisers edit schedule slots through PATCH /api/partner/events/details; the schedule is part of event details and does not create a separate attendance authority.

On this page