Skip to content

Get Availability
Preview

Request

Get a single availability by its ID.

Use this to re-check one availability a guest has selected, without fetching the window around it again. An availability that no longer exists — a deleted event, or a start time the experience has stopped operating — returns 404, as does one that belongs to a different experience.

A timeslot the host has closed to new bookings returns 404 too. An event the host has closed to new bookings reports available: false, even when every constraint in constraints passes. An event the host exempted from the closure is not affected.

This is a read: it creates nothing and has no side effects. There is nothing to send yet, so send no body at all.

Security
OAuth2(Required scopes: experience.read)
Path
experienceIdstringrequired

The unique identifier of the experience the availability belongs to.

availabilityIdstringrequired

The opaque availability ID, exactly as returned on Availability.id.

curl -i -X POST \
  'https://api.understory.io/v1/experiences/{experienceId}/availabilities/{availabilityId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

OK

Bodyapplication/json
idstringrequired

Opaque identifier of the availability, stable for as long as the availability exists. Hand it back as-is to Get Availability; its encoding is not part of the contract and may change without notice.

Example:"djF8ZXZ0fDNmMmIxZDY0LTljN2UtNGYwYS04YjIxLTJmMGU1YTZjMWQ3Nw"
subjectany(AvailabilitySubject)required
start_timestringrequired

The start of the availability as a local date-time, without a timezone offset (e.g. 2026-07-14T15:00:00). Combine it with timezone to derive an absolute instant. On an event with several sessions this is the earliest session's start, whatever order the sessions are listed in.

Example:"2026-07-14T15:00:00"
end_timestringrequired

The end of the availability as a local date-time, without a timezone offset (e.g. 2026-07-14T16:00:00). See start_time for how to combine it with timezone. On an event with several sessions this is the end of that same earliest session — not the end of the last one. An availability describes one sitting, named by subject.session_id, so end_time is not when the event finishes, and a calendar built from start_time and end_time alone will show a multi-session event as its first session only.

Example:"2026-07-14T16:00:00"
timezonestringrequired

The IANA timezone the availability's start_time and end_time are expressed in, resolved from the location the availability runs at. It is the timezone of the session they are taken from, so an event whose sessions run at locations in different timezones reports only the earliest session's.

Example:"Europe/Copenhagen"
availablebooleanrequired

Whether the availability is currently bookable. false if any constraint in constraints reports available: false, or if the host has closed the event to new bookings.

constraintsArray of any(AvailabilityConstraint)required

Every constraint that applies to this availability, in no particular order. Both passing (available: true) and failing constraints are included. Which constraints apply depends on the availability: a timeslot has no event yet, so it carries neither EVENT_STATE nor EXCLUSIVITY.

Response
{ "id": "djF8ZXZ0fDNmMmIxZDY0LTljN2UtNGYwYS04YjIxLTJmMGU1YTZjMWQ3Nw", "subject": { "type": "EVENT", "event_id": "string", "session_id": "string" }, "start_time": "2026-07-14T15:00:00", "end_time": "2026-07-14T16:00:00", "timezone": "Europe/Copenhagen", "available": true, "constraints": [ { … } ] }