Skip to main content
GET
Returns the bookable slot starts for a single location across the requested window. Slots are generated from the location’s open_hours, with global / per-location blocked dates skipped and already-booked Aniva test sessions subtracted, so the result reflects what your patients can actually reserve client-side. Requires the test_sessions_schedule scope. The location must also fall within your API key’s location-group access context.
Use this endpoint instead of inferring availability from the static open_hours returned by List Locations — only this endpoint accounts for live bookings, per-date schedule exceptions, and the 12-hour minimum notice at Aniva-operated locations. Every slot returned here is bookable as-is.
Responses carry Cache-Control: private, max-age=30, stale-while-revalidate=60, so a browser may serve a cached payload for up to ~30 seconds — a slot booked inside that window can still appear bookable until the next refresh. Surface conflicts at booking time as well.

Path parameters

string
required
Location identifier (UUID). Use the id from List Locations.

Query parameters

string
Inclusive start of the window in YYYY-MM-DD (interpreted in timezone). Optional. Defaults to today when neither date is supplied, or to end_date − 30 days when only end_date is supplied. Past dates are silently clamped to today.
string
Inclusive end of the window in YYYY-MM-DD (interpreted in timezone). Optional. Defaults to today + 30 days when neither date is supplied, or to start_date + 30 days when only start_date is supplied. Must be on or after start_date and within 90 days of today.
string
IANA timezone (e.g. Europe/Berlin) used to interpret start_date / end_date and to group slots by calendar date. Optional — defaults to the location’s own timezone. Slot start times themselves are always rendered as UTC instants (Z) and never shift with this parameter — the slot grid is always projected from the location’s own timezone; the parameter only affects which calendar day a slot is grouped under. Day entries in the response cover exactly start_date..end_date as calendar days in this timezone. Omit it unless you render the picker in another timezone.

Response

On success, the API returns 200 OK with a single availability object.
string
required
Echoed location identifier.
string
required
IANA timezone the response is rendered in (e.g., Europe/Berlin) — echoes the timezone query param when supplied, otherwise the location’s own timezone.
integer
Spacing between consecutive bookable slot starts in minutes. The location-configured grid step — every slot in availability falls on this grid. null only when the location has no scheduling configuration. Not a session-duration window: overlapping bookings at different starts do not conflict; only exact-start collisions count toward concurrency.
array
required
Per-day bookable slots. Days with zero bookable slots are omitted to keep the payload tight. Each entry has:

Error responses