> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.todaytixgroup.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.todaytixgroup.com/_mcp/server.

# List available inventory items

GET https://stg.ttix.io/api/v3/events/{eventId}/occurrences/{occurrenceId}/inventory-items

Returns a paginated list of the inventory an occurrence lists for sale, plus any sold-out area kept on display (see the end of this description). Use the `inventoryVariant._type` field to differentiate between item types:
- `AssignedSeat` — specific physical seat (section, row, seat number)
- `GeneralAdmission` — general admission area with available quantity
- `Extra` — an add-on such as drinks, merchandise or parking
- `GiftCard` — a gift card. Most gift-card events return one item per denomination, each carrying the balance it is issued with in `value`. An event whose buyer chooses the amount returns one `GiftCard` item instead, carrying `valueRange` and `presetValues` and no `value`; a cart for it must send the chosen amount as `giftCard.value`. A gift-card event's occurrence and venue are placeholders: do not render a date, a time or a venue for one.

`InventoryVariant.id` is stable across all occurrences, enabling seating chart integration.

Send the `quantity` query parameter to shape the list around a party of that size; omit it to see all inventory. Most inventory the party cannot buy is dropped. A seat the party can pick carries `selectionGroup.inventoryItemIds`: the items to add to the cart together when the customer picks it. A seat that is in stock but not sold to a party of that size stays listed with `selectionBlocked.chainSize`, the quantity that would work. A listed seat with neither field cannot be picked at that size, for example because taking it would strand a single seat. Show both as unavailable and do not add them to a cart. Pagination applies to the shaped list, so fetch every page with the same quantity.

While the inventory does not change, items come back in the same order on every request, so the pages of one list fit together. A seat that sells between page requests shifts the items after it.

Send the `voucherCode` query parameter with a presale or access code to include the inventory sold only to holders of that code.

A `GeneralAdmission` area that has sold out but is configured to stay listed is returned with `quantityAvailable` 0 and an empty `priceOptions`, after every purchasable item. Show it as unavailable; it cannot be added to a cart.

Reference: https://docs.todaytixgroup.com/api-reference/browse/inventory/get-inventory-items

## Authentication

- `X-TT-API-Key` header (required) — API Key authentication via header

## Servers

- `https://stg.ttix.io` (Staging Environment, default)
- `https://api.ttix.io` (Production Environment)

## Request

### Path parameters

- `eventId` (string, required) — Event ID
- `occurrenceId` (string, required) — Occurrence ID

### Query parameters

- `providerCode` (string, optional) — Optional rate code: prices this request at a pricing tier your TTG contact set up for you (see Rate Codes). Omit it for the default tier; a code not set up for this event and retailer is rejected with a 404 naming the code.
- `currency` (string, optional) — ISO 4217 currency to price in. Omit for the event base currency. A currency this event is not sold in returns 400; one it is sold in but that cannot be priced right now returns 503.
- `quantity` (integer, optional) — Number of tickets the party needs. Seats the whole party can sit in together carry a `selectionGroup`; seats in stock but not sold at that size carry `selectionBlocked`; general admission areas without enough tickets remaining are dropped. Omit to see all inventory.
- `voucherCode` (string, optional) — Presale or access code the shopper has entered. Inventory sold only to holders of this code is included and priced with the code applied. A code this event does not recognize is ignored: the response is the same as without it. A blank code, or one longer than 15 characters, is rejected with a 400.
- `include` (list of enum, optional) — Optional extras to add to the response, comma-separated. `IMAGES` gives every assigned seat `images`: the views of the stage from that seat, empty for a seat with none. Leave out an extra the page does not display; each one adds to the response time. An unknown value is rejected with a 400.
  - Allowed values: `IMAGES`
- `limit` (integer, optional, default: 50) — Maximum number of results to return.
- `offset` (integer, optional, default: 0) — Number of results to skip for pagination.

### Headers

