Inventory Types

When you fetch inventory for an occurrence, each item contains an inventoryVariant with a _type field that determines what kind of ticket it represents. This guide explains the two types and how to handle them.

The Two Types

_typeWhat It Representsquantity RuleTickets on Order
AssignedSeatA specific seat (section, row, seat number)Always 11 ticket
GeneralAdmissionEntry to a GA area (e.g., Standing, Balcony)1 to quantityAvailable1 per person

Discriminator Pattern

Both 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.

1{
2 "inventoryVariant": {
3 "_type": "AssignedSeat",
4 "id": "Orchestra-A-101",
5 "name": "Orchestra A 101",
6 "section": "Orchestra",
7 "row": "A",
8 "seat": "101",
9 "attributes": []
10 }
11}
1{
2 "inventoryVariant": {
3 "_type": "GeneralAdmission",
4 "id": "dance-floor",
5 "name": "Dance Floor",
6 "attributes": []
7 }
8}

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:

FieldDescriptionExample
sectionSeating section"Orchestra"
rowRow identifier"A"
seatSeat number"101"

Quantity is always 1 — each seat is a separate inventory item. To let a customer buy multiple seats, add multiple items to the cart.

1{
2 "items": [
3 { "inventoryItemId": "seat-a101", "priceOptionId": "po_1", "quantity": 1, "occurrenceId": "occ_1" },
4 { "inventoryItemId": "seat-a102", "priceOptionId": "po_1", "quantity": 1, "occurrenceId": "occ_1" }
5 ]
6}

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.

1{
2 "items": [
3 { "inventoryItemId": "ga-dance-floor", "priceOptionId": "po_2", "quantity": 3, "occurrenceId": "occ_1" }
4 ]
5}

On the order, you’ll receive one ticket per person (3 tickets in this example), each with its own barcode.

Inventory Attributes

Both types can carry attributes[] — tags that describe characteristics of the inventory. Use these for display purposes (badges, filters, icons).

Each attribute has:

FieldTypeDescription
namestringDisplay label (e.g., "Restricted View", "Premium")
descriptionstring or nullOptional detail (e.g., "Pillar may partially obstruct the stage")
categoryenumRendering hint — see below

Attribute Categories

CategoryMeaningSuggested Rendering
POSITIVEDesirable traitGreen badge or checkmark
NEGATIVELimitation or restrictionWarning icon or amber badge
NEUTRALInformationalPlain text or gray badge
FEATUREDHighlighted / promotedStar or highlight treatment
ACCESSIBILITYAccessibility featureAccessibility icon

Example with attributes:

1{
2 "inventoryVariant": {
3 "_type": "AssignedSeat",
4 "id": "Balcony-B-15",
5 "name": "Balcony B 15",
6 "section": "Balcony",
7 "row": "B",
8 "seat": "15",
9 "attributes": [
10 { "name": "Restricted View", "description": "Pillar may partially obstruct the stage", "category": "NEGATIVE" },
11 { "name": "Wheelchair Accessible", "description": null, "category": "ACCESSIBILITY" }
12 ]
13 }
14}

Price Options

Each inventory item has one or more priceOptions[] — the available price categories for that item (e.g., Adult, Child, Senior).

FieldDescription
idPrice option ID (use when creating cart items)
category.nameDisplay name (e.g., "Adult", "Child")
sellPriceAll-in price the customer pays (fees and taxes included)
listPriceOriginal price before discount. Present only when a discount applies — display as strikethrough.
promotionPromotion details if active, otherwise null

When listPrice is present, the customer is getting a deal:

1{
2 "priceOptions": [
3 {
4 "id": "po_1",
5 "category": { "name": "Adult" },
6 "listPrice": { "amount": 15000, "currency": "USD" },
7 "sellPrice": { "amount": 12500, "currency": "USD" },
8 "promotion": { "id": "promo_1", "name": "Early Bird", "description": "20% off for early bookings" }
9 }
10 ]
11}

Display: ~~150.00  150.00~~ **125.00** — Early Bird

When there’s no discount, listPrice and promotion are null — 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.

Rendering Summary

ScenarioDisplay
_type: AssignedSeatShow section, row, seat. Quantity locked to 1.
_type: GeneralAdmissionShow name. Let customer pick quantity up to quantityAvailable.
attributes[] presentRender badges/icons using category for styling.
listPrice presentShow strikethrough original price next to sellPrice.
promotion presentShow promotion name/description near the price.