Returns an exhaustive availability snapshot for a single site/date,
combining opening hours, calendar availability, practitioner and
room schedules, equipment, and the periods already occupied by
existing bookings or blocks.
The endpoint powers Trybe's calendar day view and the booking
workflow's "explain" panel — the same payload is used to render
why a slot is or isn't bookable.
Scope the response to a single offering by supplying both
offering_type and offering_id. When omitted, the response
includes every practitioner, room and equipment item at the site
and skips offering-specific calendars.
The current user must have the reservations.manage permission on
the site to call this endpoint.
The date on which to inspect availability. Expressed as an ISO-8601
date-time anchored in the site's local timezone. Only the date
portion is significant — the endpoint always returns availability
for the full day.
The type of offering to scope availability to. Required when
offering_id is provided. When omitted, the response includes
every practitioner, room and equipment item at the site and skips
offering-specific calendars.
Possible values:appointmentarea_bookingsessioncourseproductpackagevoucher
The identifier of an offering (e.g. an AppointmentType or
AreaBookingType) to focus the response on. When supplied
together with offering_type, the response includes the offering's
calendar availability and only the practitioners, rooms and
equipment associated with that offering.
Responses
200
The availability details were successfully retrieved.
Returns every bookable slot for the given AppointmentType at
the given site between date_time_from and date_time_to.
Each entry includes the slot's start/end time, eligible
practitioners, current capacity, and the per-slot price.
For ranges of one day or less the server runs a live
availability check; longer ranges fall back to the cached
schedule.
exclude_appointments / exclude_basket_items let you ignore
existing bookings or basket items during an edit flow so the
item being edited doesn't block itself.
Comma-separated requested practitioner IDs bound to the exact quote, in place of practitioner_id when an appointment is held to several practitioners. Only slots in which all of these practitioners are available are listed.
Existing standalone appointment item to replace. Requires basket_id;
the item must belong to that basket and site. The quote binds this item
identity and excludes only its booking from pricing demand. General
availability exclusions do not affect pricing demand. Submit the token
to this item's update endpoint.
Comma-separated requested equipment IDs bound to the exact quote. Only slots in which all of this equipment is available are listed. Availability is independently verified on acceptance.
Comma-separated list of existing appointment IDs to ignore when
calculating resource conflicts. Use this when re-checking
availability during an appointment-edit flow so the appointment
being edited doesn't block itself.
Returns every bookable slot for the given AreaBookingType
between date_time_from and date_time_to. The range may not
exceed one day — large windows are rejected with 400 Bad Request.
Slots are ordered earliest first; ties on start time are
broken by shortest duration first. Pass quantity to size the
slot up for multiple guests (mutually exclusive with guest_id).
Returns the set of start times on a given day where every
requested AppointmentType can be booked back-to-back at the
same site. Used by the booking UI when a customer adds multiple
appointments to their basket and expects them to chain together.
The response is a list of MultiAppointmentSlotGroups — one per
viable start time, each containing the individual slots in
order.
Deprecated. The server logs every call to this endpoint
as a deprecated request. Prefer building the chain with
per-type appointment-slots calls if you are starting from
scratch.
Preferred practitioner for the chain. Types offered by this
practitioner are constrained to them; other types retain their
own practitioners. Accept each returned practitioner_id.
Returns one OfferingDateAvailability per day in the
date_from..date_to range, indicating whether the offering
has any bookable slots on that day plus the cheapest slot
price. Use this to drive a calendar UI that greys-out unbookable
days without firing a slot-level query per day.
The maximum supported range is 31 days. Larger ranges return
400 Bad Request.
Supports appointment, session, package, and area_booking
offering types.
The offering whose date-by-date availability should be returned.
Must be paired with offering_type so the platform knows which
catalogue to look the ID up in (appointments, sessions or
packages). Returns 422 if the ID does not resolve to a live
offering of the supplied type.
Returns, for each option of a Package choice, the bookable
slots on the requested day. Each option's slots mirror the
per-offering availability endpoints (appointment-slots,
area-booking-slots, etc.) — the option's item_type drives
which fields are populated.
Pass package_item_id or basket_item_id when editing an
existing item so its own booking does not block the check.
ID of the basket item being edited. Its own bookings are
excluded so its times still appear available, and package rules
are taken into account. The basket is inferred from it.
Returns the current sellable stock for the given Product at
its site. Stock-tracking products return their on-hand count;
non-tracking products return a large sentinel quantity_available
(effectively unlimited).
Use this just before adding a product to a basket to confirm
the unit is still purchasable.
Returns every scheduled SessionType occurrence between
date_time_from and date_time_to (or the whole calendar days
between date_from and date_to), with current capacity and
pricing. Use this to build the customer-facing session
calendar.
Unlike appointments, session occurrences are pre-scheduled —
the endpoint reads the published rota rather than computing
slots from rules.
Send either the date_time_from/date_time_to pair or the
date-only date_from/date_to pair. Prefer the date-only pair
when you want whole site-local days: the server resolves the day
boundaries with the site's timezone rules, so the client never has
to compute a UTC offset itself.
Earliest date-time to consider, in ISO-8601 format in the
offering's site timezone (e.g. 2026-06-01T09:00:00+01:00).
Required unless date_from is sent.
First date in the requested window (inclusive), ISO-8601
YYYY-MM-DD in the offering's site timezone. The server resolves
the day's boundaries using the site's timezone rules. Required
unless date_time_from is sent.
Selected Session Basket Item being replaced. Only its booking is excluded from demand; sibling bookings still count. The item must belong to basket_id at this Site.
Responses
200
A list of SessionAvailabilityOccurrences for the requested window.