Booking Flow

Availability

Retrieve availability for an offering.

get/shop/item-availability/appointment-enquiries/{appointmentTypeId}

Check ability to enquire at the given times

actionCheckAppointmentEnquiryAvailability

Use this endpoint to check availability for an appointment enquiry

Path parameters

Query parameters

  • date_time_fromstringrequired

    The earliest time the appointment could start.

  • date_time_tostringrequired

    The latest time the appointment could end.

Responses

  • 200

    Results of the availability check for an appointment enquiry

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/availability-details

Get availability details for a date

getAvailabilityDetails

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.

Query parameters

  • site_idstringrequired

    Filter results by the site they belong to

  • datedate-timerequired

    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.

  • offering_typestringoptional

    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
  • offering_idobject-idoptional

    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.

  • 400

    The request failed.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation

get/shop/item-availability/appointment-slots/{siteId}/{appointmentTypeId}

List appointment slots

listAppointmentSlotsByRange

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.

Path parameters

  • siteIduuidrequired

    The ID of the site the offering belongs to.

  • appointmentTypeIdmongo-idrequired

    The ID of the appointment type to check availability for.

Query parameters

  • date_time_fromstringrequired

    Earliest date-time to consider, in ISO-8601 format in the offering's site timezone (e.g. 2026-06-01T09:00:00+01:00).

  • date_time_tostringrequired

    Latest date-time to consider. Must be strictly after date_time_from. For per-day endpoints, the range may not exceed a single day.

  • durationintegeroptional

    Override the offering's default duration, in minutes. Must be positive.

  • practitioner_idstringoptional

    Limit slots to a single practitioner. The practitioner must be eligible to deliver the appointment type.

  • exclude_appointmentsstringoptional

    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.

  • exclude_basket_itemsstringoptional

    Comma-separated list of basket-item IDs to ignore. Mirrors exclude_appointments / exclude_bookings but for items already in the caller's basket.

  • basket_idstringoptional

    Basket ID to scope the check to. The server reads the basket's coupon codes (for price computation) and excludes its items when computing conflicts.

  • guest_idstringoptional

    Guest ID to attribute the slot to. Drives per-guest booking limits.

  • required_quantityintegeroptional

    Number of guests/instances the slot must accommodate. Defaults to 1.

Responses

  • 200

    A list of bookable AppointmentAvailabilitySlots plus a meta block with the practitioner roster and selection mode.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/item-availability/area-booking-slots/{areaBookingTypeId}

List area-booking slots

listAreaBookingSlotsByRange

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).

Path parameters

  • areaBookingTypeIdmongo-idrequired

    The ID of the area booking type to check availability for.

Query parameters

  • date_time_fromstringrequired

    Earliest date-time to consider, in ISO-8601 format in the offering's site timezone (e.g. 2026-06-01T09:00:00+01:00).

  • date_time_tostringrequired

    Latest date-time to consider. Must be strictly after date_time_from. For per-day endpoints, the range may not exceed a single day.

  • durationintegeroptional

    Override the offering's default duration, in minutes. Must be positive.

  • exclude_bookingsstringoptional

    Comma-separated list of existing area-booking IDs to ignore when calculating area conflicts.

  • exclude_basket_itemsstringoptional

    Comma-separated list of basket-item IDs to ignore. Mirrors exclude_appointments / exclude_bookings but for items already in the caller's basket.

  • basket_idstringoptional

    Basket ID to scope the check to. The server reads the basket's coupon codes (for price computation) and excludes its items when computing conflicts.

  • guest_idstringoptional

    Guest ID to attribute the slot to. Drives per-guest booking limits.

  • quantityintegeroptional

    Number of guests/instances the slot must accommodate. Defaults to 1.

Responses

  • 200

    A list of AreaBookingAvailabilitySlots for the requested day. Slots are ordered earliest first, then shortest first when start times match.

  • 400

    The request failed.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

