Skip to content
Docs
Operation

Get event offers

GET/events/{eventId}/offers
What each offer of the event (a layout category x ticket type on an occurrence) costs on the channel, for this caller at this instant, and whether they can buy it: the face value with its fees and where each came from, the total, availability with a reason, remaining capacity, limits, and a quote for `quantity`. The channel is required (X-Ticketlayer-Channel or a channel-scoped credential), because fees and listings are the channel's: without one, 400 CHANNEL_REQUIRED. This is the engine carts and checkout price through, so a quote here is what checkout charges for the same line. view=buyer (the default) is what a member of the public is told: coarse reasons and a capacity bucket. view=staff adds the fine reasons, `exact` for a caller holding inventory.read, and a hidden listing for one holding events.list_hidden.

Path parameters

eventIdstringRequired
Event ID

Query parameters

occurrenceIdstringOptional
Only this occurrence
atstringOptional
The instant to evaluate at, ISO 8601; now by default
customerIdstringOptional
Price for this customer: their benefits unlock gated ticket types. Needs customers.read on the customer
codestringOptional
Preview what a code would unlock. The code is never redeemed and no use is counted
quantitystringOptional
How many tickets each quote is for, 1 to 100; 1 by default
cartIdstringOptional
An open cart on the same channel: limits.maxPerOrderRemaining subtracts what it holds
viewstringOptional
buyer (default): what the public is told. staff: every occurrence and fine reasons

Headers

X-Ticketlayer-ChannelstringOptional
Slug of the sales channel to act through. A channel-scoped credential supplies its own channel and this header, when sent, must agree with it. On a read it filters to what that channel sells, at its resolved prices; on a cart it is required; on an order operation it is derived from the order and may only confirm it, never contradict it.

Returns

The event's offers on the channel

Errors

400
Bad Request - Invalid input
401
Unauthorized - Authentication required
403
Forbidden - Insufficient permissions
404
Not Found - Resource not found
500
Internal Server Error

Every error names its code and links to it. All error codes

curl -X GET "https://api.ticketlayer.com/v1/events/evt_abc123/offers" \  -H "Authorization: Bearer tlak_..." \  -H "X-Ticketlayer-Org: your-org-slug"
Response 200
{
  "event": {
    "id": "evt_8f2kQ",
    "name": "The Tempest",
    "timezone": "Europe/London"
  },
  "channel": {
    "id": "sch_web",
    "slug": "website",
    "name": "Website"
  },
  "context": {
    "at": "2026-10-01T09:00:00.000Z",
    "view": "buyer",
    "customerId": null,
    "code": null,
    "codeApplied": false,
    "codes": [
      {
        "id": "cod_ab12cd34",
        "code": "FANCLUB",
        "label": "Fan club presale",
        "source": "cart"
      }
    ],
    "quantity": 2,
    "cartId": null
  },
  "summary": {
    "state": "on_sale",
    "currency": "GBP",
    "from": 1890,
    "to": 2625
  },
  "limits": {
    "minPerOrder": 1,
    "maxPerOrder": 10,
    "maxOrderValue": 1000000
  },
  "occurrences": [
    {
      "id": "eoc_14oct",
      "startsAt": "2026-10-14T18:30:00.000Z",
      "endsAt": "2026-10-14T21:00:00.000Z",
      "timezone": "Europe/London",
      "status": "on_sale",
      "availability": {
        "state": "on_sale",
        "reason": null,
        "opensAt": null,
        "closesAt": "2026-10-14T18:00:00.000Z"
      },
      "offers": [
        {
          "categoryId": "elc_stalls",
          "categoryName": "Stalls",
          "ticketTypeId": "tty_adult",
          "ticketTypeName": "Adult",
          "description": null,
          "price": {
            "currency": "GBP",
            "faceValue": 2500,
            "discounts": [],
            "fees": [],
            "total": 2625,
            "headline": {},
            "source": {}
          },
          "unlock": {
            "visibility": "locked",
            "unlocked": false,
            "source": {},
            "tags": [],
            "code": true,
            "howTo": {},
            "gateSource": "ticket_type",
            "unlockable": true
          },
          "availability": {
            "state": "on_sale",
            "reason": null,
            "opensAt": null,
            "closesAt": "2026-10-14T18:00:00.000Z"
          },
          "remaining": {
            "bucket": "limited",
            "exact": null
          },
          "limits": {
            "minPerOrder": 1,
            "maxPerOrder": 10,
            "maxPerOrderRemaining": 10
          },
          "quote": {
            "quantity": 2,
            "faceValue": 5000,
            "discounts": 0,
            "fees": 250,
            "total": 5250
          }
        }
      ]
    }
  ]
}

Try it in test mode

Path parameters
Event ID
Query parameters
Only this occurrence
The instant to evaluate at, ISO 8601; now by default
Price for this customer: their benefits unlock gated ticket types. Needs customers.read on the customer
Preview what a code would unlock. The code is never redeemed and no use is counted
How many tickets each quote is for, 1 to 100; 1 by default
An open cart on the same channel: limits.maxPerOrderRemaining subtracts what it holds
buyer (default): what the public is told. staff: every occurrence and fine reasons