- `X-TT-Retailer` (string, required) — Your retailer identifier, provided during onboarding. It must be a retailer your API key was issued for.
- `X-TT-Platform` (enum, required) — Identifies the platform the request comes from.
  - Allowed values: `android`, `api`, `ios`, `web`

## Response

### 200

Paginated list of available inventory items.

- `data` (list of InventoryItemResponse, optional) — List of entities in the current page.
- `pagination` (PaginationInfo, optional) — Pagination metadata.

## Errors

### 400 Bad Request Error

Invalid parameters, or a currency the event is not sold in.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 401 Unauthorized Error

The request could not be authenticated. Any request gets `UNAUTHORIZED` when the `X-TT-API-Key` header is missing, and `INVALID_API_KEY` when the key is not valid or was revoked, or when the `X-TT-Retailer` header is missing or names a retailer the key cannot be used for.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 403 Forbidden Error

The request is not allowed from where it was sent. Any request sent from a web page gets `ORIGIN_NOT_ALLOWED` when the page's origin is not one the API key allows. Add the origin to the key, or use a key that allows it. A request with no `Origin` header, such as one from your server, is never refused for this.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 404 Not Found Error

Event or occurrence not found, or a `providerCode` that is not set up for this event. An unknown `providerCode` gets this answer only when the occurrence has something on sale; otherwise the list holds only sold-out areas, or is empty.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 409 Conflict Error

`OCCURRENCE_NOT_AVAILABLE` — sales have closed for this occurrence.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 429 Too Many Requests Error

Too many requests. Wait at most the number of seconds in the `Retry-After` header when it is present, then send the request again.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 500 Internal Server Error

Internal server error

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

### 503 Service Unavailable Error

The requested currency is sold here but cannot be priced right now (no exchange rate). Retry shortly.

- `error` (ErrorResponse, required) — What went wrong: `type` and `code` for your code to act on, `message` to display.

## Types

### InventoryItemResponse

One thing you can buy for an occurrence — a seat, general admission area, extra or gift card — with the price options it is sold at.

- `id` (string, required) — Opaque ID for this inventory item. Pass it whole to the cart; never build or parse it.
- `inventoryVariant` (InventoryVariantResponse, required) — What is being sold: a seat, general admission area, extra or gift card (`AssignedSeat`, `GeneralAdmission`, `Extra` or `GiftCard`).
- `priceOptions` (list of PriceOptionResponse, required) — Available price options. At least one option whenever `quantityAvailable` is above 0. Empty when `quantityAvailable` is 0: the item is listed for display and has no price to buy at.
- `quantityAvailable` (integer, required) — Number of units currently available for purchase. 0 marks a GeneralAdmission area that has sold out but is configured to stay listed: show it as unavailable, and do not add it to a cart.
- `maxQuantityPerOrder` (integer, optional, nullable) — Maximum number of units of this item allowed in one order. The effective limit is the lower of this and quantityAvailable. Omitted when there is no per-order cap.
- `minQuantityPerOrder` (integer, optional, nullable) — Fewest units of this item one order may hold, counted across all its price options. Present only on an Extra that sets a minimum above 1; omitted otherwise.
- `selectionGroup` (SelectionGroupResponse, optional, nullable) — The seats that must be selected together with this one when the customer picks it. The group does not always hold exactly `quantity` seats: add every listed id. Present on an AssignedSeat the party can pick when `quantity` was sent, and on a seat sold only in a fixed group (such as a box of four) whether or not it was. Omitted on GeneralAdmission and Extra items, on a seat carrying `selectionBlocked`, and on a seat that cannot be picked at the requested `quantity`.
- `selectionBlocked` (SelectionBlockedResponse, optional, nullable) — Present when the request carried a `quantity` and this seat is in stock but not sold to a party of that size. Show the seat as unavailable at this quantity, keep its price on display, and do not add it to a cart; `chainSize` is the quantity that would make it purchasable. Omitted on every seat a party of the requested `quantity` can buy, and whenever no `quantity` was sent.
- `requirements` (RequirementsResponse, optional, nullable) — Present only on a scheduled extra, whose own occurrence still needs picking. Its presence alone is the signal — an item without it needs no such pick.

### PaginationInfo

Pagination information for paginated responses

- `limit` (integer, optional) — Maximum number of results per page
- `offset` (integer, optional) — Number of results skipped for pagination
- `total` (long, optional) — Total number of results available

### ErrorResponse

What went wrong: `type` and `code` for your code to act on, `message` to display.

- `type` (enum, required) — High-level error category.
  - Allowed values: `INVALID_REQUEST_ERROR`, `AUTHENTICATION_ERROR`, `PAYMENT_ERROR`, `PERMISSION_ERROR`, `NOT_FOUND_ERROR`, `METHOD_NOT_ALLOWED_ERROR`, `CONFLICT_ERROR`, `RESOURCE_GONE_ERROR`, `PRECONDITION_FAILED_ERROR`, `UNSUPPORTED_MEDIA_TYPE_ERROR`, `PRECONDITION_REQUIRED_ERROR`, `RATE_LIMIT_ERROR`, `API_ERROR`, `SERVICE_UNAVAILABLE`
- `code` (enum, required) — Machine-readable error code.
  - Allowed values: `METHOD_NOT_ALLOWED`, `UNSUPPORTED_MEDIA_TYPE`, `INVALID_FIELD_VALUE`, `ACCESS_CARD_NOT_VERIFIED`, `ACCESS_CARD_WRONG_SCHEME`, `ACCESS_VERIFICATION_NOT_SUPPORTED`, `ACCESS_VERIFICATION_UNAVAILABLE`, `TICKET_ALERT_SIGNUP_NOT_SUPPORTED`, `MIXED_ITEM_TYPES_NOT_SUPPORTED`, `INVALID_VOUCHER`, `CURRENCY_NOT_SUPPORTED`, `CURRENCY_TEMPORARILY_UNAVAILABLE`, `MISSING_REQUIRED_HEADER`, `MISSING_REQUIRED_FIELD`, `UNAUTHORIZED`, `INVALID_API_KEY`, `INVALID_ACCESS_TOKEN`, `PAYMENT_AUTHENTICATION_REQUIRED`, `PAYMENT_DECLINED`, `RISK_CHECK_FAILED`, `APPLE_PAY_NOT_AVAILABLE`, `APPLE_PAY_SESSION_UNAVAILABLE`, `INVALID_REQUEST`, `RESOURCE_NOT_FOUND`, `INSUFFICIENT_PERMISSIONS`, `ORIGIN_NOT_ALLOWED`, `RATE_LIMITED`, `INTERNAL_SERVER_ERROR`, `SERVICE_UNAVAILABLE`, `PRICE_CHANGED`, `INVENTORY_EXHAUSTED`, `OCCURRENCE_NOT_AVAILABLE`, `OCCURRENCE_NOT_COMPATIBLE`, `ORPHANED_SEATS`, `INVALID_PRICE_OPTION`, `MIXED_OCCURRENCES_NOT_SUPPORTED`, `EVENT_NOT_SELLABLE`, `MIXED_PRODUCT_TYPES_NOT_SUPPORTED`, `MULTIPLE_GIFT_CARDS_NOT_SUPPORTED`, `GIFT_CARD_QUANTITY_NOT_SUPPORTED`, `MINIMUM_QUANTITY_NOT_MET`, `EVENT_MINIMUM_NOT_MET`, `VOUCHER_NOT_APPLICABLE_TO_GIFT_CARD`, `CART_EXPIRED`, `EXPECTED_TOTAL_MISMATCH`, `TICKET_LIMIT_EXCEEDED`, `PAYMENT_METHOD_NOT_AVAILABLE`, `CART_ALREADY_ORDERED`, `CART_CUSTOMER_REQUIRED`, `CART_ALREADY_CLAIMED`, `INVALID_IDEMPOTENCY_KEY`, `IDEMPOTENCY_KEY_ALREADY_PROCESSING`, `IDEMPOTENCY_KEY_CART_MISMATCH`, `IDEMPOTENCY_KEY_FAILED`, `GRANT_NOT_CLAIMABLE`, `GRANT_NOT_CANCELLABLE`, `WALLET_PASS_DOWNLOAD_BLOCKED`, `ACTION_NOT_AVAILABLE`, `WALLET_PASS_CHANGED`, `WALLET_PASS_NOT_ISSUED`, `WALLET_PASS_REPLACEMENT_NOT_SUPPORTED`, `WALLET_PASS_REPLACEMENT_UNFINISHED`, `WALLET_PASS_REPLACEMENT_NEEDS_SUPPORT`, `VERSION_REQUIRED`, `THIRD_PARTY_OUTAGE`
- `message` (string, required) — Human-readable description of the error.
- `param` (string, optional, nullable) — The request field that caused the error, if applicable.
- `details` (map from string to ErrorResponseDetails, optional, nullable) — Additional structured data for client recovery logic.

### InventoryVariantResponse

A seat, general admission area, extra or gift card. `_type` says which.

- `_type`: `AssignedSeat` (AssignedSeat)
  - `attributes` (list of InventoryAttributeResponse, required) — Attributes describing characteristics of this inventory variant (e.g. legroom, accessibility, VIP perks).
  - `id` (string, required) — Stable identifier for this inventory variant. The same variant has the same id on every occurrence of the event, so a seat can be matched to the seating chart. A seat or general admission area has the same id in inventory items, carts and orders.
  - `name` (string, required) — Human-readable label for this inventory variant. Stable across occurrences and safe for display in UI.
  - `row` (string, required) — Row identifier within the section.
  - `seat` (string, required) — Seat number within the row.
  - `section` (string, required) — Section name within the venue.
  - `description` (string, optional, nullable) — Short plain-text copy about this variant, shown next to the name at seat selection and on the ticket. Omitted when the seller has not written any.
  - `entrance` (string, optional, nullable) — Where the ticket holder enters the venue, such as a door or gate. Omitted when the venue does not assign one.
  - `extendedDescription` (string, optional, nullable) — Longer copy about this variant as rich text, which may contain HTML or Markdown markup. Sanitize before rendering it as HTML. Shown in place of description where the client supports rich text. Omitted when the seller has not written any.
  - `images` (list of ViewFromSeatImage, optional) — Views of the stage from this seat, in the order the venue lists them. Present only on inventory items requested with `include=IMAGES`, and empty for a seat with no images.
- `_type`: `GeneralAdmission` (GeneralAdmission)
  - `attributes` (list of InventoryAttributeResponse, required) — Attributes describing characteristics of this inventory variant (e.g. legroom, accessibility, VIP perks).
  - `id` (string, required) — Stable identifier for this inventory variant. The same variant has the same id on every occurrence of the event, so a seat can be matched to the seating chart. A seat or general admission area has the same id in inventory items, carts and orders.
  - `name` (string, required) — Human-readable label for this inventory variant. Stable across occurrences and safe for display in UI.
  - `description` (string, optional, nullable) — Short plain-text copy about this variant, shown next to the name at seat selection and on the ticket. Omitted when the seller has not written any.
  - `extendedDescription` (string, optional, nullable) — Longer copy about this variant as rich text, which may contain HTML or Markdown markup. Sanitize before rendering it as HTML. Shown in place of description where the client supports rich text. Omitted when the seller has not written any.
  - `venueAreaIds` (list of string, optional, nullable) — Ids of the seating-chart areas this variant sells into, matching the area ids on the venue seating chart so a client can highlight them. Omitted when the variant is not tied to chart areas.
