Skip to main content

Ticketing invariants

These rules are Event behavior (system of record). BFFs must not contradict them. No schema or migration dump — behavior only.

GA vs reserved​

ModeInventorySell / hold requirement
General admission (GA)QuantityDecrement remaining quantity. No seat id.
Reserved seating (RS)Specific seatsseatIds required. No oversell of a seat.

No oversell. Event uses SKIP LOCKED so concurrent holds/checkouts cannot take the same GA unit or reserved seat.

Seat-map lock: the first reserved-seating inventory write for a map locks that seat map. After lock, the map is not an open editing surface for selling inventory. Predict/detect is a separate path and does not persist Event inventory.

Carts and holds​

RuleBehavior
Hold TTL12 minutes from create.
GET cartDoes not extend TTL. Polling is not a keep-alive.
Checkout secretExtends the hold 8 minutes.
ExpiryHeld GA quantity / RS seats return to availability when the hold dies.

Do not document “refresh cart to keep seats” — that is false on Event.

Channels​

Event records sales channel as web / door / app. GO additionally sends clientSource: go-app (see GO internals). Do not invent a mapping between channel and clientSource beyond what those codepaths set.

Lifecycle records Event stores​

Event is SoR for records of:

  • scan / redeem
  • refund
  • transfer
  • exchange

Checkout orchestration (create/confirm the ticketing side of checkout) is Event. Money movement is eventlinx-api-stripe. $0 and cash completion go through the Stripe API; GO Terminal PaymentIntent create is via Event, completion via Stripe.

What is not a shipped patron product​

Patron self-serve exchange is not shipped. Patron-api still has exchange routes; the patron UI flag is off. Do not describe it as a live Get Tickets feature.

  • Transfers on patron: live.
  • GO: blocks exchange into reserved seating. The GO API does not gate reserved POS; the Expo app does (isDevEnv). See GO internals.

Where to read contracts​

Event OpenAPI: GET /doc on the Event hosts in Environments. Source: eventlinx-api-event src/routes.ts. Groupings and payload shapes change in code — do not fork them into this site.