Inventory Types
Every inventory item contains an inventoryVariant with a _type field that determines what kind of item it represents. This guide explains the three types and how to handle them.
Seats and general admission come from the occurrence’s inventory list. Extras (merchandise, drinks, parking) are offered per cart — they appear under options.extras on the cart response, not in the occurrence inventory.
The Three Types
Discriminator Pattern
All types share a common base (id, _type, name, attributes) and the _type field tells you which one you’re dealing with. Only AssignedSeat adds extra fields.
Key rule: switch on _type to determine your rendering and quantity logic. Treat unknown _type values gracefully — new types may be added in the future.
AssignedSeat
Represents a specific seat in a venue. Has three additional fields:
Quantity is always 1 — each seat is a separate inventory item. To let a customer buy multiple seats, add multiple items to the cart.
IDs are shortened here for readability. A real
inventoryItemIdis an opaque, versioned token (e.g.v1_eyJz…); copy it whole from the inventory response and never build it by hand. See IDs.
GeneralAdmission
Represents entry to a general admission area. No additional fields beyond the base.
Quantity can be 1 to quantityAvailable — a single inventory item covers multiple people. To buy 3 GA tickets, set quantity: 3 on one cart item.
On the order, you’ll receive one ticket per person (3 tickets in this example), each with its own barcode.
Extra
Represents an add-on sold alongside tickets — merchandise, drinks, parking, and similar. No additional fields beyond the base.
Extras are discovered on the cart, not on the occurrence. After you create a cart, the cart response lists the extras you can add under options.extras, each in the same inventory-item shape as seats and GA. Add one with POST /api/v3/carts/{cartId}/items — see Purchase Flow.
Quantity can be more than 1, like GA. Three limits apply:
quantityAvailable— how many are in stock.maxQuantityPerOrderon the item — how many of this extra one order may contain, across all its price options. Omitted when there is no item cap.maxQuantityPerOrderon a price option — how many units one order may contain at that price option. Omitted when that option has no cap of its own.
The effective limit is the lowest that applies. Extras don’t produce tickets on the order — they appear as order items and on the receipt.
Inventory Attributes
All types can carry attributes[] — tags that describe characteristics of the inventory. Use these for display purposes (badges, filters, icons).
Each attribute has:
Attribute Categories
Example with attributes:
Price Options
Each inventory item has one or more priceOptions[] — the available price categories for that item (e.g., Adult, Child, Senior).
When listPrice is present, the customer is getting a deal:
Display: ~125.00**
When there’s no discount, listPrice is absent — just show sellPrice.
Stable Variant IDs
Inventory variant id values are stable across all occurrences of the same event. The same seat returns the same variant id regardless of which date the customer picks. This is important if you’re building seating charts or caching seat metadata.