- `_type`: `Extra` (Extra)
  - `attributes` (list of InventoryAttributeResponse, required) — Attributes describing characteristics of this inventory variant (e.g. legroom, accessibility, VIP perks).
  - `id` (string, required) — Stable identifier for this inventory variant. The same variant has the same id on every occurrence of the event, so a seat can be matched to the seating chart. A seat or general admission area has the same id in inventory items, carts and orders.
  - `name` (string, required) — Human-readable label for this inventory variant. Stable across occurrences and safe for display in UI.
  - `admissionType` (enum, optional, nullable) — How admission works for this extra when it is its own event with its own schedule. TIMED means entry on a specific day at a specific time. DATED means entry on a specific day, any time between open and close. OPEN means entry on any day at any time. SLOT means entry at any time between the start and end times. Omitted when the extra belongs to the same event as the cart or order.
    - Allowed values: `TIMED`, `DATED`, `OPEN`, `SLOT`, `TIMED`, `DATED`, `OPEN`, `SLOT`
  - `caption` (string, optional, nullable) — Short label for this extra, typically a serving size. Omitted when the seller has not written one.
  - `description` (string, optional, nullable) — Short plain-text copy about this variant, shown next to the name at seat selection and on the ticket. Omitted when the seller has not written any.
  - `extendedDescription` (string, optional, nullable) — Longer copy about this variant as rich text, which may contain HTML or Markdown markup. Sanitize before rendering it as HTML. Shown in place of description where the client supports rich text. Omitted when the seller has not written any.
  - `imageUrl` (string, optional, nullable) — Image shown for this extra. Omitted when the seller has not uploaded one.
- `_type`: `GiftCard` (GiftCard)
  - `attributes` (list of InventoryAttributeResponse, required) — Attributes describing characteristics of this inventory variant (e.g. legroom, accessibility, VIP perks).
  - `id` (string, required) — Stable identifier for this inventory variant. The same variant has the same id on every occurrence of the event, so a seat can be matched to the seating chart. A seat or general admission area has the same id in inventory items, carts and orders.
  - `name` (string, required) — Human-readable label for this inventory variant. Stable across occurrences and safe for display in UI.
  - `description` (string, optional, nullable) — Short plain-text copy about this variant, shown next to the name at seat selection and on the ticket. Omitted when the seller has not written any.
  - `extendedDescription` (string, optional, nullable) — Longer copy about this variant as rich text, which may contain HTML or Markdown markup. Sanitize before rendering it as HTML. Shown in place of description where the client supports rich text. Omitted when the seller has not written any.
  - `value` (Money, optional, nullable) — The balance the card is issued with. Independent of `priceOptions[].sellPrice`, which is what the customer is charged: a card sold at a discount is worth its full value. Always in the currency the card can be spent in, which is the event's own currency and not the one the shopper is browsing in — a card redeems only in the currency it was issued in. Absent on a listed card whose amount the buyer chooses; in a cart or order it is the amount they chose.

### PriceOptionResponse

A single purchasable price option for an inventory item.

- `category` (PriceCategoryResponse, required) — Pricing category for this option (e.g., Adult, Child).
- `sellPrice` (Money, required) — Per-unit price charged to the customer, including fees and tax. On a listed gift card whose amount the buyer chooses this is the lowest amount they may choose; the card is charged at the amount they choose.
- `id` (string, optional, nullable) — Unique identifier for this price option.
- `constraints` (PriceOptionConstraintsResponse, optional, nullable) — Selection rules for this option, such as a category it must be bought alongside. Omitted when the option can be bought on its own, and on items that carry no selection rules, such as extras.
- `listPrice` (Money, optional) — Original face value before discounts. Omitted when the option is not discounted or the saving may not be shown, and on the price option of a cart or order item.
- `discountPercentage` (integer, optional, nullable) — Whole-number percentage saved, for a "Save 30%" style label (30 means 30%). Use it rather than working it out from listPrice and sellPrice, which can be priced on a different fee basis. Omitted when the option is not discounted, when the saving may not be shown, and when the event shows its saving as an amount, which discountAmount then carries.
- `discountAmount` (Money, optional, nullable) — Amount saved, for a "Save $20" style label. Sent instead of discountPercentage when the event shows its saving as an amount, so never together with it. Use it rather than working it out from listPrice and sellPrice. Omitted when the option is not discounted or the saving may not be shown, and on the price option of a cart or order item.
- `fees` (list of FeeResponse, optional, nullable) — Itemized fee disclosure. Every entry is a component of sellPrice — never add it to a price. Empty when the option carries no fees. Omitted entirely when the retailer or market does not require fee disclosure.
- `maxQuantityPerOrder` (integer, optional, nullable) — Maximum number of units allowed in one order at this price option. The effective limit combines this with the item-level cap and quantityAvailable — use the lowest. Omitted when this price option has no cap.
- `promotion` (PromotionResponse, optional, nullable) — Active promotion for this price option. Omitted when no promotion applies.
- `isDefault` (boolean, optional, nullable) — True for the option a client should pre-select when the item is first shown. Omitted when false.

