docs
/
AppEngine API

Events and ticketing

Events, ticket types, sessions, QR validation, badges, credentials, check-in and event media.

Three surfaces: /events/* for organizers (55 routes), /client/events/* for attendees (24 routes), and /checkin/* for the live queue at the door (16 routes).

The Event App is the attendee client for all of this.

Events

GET/eventsJWT
GET/events/:idJWT
POST/events/:id/publishJWT
POST/events/:id/liveJWT
POST/events/:id/completeJWT
POST/events/:id/cancelJWT

Events themselves are created through the repository (event datatype); this controller drives the state machine — publish, go live, complete, cancel.

Tickets

POST/events/tickets/purchaseJWT
POST/events/:eventId/ticketsJWT
POST/events/tickets/compJWT
POST/events/tickets/pre-generateJWT
POST/events/tickets/:ticketId/activateJWT
GET/events/:eventId/ticketsJWT
GET/events/:eventId/ticket-typesJWT

comp issues without payment; pre-generate creates a batch ahead of a sale, activated later — which is how you print physical stock before you know who buys it.

Lifecycle:

POST/events/tickets/:ticketId/transferJWT
POST/events/tickets/:ticketId/cancelJWT
POST/events/tickets/:ticketId/refundJWT
DELETE/events/tickets/:ticketIdJWT

Bookings group a purchase of several tickets:

POST/events/bookings/:bookingId/cancelJWT
POST/events/bookings/:bookingId/refundJWT

QR and validation

GET/events/tickets/:ticketId/qrJWT
POST/events/tickets/validateJWT
POST/events/verify-scanJWT

validate checks a ticket is genuine and unused; verify-scan is the door-scanner path.

Fulfillment

POST/events/tickets/fulfillJWT
GET/events/tickets/lookup/:eventIdJWT

Will-call: look up by name or reference, then fulfill.

Perks

GET/events/tickets/:ticketId/perksJWT
POST/events/tickets/:ticketId/perks/:perkId/claimJWT
POST/events/tickets/:ticketId/perks/:perkId/fulfillJWT

Drink tokens, meal vouchers, merchandise — claimed by the attendee, fulfilled by staff, so both halves are recorded.

Badges

GET/events/tickets/:ticketId/badgeJWT
POST/events/tickets/:ticketId/badge/printedJWT

Templates are event_badge_template. Marking printed prevents a second badge on the same ticket. Printing goes through PrintModule and reaches hardware via hub-agent.

Sessions

POST/events/:eventId/sessionsJWT
GET/events/:eventId/sessionsJWT
GET/events/:eventId/scheduleJWT
PUT/events/sessions/:sessionIdJWT
DELETE/events/sessions/:sessionIdJWT

Tracks and talks within a multi-session event (event_session).

Check-in and occupancy

POST/events/checkinJWT
POST/events/checkoutJWT
GET/events/:eventId/occupancyJWT
GET/events/:eventId/checkin-statsJWT

Check-out as well as check-in, so occupancy is a live count per zone rather than a running total — the number that matters for capacity limits.

Participants

POST/events/:eventId/participantsJWT
GET/events/:eventId/participantsJWT
PUT/events/participants/:participantIdJWT
POST/events/participants/:participantId/confirmJWT
POST/events/participants/:participantId/cancelJWT

Speakers, exhibitors, staff — people attached to an event who are not ticket holders (event_participant).

Credentials

POST/events/:eventId/credentials/importJWT
POST/events/:eventId/credentials/import-rangeJWT
POST/events/credentials/assignJWT
POST/events/credentials/:code/revokeJWT
GET/events/:eventId/credentialsJWT

Physical credentials — wristbands, RFID cards. Import a range of pre-printed codes, then assign them to attendees on arrival (event_credential).

Event media

POST/events/:eventId/media/uploadJWT
POST/events/:eventId/media/upload/:guestIdJWT
GET/events/:eventId/mediaJWT
GET/events/:eventId/media/guest/:guestIdJWT
GET/events/:eventId/media/guestsJWT
POST/events/:eventId/media/shareJWT

Photos taken at the event, attributable per guest — a photo-booth flow where each guest collects their own shots.

Attendee endpoints

Everything an attendee-facing app needs, under /client/events/*.

Public — no session required:

GET/client/eventsNo auth
GET/client/events/bookingNo auth
POST/client/events/tickets/purchaseNo auth
POST/client/events/tickets/confirm-orderNo auth

Guests can browse and buy without an account, then look up a booking by reference.

Authenticated:

GET/client/events/tickets/mineJWT
GET/client/events/tickets/:ticketIdJWT
GET/client/events/tickets/:ticketId/qrJWT
GET/client/events/tickets/:ticketId/perksJWT
POST/client/events/tickets/:ticketId/transferJWT
POST/client/events/tickets/registerJWT

Payment:

GET/client/events/stripe/configJWT
POST/client/events/stripe/intentJWT
POST/client/events/stripe/checkout-sessionJWT

Schedule and participation:

GET/client/events/:eventId/sessionsJWT
GET/client/events/:eventId/scheduleJWT
GET/client/events/participation/mineJWT
PUT/client/events/participation/:participantId/respondJWT
Route order matters on this controller

@Get('tickets/mine') is declared before @Get(':eventId'), with a comment in the source explaining why: Nest matches in registration order, so a wildcard declared first would swallow every literal path after it. Keep that ordering if you add routes here.

Live check-in queue

CheckinModule handles arrivals in real time — a restaurant waitlist, a clinic waiting room, a service desk.

POST/checkin/walk-inJWT
POST/checkin/from-reservation/:reservationIdJWT

Two ways in: a walk-up, or an arrival against a booking made through reservations.

Queue management:

GET/checkin/queueJWT
GET/checkin/queue/summaryJWT
GET/checkin/queue/historyJWT
GET/checkin/queue/position/:taskIdJWT
GET/checkin/upcomingJWT
GET/checkin/reservations/todayJWT

Actions:

POST/checkin/:taskId/assignJWT
POST/checkin/:taskId/notifyJWT
POST/checkin/:taskId/leaveJWT
POST/checkin/:taskId/no-showJWT

Service points — tables, chairs, rooms, bays:

GET/checkin/service-point/availableJWT
GET/checkin/service-pointJWT
POST/checkin/service-point/:spId/clearJWT

The same service_point datatype the POS assigns tabs to, so a seated party and its open tab refer to one record.

queue/position/:taskId is what a customer-facing "you are 4th in line" screen polls.

Datatypes

event, event_booking, event_ticket, event_ticket_type, event_session, event_participant, event_checkin, event_credential, event_badge_template, plus service_point, reservation and task.