# Check availability for multiple bookable products in one call Batch availability check. Modelled as a command (POST), not a search. The request carries root-level date, quantity and optional time, plus a bookableProducts[] list. Each entry has a required compositeId and may override date, quantity and time. When an entry omits any of those, the root-level value is used. quantity carries the count for either capability, same as in POST /v1/orders — number of covers for a table reservation, number of tickets for an event-ticket line. Every entry must end up with date and quantity resolved (either from the entry or the root). time is optional — event capabilities are queried by date alone; for table reservations it narrows the slot when supplied. An entry that cannot resolve date and quantity is reported as an error result and does not block the others. Searches run independently: a failure on one compositeId yields an error on that result only — all other results are returned normally. The response carries one AvailabilityResult per requested compositeId, preserving request order. There is no 404 response: an unknown/nonexistent compositeId is not a request-level failure — it's reported as an error on that entry's AvailabilityResult, same as any other per-entry failure (e.g. unresolved date/quantity), never as an HTTP-level not-found for the whole call. Endpoint: POST /v1/availabilities Version: 1.0.0 Security: Live, Sandbox ## Header parameters: - `X-Correlation-ID` (string) Optional ID for cross-system transaction tracking. Example: "11C46F5F-CDEF-4865-94B2-0EE0EDCC26DA" - `X-Partner-Reference` (string) Required for Bookable Agents — identifies the partner on whose behalf the request is made. Example: "bottomlessbrunch.com" ## Request fields (application/json): - `date` (string,null) Default booking date (YYYY-MM-DD), inherited by entries that omit it. Example: "2026-06-15" - `quantity` (integer,null) Default quantity, inherited by entries that omit it — same field as OrderItem.quantity. For a table_reservation bookable, quantity is the number of people (covers); for an event_ticket bookable, quantity is the number of tickets. Example: 4 - `time` (string,null) Optional default start time (HH:mm), inherited by entries that omit it. Example: "19:00" - `bookableProducts` (array, required) Bookable products to check. One result is returned per entry. - `bookableProducts.compositeId` (string, required) CompositeId of the bookable product to check. Example: "29|CS|275cc44dd2e2496fba44857c9257443a|e4d909c290d0fb1ca068ffaddf22cbd0" - `bookableProducts.date` (string,null) Overrides the root date for this entry. Example: "2026-06-15" - `bookableProducts.quantity` (integer,null) Overrides the root quantity for this entry — number of people for a table_reservation bookable, number of tickets for an event_ticket bookable. Example: 2 - `bookableProducts.time` (string,null) Overrides the root time for this entry. Example: "20:00" ## Response 200 fields (application/json): - `results` (array, required) One result per requested compositeId, in request order. - `results.compositeId` (string, required) The compositeId this result refers to. Example: "29|CS|275cc44dd2e2496fba44857c9257443a|e4d909c290d0fb1ca068ffaddf22cbd0" - `results.availability` (object) Availability for a single bookable product. Mirrors the BookingApi AvailabilityResponse. - `results.availability.name` (string,null) Name of the available booking option. Example: "Dinner" - `results.availability.deposit` (number,null) Deposit amount required for the booking. Example: 10 - `results.availability.policy` (string,null) General policy details regarding the booking. - `results.availability.autoConfirmRule` (object) - `results.availability.autoConfirmRule.date` (string,null) Example: "2026-06-15" - `results.availability.autoConfirmRule.dateType` (string,null) Example: "weekday" - `results.availability.autoConfirmRule.minPeople` (integer,null) Example: 1 - `results.availability.autoConfirmRule.maxPeople` (integer,null) Example: 6 - `results.availability.autoConfirmRule.timeFrom` (string,null) Example: "12:00" - `results.availability.autoConfirmRule.timeTo` (string,null) Example: "22:30" - `results.availability.cancellationPolicy` (string,null) Terms and conditions for cancelling the booking. - `results.availability.times` (array,null) - `results.availability.times.time` (string,null) Available time slot (HH:mm). Example: "18:00" - `results.availability.times.duration` (integer,null) Duration in minutes. Example: 90 - `results.availability.times.type` (string,null) How a time slot can be handled. book = instant confirmation; request = manual approval via enquiry. Enum: "book", "request" - `results.availability.times.requestReason` (string,null) Present only when type is request. Why the slot requires manual approval. Known values: fully_booked, exceeds_auto_confirm, request_only. Handle unknown values gracefully. - `results.availability.times.product` (object,null) Product info and applicable space policies for a time slot. - `results.availability.times.product.id` (string) CompositeId of the product. - `results.availability.times.product.name` (string,null) - `results.availability.times.product.spaces` (array,null) Spaces associated with this product, with policies pre-filtered to the slot. - `results.availability.times.product.spaces.id` (integer) Unique identifier of the space. - `results.availability.times.product.spaces.spaceName` (string,null) - `results.availability.times.product.spaces.description` (string,null) - `results.availability.times.product.spaces.floorLocation` (integer,null) Floor number (0 = ground floor). - `results.availability.times.product.spaces.facilities` (array,null) Enum: "Stage", "Private Bar", "Private Toilets", "Soundproof", "Own Street Entrance", "Fixed Seating", "Outside Space", "Can Be Decorated", "DJ Stand", "Suitable for Meetings", "Wheelchair Accessible", "Accessible Toilets", "Projector", "Screen / TV", "Microphone / PA", "Laptop Connection", "Own Sound System", "HDMI / AV", "In-House Lighting", "Sports TV", "Bring Own DJ", "Serves Food", "External Catering Permitted", "Draft Beer", "Cash Bar", "Can Bring Own Cake", "Tea/Coffee Facilities", "Cloakroom", "Smoking Area", "Wifi Available", "Pet Friendly", "Parking", "Air Conditioning" - `results.availability.times.product.spaces.capacityStanding` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityStanding.min` (integer,null) - `results.availability.times.product.spaces.capacityStanding.max` (integer,null) - `results.availability.times.product.spaces.capacitySeated` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityCabaret` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityTheatre` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityBoardroom` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityClassroom` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityUShape` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityBanquet` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.capacityReception` (object,null) Min/max capacity range; both bounds are optional. - `results.availability.times.product.spaces.policies` (object) Space policies pre-filtered to the requested date and time slot. - `results.availability.times.product.spaces.policies.minimumSpend` (array,null) Minimum spend entries applicable to this slot (override wins). - `results.availability.times.product.spaces.policies.minimumSpend.label` (string,null) - `results.availability.times.product.spaces.policies.minimumSpend.spendValue` (integer,null) Minimum spend in pence (GBP). - `results.availability.times.product.spaces.policies.under18s` (object,null) - `results.availability.times.product.spaces.policies.under18s.enabled` (boolean) - `results.availability.times.product.spaces.policies.under18s.until` (string,null) - `results.availability.times.product.spaces.policies.occasionTypes` (object,null) - `results.availability.times.product.spaces.policies.occasionTypes.values` (array,null) Enum: "Christmas Party", "Corporate Event", "Engagement Party", "Funeral/Wake", "Summer Party", "Wedding Party", "Winter Party", "Work Get Together", "Working Breakfast", "Working Lunch", "Working Dinner", "Promoted Event" - `results.availability.times.product.spaces.policies.promotedEvents` (object,null) - `results.availability.times.product.spaces.policies.promotedEvents.notes` (string,null) - `results.availability.times.product.spaces.policies.accessibility` (object,null) - `results.availability.times.product.spaces.policies.accessibility.accessible` (boolean,null) - `results.availability.times.product.spaces.policies.servesFood` (object,null) - `results.availability.times.preOrderItems` (object,null) Which packages and menus are available for this availability result. - `results.availability.times.preOrderItems.packageIds` (array,null) Package IDs available when allowedPackages is set. - `results.availability.times.preOrderItems.allowedPackages` (string,null) none: no packages; all: all packages; set: only packageIds. Enum: "none", "all", "set" - `results.availability.times.preOrderItems.menuIds` (array,null) Menu IDs available when allowedMenus is set. - `results.availability.times.preOrderItems.allowedMenus` (string,null) none: no menus; all: all menus; set: only menuIds. Enum: "none", "all", "set" - `results.availability.times.unavailableReasons` (array,null) Present only when includeUnavailable=true and the slot was filtered out. - `results.availability.noAvailabilityReason` (string,null) Populated only when times is empty — human-readable reason. - `results.availability.noAvailabilityCode` (string,null) Populated only when times is empty. Machine-readable code. Known values: NO_AVAILABILITY, NO_ELIGIBLE_PRODUCTS, FILTERED_BY_OPERATOR_RULES, FILTERED_BY_CAPACITY. Treat unknown values as a generic no-availability condition. - `results.error` (object) - `results.error.type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `results.error.title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `results.error.status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `results.error.detail` (string) A human-readable explanation specific to this occurrence of the problem. - `results.error.code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "BOOK-N-001" - `results.error.isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `results.error.traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" ## Response 400 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "VALID-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" - `errors` (object,null) Validation errors dictionary mapping field names to arrays of error messages. Only present for validation errors (VALID-N-001). Example: {"Date":["Availability date cannot be in the past."],"EndTime":["EndTime must be after StartTime."]} ## Response 401 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "VALID-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" - `errors` (object,null) Validation errors dictionary mapping field names to arrays of error messages. Only present for validation errors (VALID-N-001). Example: {"Date":["Availability date cannot be in the past."],"EndTime":["EndTime must be after StartTime."]} ## Response 403 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "VALID-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" - `errors` (object,null) Validation errors dictionary mapping field names to arrays of error messages. Only present for validation errors (VALID-N-001). Example: {"Date":["Availability date cannot be in the past."],"EndTime":["EndTime must be after StartTime."]} ## Response 429 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "VALID-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" - `errors` (object,null) Validation errors dictionary mapping field names to arrays of error messages. Only present for validation errors (VALID-N-001). Example: {"Date":["Availability date cannot be in the past."],"EndTime":["EndTime must be after StartTime."]} ## Response 500 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "BOOK-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" ## Response 503 fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "BOOK-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001" ## Response default fields (application/json): - `type` (string) A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be "about:blank". - `title` (string, required) A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization. - `status` (integer, required) The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem. - `detail` (string) A human-readable explanation specific to this occurrence of the problem. - `code` (string, required) Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes. Example: "BOOK-N-001" - `isRetryable` (boolean, required) Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input. - `traceId` (string) Request trace identifier for debugging and correlation purposes. Example: "0HNJ2BG2TU3BU:00000001"