### SelectionGroupResponse

The inventory items that must be purchased together with this one. Add every id in the list to the cart when the customer selects this item.

- `inventoryItemIds` (list of string, required) — Inventory item ids of every seat in the group, this item included, in seat order. Every member of a group carries the full list, so the group resolves from whichever page of the results the item appeared on.

### SelectionBlockedResponse

This seat is in stock but not sold to a party of the requested `quantity`, for example because it would leave a single seat stranded. Show it as unavailable at this quantity and offer `chainSize` as the quantity that works.

- `chainSize` (integer, required) — Number of seats in the unbroken run this seat belongs to. Requesting exactly this many always makes the run purchasable, so it is the quantity to offer the customer.

### RequirementsResponse

Conditions the buyer must satisfy before this item can be added to a cart.

- `occurrence` (OccurrenceRequirementResponse, required) — The occurrence this item belongs to must fall within these bounds.

### ErrorResponseDetails

Additional structured data for client recovery logic.

### InventoryAttributeResponse

Attributes describing characteristics of this inventory variant (e.g. legroom, accessibility, VIP perks).

- `name` (string, required) — Short human-readable label for display in badges or tags.
- `category` (enum, required) — Signals how clients should present this attribute: POSITIVE (perk), NEGATIVE (drawback), NEUTRAL (informational), FEATURED (highlight), ACCESSIBILITY (accessibility feature).
  - Allowed values: `POSITIVE`, `NEGATIVE`, `NEUTRAL`, `FEATURED`, `ACCESSIBILITY`
- `description` (string, optional, nullable) — Additional context about the attribute, shown in tooltips or detail views.

### ViewFromSeatImage

A view of the stage from a seat.

- `url` (string, required) — Absolute URL of the image.

### Money

Monetary amount: an integer in minor units (cents for USD) with its currency code.

- `amount` (long, required) — Amount in minor units (cents for USD, pence for GBP, etc.)
- `currency` (string, required) — ISO 4217 currency code

### PriceCategoryResponse

Category a price option is sold under (e.g. Adult, Child, Senior).

- `name` (string, required) — Display name for the pricing category
- `id` (string, optional, nullable) — Identifier for the category. Consistent for every option in the same response, so constraints.requiresCategory always resolves to a sibling option. Stable across occurrences for inventory managed in TodayTix; for inventory sourced from an external ticketing system, treat it as scoped to the response. Omitted when the item has a single, uncategorized price.
- `description` (string, optional, nullable) — Longer descriptive text shown alongside the name. Omitted when the category has none.

### PriceOptionConstraintsResponse

Selection rules for a price option. Advisory: apply them when the customer builds the order — the server does not guarantee to reject an order that breaks them.

- `requiresCategory` (list of string, required) — Category ids, at least one of which must also be in the order for this option to be purchased (e.g. a Child ticket must be bought with an Adult ticket). Each id matches the category.id of another option on the same item.

### FeeResponse

One itemized fee included in sellPrice.

- `type` (enum, required) — The kind of fee. New fee types may be added over time — treat an unknown value as a new fee type, not an error.
  - Allowed values: `SERVICE_FEE`, `ORDER_FEE`
- `value` (Money, required) — Per-unit fee amount. Already included in sellPrice — never add it to a price.

### PromotionResponse

A promotion applied to a price option.

- `id` (string, required) — Stable promotion identifier.
- `name` (string, required) — Promotion display name.
- `description` (string, optional, nullable) — Optional plain-text description of the promotion.

### OccurrenceRequirementResponse

The bounds within which a compatible occurrence for this item may be picked.

- `earliestStart` (datetime, optional, nullable) — Earliest compatible occurrence start time, always in UTC. An occurrence starting at this time is compatible. Omitted when there is no lower bound.
- `latestStart` (datetime, optional, nullable) — End of the compatible occurrence start times, always in UTC. A compatible occurrence starts before this time. Omitted when there is no upper bound.

## Examples

**Response**

```json
{
  "data": [
    {
      "id": "v1_eyJwcm92aWRlcklkIjoxMDAwLCJzZWF0SWQiOiJPUkNIRVNUUkEtQS0xMDEifQ",
      "inventoryVariant": {
        "_type": "AssignedSeat",
        "attributes": [],
        "id": "ORCHESTRA-A-101",
        "name": "Orchestra A 101",
        "row": "A",
        "seat": "101",
        "section": "Orchestra"
      },
      "priceOptions": [
        {
          "category": {
            "name": "Adult"
          },
          "sellPrice": {
            "amount": 17000,
            "currency": "USD"
          },
          "id": "eyJwcm92aWRlckNvZGUiOiJGVUxMUFJJQ0UiLCJob2xkQ29kZSI6IjE1NzM5In0",
          "fees": [
            {
              "type": "SERVICE_FEE",
              "value": {
                "amount": 600,
                "currency": "USD"
              }
            }
          ]
        }
      ],
      "quantityAvailable": 1,
      "selectionGroup": {
        "inventoryItemIds": [
          "v1_eyJwcm92aWRlcklkIjoxMDAwLCJzZWF0SWQiOiJPUkNIRVNUUkEtQS0xMDEifQ",
          "v1_eyJwcm92aWRlcklkIjoxMDAwLCJzZWF0SWQiOiJPUkNIRVNUUkEtQS0xMDIifQ"
        ]
      }
    },
    {
      "id": "v1_eyJwcm92aWRlcklkIjoxMDAwLCJzZWF0SWQiOiJHZW5lcmFsIEFkbWlzc2lvbiJ9",
      "inventoryVariant": {
        "_type": "GeneralAdmission",
        "attributes": [],
        "id": "General-Admission",
        "name": "General Admission",
        "section": "Orchestra",
        "row": "A",
        "seat": "101"
      },
      "priceOptions": [
        {
          "category": {
            "name": "Adult"
          },
          "sellPrice": {
            "amount": 9500,
            "currency": "USD"
          },
          "id": "eyJpc0dBIjp0cnVlLCJwcm92aWRlclBhcmFtcyI6Int9IiwicHJpY2VUeXBlSWQiOiJBRFVMVCJ9"
        },
        {
          "category": {
            "name": "Child"
          },
          "sellPrice": {
            "amount": 6500,
            "currency": "USD"
          },
          "id": "eyJpc0dBIjp0cnVlLCJwcm92aWRlclBhcmFtcyI6Int9IiwicHJpY2VUeXBlSWQiOiJDSElMRCJ9"
        }
      ],
      "quantityAvailable": 50
    },
    {
      "id": "v1_eyJwcm92aWRlcklkIjoxLCJzZWF0SWQiOiI0NTIxIn0",
      "inventoryVariant": {
        "_type": "Extra",
        "attributes": [],
        "id": "var-extra-white-wine",
        "name": "White Wine",
        "section": "Orchestra",
        "row": "A",
        "seat": "101"
      },
      "priceOptions": [
        {
          "category": {
            "name": "Standard"
          },
          "sellPrice": {
            "amount": 1320,
            "currency": "USD"
          },
          "id": "eyJpc0FkZE9uIjp0cnVlLCJwcmljZVR5cGVJZCI6IjcifQ",
          "listPrice": {
            "amount": 1500,
            "currency": "USD"
          }
        }
      ],
      "quantityAvailable": 100
    },
    {
      "id": "v1_eyJwcm92aWRlcklkIjoxMDAwLCJzZWF0SWQiOiJQcmVtaXVtIn0",
      "inventoryVariant": {
        "_type": "GeneralAdmission",
        "attributes": [],
        "id": "PREMIUM",
        "name": "Premium",
        "description": "Front-of-stage standing",
        "section": "Orchestra",
        "row": "A",
        "seat": "101"
      },
      "priceOptions": [],
      "quantityAvailable": 0
    },
    {
      "id": "v1_eyJwcm92aWRlcklkIjoxLCJzZWF0SWQiOiJUT0RBWVRJWCBHSUZUIENBUkQtNTAwMCJ9",
      "inventoryVariant": {
        "_type": "GiftCard",
        "attributes": [],
        "id": "TODAYTIX GIFT CARD-5000",
        "name": "TodayTix Gift Card",
        "value": {
          "amount": 5000,
          "currency": "GBP"
        },
        "section": "Orchestra",
        "row": "A",
        "seat": "101"
      },
      "priceOptions": [
        {
          "category": {
            "name": "Standard"
          },
          "sellPrice": {
            "amount": 4500,
            "currency": "GBP"
          },
          "id": "eyJpc0dBIjp0cnVlLCJwcm92aWRlclBhcmFtcyI6Int9In0",
          "listPrice": {
            "amount": 5000,
            "currency": "GBP"
          },
          "discountPercentage": 10
        }
      ],
      "quantityAvailable": 100
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 5
  }
}
```

