Operation
Get event offers
GET
/events/{eventId}/offersWhat 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
}
}
]
}
]
}