post/shop/item-availability/multi-appointment-slots

List combined slots for multiple appointment types

actionCheckMultiAppointmentAvailability

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.

Request body

  • site_idstringrequired

    ID of the site to search at.

  • datedaterequired

    Day to slot the appointments into, ISO-8601 YYYY-MM-DD in the site's timezone.

  • itemsobject[]required

    One entry per appointment type to chain. Order matters — each item slots immediately after the previous one.

  • practitioner_idstringoptional

    Constrain every appointment to the same practitioner.

  • basket_idstringoptional

    Basket to exclude from the conflict calculation (useful when re-checking after an edit).

Responses

  • 200

    A list of MultiAppointmentSlotGroups — one per common start time that can host every requested appointment type in sequence.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/item-availability/offering-dates

List availability by day for an offering

listOfferingDateAvailability

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.

Query parameters

  • date_fromdaterequired

    First date in the requested window (inclusive), ISO-8601 YYYY-MM-DD in the offering's site timezone.

  • date_todaterequired

    Last date in the requested window (inclusive). For most offerings the range may not exceed 31 days.

  • offering_idstringrequired

    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.

  • offering_typestringrequired

    The kind of offering offering_id refers to.

    Possible values:appointmentsessionpackagearea_booking
  • quantityintegeroptional

    Number of guests/instances the slot must accommodate. Defaults to 1.

  • partner_idstringoptional

    Restrict the check to the given partner's allotment. Pass the partner's partner_id (e.g. ota).

Responses

  • 200

    Per-day availability for an offering across the requested date range. Each entry is one calendar day.

  • 400

    The request failed.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/item-availability/package-slots/{packageId}/choices/{choiceId}

List bookable slots for a package choice

listPackageChoiceSlots

Returns every bookable slot for one of the items in a Package's choice list. Each entry includes the package_item_id so the caller can attribute the slot back to the right choice when adding to a basket.

The slot shape mirrors the per-offering availability endpoints (appointment-slots, area-booking-slots, etc.) — the underlying offering type drives which fields are populated.

Path parameters

  • packageIdmongo-idrequired

    The ID of the package to check availability for.

  • choiceIdmongo-idrequired

    The ID of the package item choice (the slot in the package that's being filled).

Query parameters

  • date_time_fromstringrequired

    Earliest date-time to consider, in ISO-8601 format in the offering's site timezone (e.g. 2026-06-01T09:00:00+01:00).

  • date_time_tostringrequired

    Latest date-time to consider. Must be strictly after date_time_from. For per-day endpoints, the range may not exceed a single day.

  • basket_idstringoptional

    Basket ID to scope the check to. The server reads the basket's coupon codes (for price computation) and excludes its items when computing conflicts.

  • guest_idstringoptional

    Guest ID to attribute the slot to. Drives per-guest booking limits.

Responses

  • 200

    Bookable slots for a single package choice, indexed by package_item_id.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/item-availability/products/{productId}

Get product stock availability

getProductAvailability

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.

Path parameters

  • productIdmongo-idrequired

    The ID of the product to check availability for.

Responses

  • 200

    Current stock availability for the requested Product.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/shop/item-availability/sessions/{siteId}/{sessionTypeId}

List session occurrences

listSessionOccurrences

Returns every scheduled SessionType occurrence between date_time_from and date_time_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.

Path parameters

  • siteIduuidrequired

    The ID of the site the offering belongs to.

  • sessionTypeIdmongo-idrequired

    The ID of the session type to check availability for.

Query parameters

  • date_time_fromstringrequired

    Earliest date-time to consider, in ISO-8601 format in the offering's site timezone (e.g. 2026-06-01T09:00:00+01:00).

  • date_time_tostringrequired

    Latest date-time to consider. Must be strictly after date_time_from. For per-day endpoints, the range may not exceed a single day.

Responses

  • 200

    A list of SessionAvailabilityOccurrences for the requested window.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation