Availability API
Fetch live per-date availability and per-performance pricing for a B2B experience.
The availability endpoints turn an experience from the catalogue into a bookable calendar. Two calls: a summary for the month-grid (which dates are open and the cheapest price on each), and a per-date call for the showtimes, seating sections, and ticket-type prices that sit under a single day. Same as the catalogue API — no keys, no SDK, identify yourself with your partner slug.
Both take the experience id returned by GET /connect/v1/experiences (the experience UUID) as the path segment.
Quick start
Render a month grid, then drill into a date the customer taps.
# 1. Availability summary across a window (defaults to the next 30 days)
curl 'https://concierge.tickadoo.com/connect/v1/experiences/0006be43-d64e-4cfe-98bd-7679be4613c3/availability?partner=<your-slug>&from=2026-06-22&to=2026-07-22'
# 2. Performances + prices for one date the customer picked
curl 'https://concierge.tickadoo.com/connect/v1/experiences/029f71e3-9b42-47a5-b43a-a36016223a4c/availability/2026-06-23?partner=<your-slug>'
Authentication
None. Your partner slug identifies you. Embed it client-side; treat it as public information.
Pricing semantics
Note
Every price returned here is live, all-in, per ticket — booking fees are already included, and the number matches what checkout charges. The only thing that can sit outside a per-performance price is an optional postal-delivery fee on some theatre tickets, offered at the checkout stage if the customer declines the free e-ticket.
Availability is served through a short cache, so values are at most a few minutes old. The booking flow re-validates at reserve time, so brief staleness in a calendar render is cosmetic — a date that flips between render and reserve is caught before payment.
Availability summary
GET /connect/v1/experiences/{id}/availability
Live per-date availability across a window, in one call — built for rendering a month-grid calendar without a request per day.
| Parameter | Required | Description | Default |
|---|---|---|---|
id (path) | Yes | Experience UUID from GET /connect/v1/experiences. | — |
partner | Yes | Your partner slug. | — |
from | No | Window start, YYYY-MM-DD. | today |
to | No | Window end, YYYY-MM-DD (inclusive). | from + 30 days |
locale | No | BCP-47 locale code for any translatable field. | en |
Warning
The window may span at most 92 days (from to to inclusive). A wider window returns 400. Page through longer ranges with successive calls.
Response shape
Each date carries available (boolean) and fromPrice (number, or null) — the lowest all-in adult price bookable on that date.
{
"experienceId": "0006be43-d64e-4cfe-98bd-7679be4613c3",
"currency": "USD",
"window": { "from": "2026-06-22", "to": "2026-07-22" },
"dates": [
{ "date": "2026-06-24", "available": true, "fromPrice": 72.07 },
{ "date": "2026-06-25", "available": false, "fromPrice": null }
],
"nextAvailableDate": null,
"meta": { "cachedAt": "2026-06-22T09:00:00Z", "stale": false }
}
Notable fields:
dates[]— one entry per day in the window.available: falsedays carryfromPrice: null.fromPrice— lowest all-in adult price for that date (booking fees included), computed live, incurrency.nextAvailableDate— present only when the window has no available dates. It’s the soonest bookable date after the window — so instead of a dead-end empty grid you can render “Next available: 22 Sep”.nullwhen nothing is bookable within the supplier’s forward horizon.meta.cachedAt/meta.stale— when the underlying availability was last refreshed, and whether it’s being served slightly stale while a refresh runs.
Performances for a date
GET /connect/v1/experiences/{id}/availability/{date}
Live performances for one experience on one date — the showtimes, and under each showtime the seating sections (theatre) or ticket types (attractions) a customer can book.
| Parameter | Required | Description | Default |
|---|---|---|---|
id (path) | Yes | Experience UUID from GET /connect/v1/experiences. | — |
date (path) | Yes | The date to fetch, YYYY-MM-DD. | — |
partner | Yes | Your partner slug. | — |
locale | No | BCP-47 locale code for any translatable field. | en |
Response shape
{
"experienceId": "029f71e3-9b42-47a5-b43a-a36016223a4c",
"date": "2026-06-23",
"currency": "USD",
"performances": [
{
"id": "perf_1930",
"startTime": "19:30",
"endTime": null,
"isWholeDay": false,
"available": true,
"availability": "good",
"fromPrice": 75.24,
"options": [
{ "id": "orchestra", "name": "Orchestra", "prices": [ { "type": "STANDARD", "amount": 165.00 } ] },
{ "id": "mezzanine", "name": "Mezzanine", "prices": [ { "type": "STANDARD", "amount": 75.24 } ] }
]
}
],
"meta": { "cachedAt": "2026-06-22T09:00:00Z", "stale": false }
}
Notable fields:
startTime/endTime— local"HH:MM", ornull. A whole-day admission (an attraction with no fixed slot) has bothnullandisWholeDay: true.available— whether this performance can still be booked.availability— an optional coarse band,"good"or"limited", present only when the supplier exposes remaining inventory. There are no exact seat counts — never derive a number from this. Absent means “no signal”, not “sold out” (readavailablefor that).fromPrice— lowest all-in adult price across this performance’s options.options[]— what sits under a showtime: seating sections for theatre, ticket types for attractions. Each option has anid, aname(ornull), andprices[].prices[]— each entry is{ "type": string, "amount": number }.typeis a pax type (e.g.ADULT,CHILD) or a section/band label;amountis the all-in per-ticket price incurrency.
Errors
Errors return a JSON body of the shape { "error": "<Code>", "message": "<detail>" }.
| Status | When |
|---|---|
| 400 | Malformed partner; malformed or impossible dates; or a window over 92 days. |
| 404 | Unknown or inactive partner; or experience not found / not on sale. |
| 429 | Rate limited — honour the Retry-After header. |
| 503 | Live availability temporarily unavailable — honour the Retry-After header and retry with backoff. |
{
"error": "InvalidRequest",
"message": "Availability window must not exceed 92 days."
}
OpenAPI spec
The full machine-readable spec (OpenAPI 3.1, currently v1.4.0) covers these endpoints with complete schemas and is published with CORS open: