Booking Flow

Offering Availability

Endpoints for retrieving offering availability.

get/shop/item-availability/table-reservation-slots/{tableReservationTypeId}

Get available table reservation slots on a single date.

getTableReservationSlots

This endpoint retrieves a list of slots for the reservation type on the given date.

Path parameters

Query parameters

  • datedaterequired

    The date the reservation is for.

  • num_guestsintegerrequired

    The number of guests the reservation is for.

Responses

  • 200

    The table reservation slots were successfully retrieved

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/shop/appointment-slots/{appointmentTypeId}/{date}

List appointment slots on a single date

listAppointmentSlots

Use this endpoint to list every potential start time for a given AppointmentType on a single date, together with each slot's bookability metadata.

The response is an array of AppointmentSlot entries. Each slot includes the start and end time, the duration and end buffer, the practitioners and rooms that could be used to deliver it, the quantity currently available (quantity_available) versus the theoretical maximum (total_quantity), and the price in the smallest currency unit. Slots that aren't currently bookable expose a machine-readable no_availability_reason (e.g. time_passed, no_practitioners_available, not_yet_bookable) and a human-readable no_availability_message.

To check availability across a sliding date-time window — useful for appointment enquiries where the customer is flexible on date — use actionCheckAppointmentEnquiryAvailability instead.

Path parameters

  • appointmentTypeIdmongo-idrequired

    The ID of the AppointmentType to check availability for.

  • datedaterequired

    The date to check availability on, in YYYY-MM-DD format. The date is interpreted in the timezone of the site the appointment type belongs to.

Query parameters

  • practitioner_idmongo-idoptional

    Optionally restrict the results to slots that can be offered by a specific practitioner. When omitted, all eligible practitioners are considered.

  • quantityintegeroptional

    The number of appointment slots required at the same start time. Used when booking multiple guests onto the same appointment type. Defaults to 1.

Responses

  • 200

    The list of available appointment slots was successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

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

List area-booking slots across a date range

listAreaBookingSlots

Use this endpoint to list every potential start time for a given AreaBookingType across a date range, with each slot's pricing and availability metadata.

The response contains an array of AreaBookingSlot entries. Each slot lists the start and end time, the duration in minutes, the areas that could deliver it, the quantity currently available versus the theoretical maximum, and the price in the smallest currency unit. Slots that aren't currently bookable include a machine-readable no_availability_reason (e.g. time_passed, no_areas_available, not_yet_bookable) and a human-readable no_availability_message you can surface in your UI.

For single-date appointment availability, see listAppointmentSlots or getTableReservationSlots.

Path parameters

  • areaBookingTypeIdmongo-idrequired

    The ID of the AreaBookingType to check availability for.

Query parameters

  • date_fromdaterequired

    The earliest start date to return slots for, in YYYY-MM-DD format.

  • date_todaterequired

    The latest start date to return slots for, in YYYY-MM-DD format. The range is inclusive. We recommend keeping the range to 14 days or fewer for performance reasons.

  • quantityintegeroptional

    The number of area-booking slots required at the same start time. Used when booking multiple guests onto the same area. Defaults to 1.

  • area_idmongo-idoptional

    Optionally restrict the results to slots that can be served by a specific area. When omitted, all eligible areas configured on the booking type are considered.

Responses

  • 200

    The list of available area-booking slots was successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/shop/offering-availability

Get monthly availability for an offering

listOfferingAvailability

Returns one entry per calendar day in the month containing date, indicating whether the supplied offering is bookable and whether any availability rule covers the day at all. Intended for powering calendar-month pickers in booking UIs without iterating every individual slot.

The check honours every available rule on the offering, then subtracts unavailable rules; if any window survives for a given day the day's is_available is true.

Requires the RESERVATIONS_VIEW permission on the offering's site.

Query parameters

  • datedaterequired

    Any ISO 8601 calendar date inside the month to summarise. The response covers the full month containing this date, computed in the offering's timezone.

  • offering_typestringrequired

    The offering type the offering_id belongs to.

    Possible values:appointmentarea_bookingpackagesession
  • offering_idstringrequired

    ID of the offering to summarise.

Responses

  • 200

    Per-day availability summary for every day in the targeted month.

  • 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

post/shop/offering-availability/add-day-unavailability

Mark a day as unavailable for an offering

actionAddOfferingDayUnavailability

Creates (or no-ops on, if one already exists) a one-day "unavailable" availability rule on the offering. Equivalent to going into the offering's availability calendar and toggling the targeted day off.

Idempotent: if the same (date, offering) already has an unavailable rule, the existing rule is returned without modification.

Requires the SETTINGS_MANAGE permission on the offering's site.

Request body

  • datedaterequired

    ISO 8601 calendar date to mark unavailable, in the offering's timezone.

  • offering_typestringrequired

    The offering type the offering_id belongs to.

    Possible values:appointmentarea_bookingpackagesession
  • offering_idstringrequired

    ID of the offering to update.

Responses

  • 204

    The day was successfully marked unavailable.

  • 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

post/shop/offering-availability/remove-day-unavailability

Clear unavailability for a day on an offering

actionRemoveOfferingDayUnavailability

Removes every unavailable availability rule that covers the targeted day on the offering. If a rule spans more than the targeted day (e.g. a multi-day block), it is split into surrounding rules that preserve the unavailability on the days that weren't targeted.

The operation is serialised via a per-offering lock to prevent concurrent edits clobbering each other; if another request is currently modifying the same offering, the call returns 429 Too Many Requests.

Requires the SETTINGS_MANAGE permission on the offering's site.

Request body

  • datedaterequired

    ISO 8601 calendar date to mark unavailable, in the offering's timezone.

  • offering_typestringrequired

    The offering type the offering_id belongs to.

    Possible values:appointmentarea_bookingpackagesession
  • offering_idstringrequired

    ID of the offering to update.

Responses

  • 204

    The day's unavailability rules were successfully cleared.

  • 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

  • 429

    Another request is currently modifying availability rules for this offering. Retry after a short backoff.