**SDK Code**

```python Inventory_getInventoryItems_example
import requests

url = "https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items"

querystring = {"providerCode":"campaign-may","currency":"GBP","quantity":"2","voucherCode":"PRESALE24","limit":"50","offset":"0"}

headers = {
    "X-TT-Retailer": "YOUR_RETAILER_ID",
    "X-TT-Platform": "android",
    "X-TT-API-Key": "<apiKey>"
}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript Inventory_getInventoryItems_example
const url = 'https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0';
const options = {
  method: 'GET',
  headers: {
    'X-TT-Retailer': 'YOUR_RETAILER_ID',
    'X-TT-Platform': 'android',
    'X-TT-API-Key': '<apiKey>'
  }
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Inventory_getInventoryItems_example
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-TT-Retailer", "YOUR_RETAILER_ID")
	req.Header.Add("X-TT-Platform", "android")
	req.Header.Add("X-TT-API-Key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Inventory_getInventoryItems_example
require 'uri'
require 'net/http'

url = URI("https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-TT-Retailer"] = 'YOUR_RETAILER_ID'
request["X-TT-Platform"] = 'android'
request["X-TT-API-Key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java Inventory_getInventoryItems_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0")
  .header("X-TT-Retailer", "YOUR_RETAILER_ID")
  .header("X-TT-Platform", "android")
  .header("X-TT-API-Key", "<apiKey>")
  .asString();
```

```php Inventory_getInventoryItems_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0', [
  'headers' => [
    'X-TT-API-Key' => '<apiKey>',
    'X-TT-Platform' => 'android',
    'X-TT-Retailer' => 'YOUR_RETAILER_ID',
  ],
]);

echo $response->getBody();
```

```csharp Inventory_getInventoryItems_example
using RestSharp;

var client = new RestClient("https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0");
var request = new RestRequest(Method.GET);
request.AddHeader("X-TT-Retailer", "YOUR_RETAILER_ID");
request.AddHeader("X-TT-Platform", "android");
request.AddHeader("X-TT-API-Key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Inventory_getInventoryItems_example
import Foundation

let headers = [
  "X-TT-Retailer": "YOUR_RETAILER_ID",
  "X-TT-Platform": "android",
  "X-TT-API-Key": "<apiKey>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://stg.ttix.io/api/v3/events/123/occurrences/456/inventory-items?providerCode=campaign-may&currency=GBP&quantity=2&voucherCode=PRESALE24&limit=50&offset=0")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```