DOCS

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.

ParameterRequiredDescriptionDefault
id (path)YesExperience UUID from GET /connect/v1/experiences.
partnerYesYour partner slug.
fromNoWindow start, YYYY-MM-DD.today
toNoWindow end, YYYY-MM-DD (inclusive).from + 30 days
localeNoBCP-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: false days carry fromPrice: null.
  • fromPrice — lowest all-in adult price for that date (booking fees included), computed live, in currency.
  • 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”. null when 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.

ParameterRequiredDescriptionDefault
id (path)YesExperience UUID from GET /connect/v1/experiences.
date (path)YesThe date to fetch, YYYY-MM-DD.
partnerYesYour partner slug.
localeNoBCP-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", or null. A whole-day admission (an attraction with no fixed slot) has both null and isWholeDay: 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” (read available for 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 an id, a name (or null), and prices[].
  • prices[] — each entry is { "type": string, "amount": number }. type is a pax type (e.g. ADULT, CHILD) or a section/band label; amount is the all-in per-ticket price in currency.

Errors

Errors return a JSON body of the shape { "error": "<Code>", "message": "<detail>" }.

StatusWhen
400Malformed partner; malformed or impossible dates; or a window over 92 days.
404Unknown or inactive partner; or experience not found / not on sale.
429Rate limited — honour the Retry-After header.
503Live 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:

https://concierge.tickadoo.com/connect/v1/openapi.json