Skip to content
Last updated

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[7.0.0] - 2026-04-17

Deploy on production

Changed

  • BREAKING CHANGE BookingRequest.areaId renamed to BookingRequest.spaceId. Type changed from string to integer. Obtain valid space IDs from the spaces array in the availability response time slots.

Removed

  • AvailabilityTimeSlot.areas: removed. Use spaces from the product data to obtain valid space IDs for booking.

[6.4.0] - 2026-04-15

Added

  • AvailabilityResponse.noAvailabilityCode: new nullable string field, populated only when times is empty. Machine-readable code indicating why no availability was found. Known values:
    • NO_AVAILABILITY — no available slots for the requested parameters.
    • NO_ELIGIBLE_PRODUCTS — no products match the request.
    • FILTERED_BY_OPERATOR_RULES — all slots were filtered out by operator availability rules.
    • FILTERED_BY_CAPACITY — no slots satisfy the requested party size.
    • Clients should treat unknown values as a generic no-availability condition, as new values may be introduced without prior notice.

Removed

  • AvailabilityResponse.noAvailabilityAction: removed. Use noAvailabilityReason (human-readable) and the new noAvailabilityCode (machine-readable) instead.

[6.3.0] - 2026-04-14

Added

  • AvailabilityTimeSlot.requestReason: new nullable string field, present only when type is request. Indicates why the time slot requires manual operator approval rather than instant confirmation. Possible values:
    • fully_booked — no real-time availability for this slot, but the operator is open to receiving enquiries.
    • exceeds_auto_confirm — availability exists but the requested party size exceeds the venue's auto-confirm threshold and requires explicit operator approval.
    • Clients should handle unknown values gracefully as new values may be introduced in future versions.
  • AvailabilityResponse.noAvailabilityReason: new nullable string field, populated only when times is empty. Human-readable message explaining why no availability was found for the requested parameters.
  • Product.slug: new nullable string field — aggregation slug identifier for the product.
  • PreorderPackage.slug: new nullable string field — aggregation slug identifier for the package.
  • Menu.slug: new nullable string field — aggregation slug identifier for the menu.

[6.2.0] - 2026-04-01

Added

  • Product.spaces: new field on GET /venues and GET /venues/{venueId} responses. Each product now returns the list of spaces available within it, including physical data (spaceName, description, floorLocation, facilities, capacity layout fields) and space policies (minimumSpend, occasionTypes, under18s, promotedEvents, accessibility, servesFood).
  • Product.preOrderRequiredType: enum specifying which type of preorder is required — none, package, menu, or packageAndMenu.
  • Product.depositRequired: boolean indicating whether a deposit is required when booking a product.
  • AvailabilityRequest.children: optional field for the number of children in the party. Note: not all TMS providers distinguish between adults and children — when unsupported, children may be added to the total party size or ignored.
  • AvailabilityRequest space policy filters — new optional query parameters to filter time slots by space policy:
    • minimumSpend: maximum minimum spend (in pence); excludes slots above this threshold.
    • under18s: soft filter on the under-18s policy.
    • occasionTypes: filter by supported occasion type.
    • promotedEvents: soft filter on the promoted-events policy.
    • accessibility: filter by wheelchair accessibility.
    • servesFood: soft filter on the serves-food policy.
    • includeUnavailable: when true, filtered-out slots are included in the response with unavailableReasons populated instead of being excluded.
  • AvailabilityTimeSlot.product: new object returned in each time slot containing the product's id, name, and spaces array. Space policies within this object (including minimumSpend) are pre-filtered to the requested date and time slot.
  • AvailabilityTimeSlot.areas: list of available areas/zones for this time slot. Populated only for TMS providers that support area-based booking (e.g. Zonal). Pass the desired id as areaId when creating a booking.
  • AvailabilityTimeSlot.unavailableReasons: present only when includeUnavailable=true; contains human-readable explanations for each failing policy filter.
  • BookingRequest.children: optional field for the number of children included in the booking.
  • BookingRequest.areaId: optional area/zone ID to target when creating a booking. Obtain valid IDs from AvailabilityTimeSlot.areas.
  • Booking.depositAmount: deposit amount (float, in pence) captured from the TMS at reservation time.
  • Booking.area: area or zone assigned to the booking, with id and name as reported by the TMS.
  • New schemas: SpaceCapacityRange, Area, BookingArea.
  • New shared component files: common/VenueSpaces.yaml (space schemas and policy types) and common/Headers.yaml (shared header parameter definitions).

Changed

  • AvailabilityRequest.partySize and BookingRequest.partySize: description clarified from "number of guests/people" to "number of adults".
  • CorrelationID and PartnerReference header parameters refactored to reference common/Headers.yaml instead of being defined inline.

Deprecated

  • AvailabilityTimeSlot.productId: use AvailabilityTimeSlot.product.id instead.

[6.1.0] - 2026-03-13

Added

  • Sparse fieldsets support via the fields query parameter on all GET endpoints. Request only the fields you need to reduce payload size and improve response times. See Sparse Fieldsets for details.
  • text/toon response format support across all Bookings API endpoints that return a body. Set Accept: text/toon to receive responses in TOON (Terse Object-Oriented Notation) — a compact format that reduces token count by 30–60% compared to JSON. Fully opt-in; omitting the header continues to return standard JSON. See TOON Format for details.
  • VenuePreorders: added preorders field to GET /venues and GET /venues/{venueId} responses.

[6.0.0] - 2026-02-26

Added

  • VenuePreorders schema: new wrapper object containing packages and menus arrays
  • ProductAvailabilityRules schema: availability rules for a product grouped by source (weekly, exceptions, rules)
  • WeeklyRule schema: weekly booking schedule, one entry per day of the week
  • RuleException schema: date-specific availability exceptions imposed by the TMS
  • AvailabilityRule schema: operator-defined availability rules per partner
  • AvailabilityRuleType enum: date_range, recurring, time_based, specific_dates, specific_dates_with_time, date_range_with_time, recurring_with_time
  • RuleDataBase and all discriminated subtypes: DateRangeRuleData, RecurringRuleData, TimeBasedRuleData, SpecificDatesRuleData, SpecificDatesWithTimeRuleData, DateRangeWithTimeRuleData, RecurringWithTimeRuleData
  • PreorderContainer schema: container for all preorder items (packagesPreorderPackageRequest, menusPreorderMenuRequestV2)
  • MenuItemOption schema: configurable option for a menu item (field value)
  • MenuItem: added fields name, price, description, diet_types, allergens, configurable_options, type, subType, displayOrder
  • MenuItemSelection: added field options (array of MenuItemOption)
  • Booking.preorders.menus: added field submitted (enum: pre / post)
  • PATCH /venues/bookings/{bookingId}: new endpoint for partial booking updates via JSON Patch (RFC 6902)
  • JsonPatchOperation schema supporting add, remove, replace operations
  • Product: added field preOrderRequired (boolean)

Changed

  • MenuItem.subGroupName renamed to subType
  • POST /venues/{compositeId}/booking response 201: changed from BookingResponse to full Booking schema
  • Terminology updated throughout: "RMS (Restaurant Management System)" → "TMS (Table Management System)"
  • Security schemes consolidated: staging environments (Staging, SandboxStaging, SandboxProduction) removed; only Production and Sandbox remain
  • Servers list reduced to Production (https://api.bookabletech.com) and Sandbox (https://api-sandbox.bookabletech.com)

Removed

  • Venue.packages (top-level array) — replaced by Venue.preorders.packages
  • Venue.menus (top-level array) — replaced by Venue.preorders.menus
  • BookingRequest.preorderPackages — replaced by BookingRequest.preorders.packages
  • BookingRequest.preorderMenus — replaced by BookingRequest.preorders.menus
  • Sandbox Staging server https://api-sandbox-staging.bookabletech.com

[5.1.0] - 2026-02-09

Added

  • compositeId query filter to the GET /venues/bookings endpoint.

[5.0.0] - 2026-01-27

Changed

BREAKING CHANGE in the following endpoints:

  • GET /venues/bookings

  • GET /venues/bookings/{bookingId}

  • PUT /venues/bookings/{bookingId}

  • Changed:

    • company field is now venueGroupName
    • productType field is now productName
  • Removed:

    • cursor query parameter from GET /venues/bookings
    • cursor field from response from GET /venues/bookings
  • Added: Standard pagination parameters in GET /venues/bookings:

    • pageNumber (integer, default: 1, min: 1) - The page index to return
    • pageSize (integer, default: 20, min: 1, max: 100) - Items per pageNumber
    • meta object with pagination metadata:
    "meta": {
          "currentPage": 1,
          "pageSize": 20,
          "totalItems": 26,
          "totalPages": 2
      }
  • Migration Guide:

      - GET /venues/bookings?cursor=abc123
      + GET /venues/bookings?pageNumber=1&pageSize=20
  • GET /venues/{compositeId}/availability

  • Added: preOrderItems

[4.12.0] - 2026-01-19

Added

  • venueGroupName field on venue object in GET /venues and GET /venues/{venueId} endpoints.

[4.11.1] - 2026-01-13

Changed

  • Remove constraints on bookingRules.

[4.10.0] - 2025-12-05

Changed

  • X-Booking-Source header in POST venues/bookings is now an enumeration.

[4.9.0] - 2025-12-03

Added

  • Added sorting capabilities to GET /venues endpoint:

    New Query Parameters

    • sortBy (optional): Field to sort results by
      • default - Sort by composite ID (venue_group_id, rms_id, venue_id)
      • name - Sort alphabetically by venue name
      • city - Sort by city name, then venue name
      • area - Sort by area, then venue name
      • venueGroup - Sort by venue group name (requires venueGroupName filter)
      • relevance - Sort by semantic similarity using vector embeddings (requires embedding filters)
    • sortDirection (optional): Sort direction
      • ASC - Ascending (A-Z, 0-9, most to least similar)
      • DESC - Descending (Z-A, 9-0, least to most similar)

[4.8.0] - 2025-12-01

Added

  • Operator Booking Id and Partner Booking Id support to GET venues/bookings by operatorBookingId and partnerBookingId fields
  • Partner Booking Id support to POST venues/bookings bypartnerBookingId field

Changed

  • Reference field is deprecated in GET venues/bookings ; use operatorBookingId instead.

[4.7.0] - 2025-10-13

Added

  • Booking Overrides support to GET venues and GET venues\{venueId} by bookingOverrides field
  • Operator availability rule support to GET venues and GET venues\{venueId} by operatorAvailabilityRules field

[4.6.0] - 2025-10-13

Added

  • Preorders support to GET venues/bookings by preorders field
  • Preorder menus support to GET venues/bookings by preorderMenus field

[4.5.0] - 2025-09-29

Added

  • Possibility to filter by date and time within the GET /venues endpoint.

[4.4.0] - 2025-09-26

Added

  • X-Booking-Source header which identifies the source or channel through which the booking was created.

[4.3.0] - 2025-09-22

Added

  • X-Partner-Reference header is now mandatory on all the endpoints for Bookable Agent clients.

[4.2.0] - 2025-09-15

Added

  • noAvailabilityAction support to GET venues/:venueId/availability
  • autoConfirmRule support to GET venues/:venueId/availability

[4.1.0] - 2025-09-08

Added

  • Preorder menu support to GET venues and GET venues/:venueId by menus field
  • Preorder menu support to POST venues/:venueId/booking by preorderMenus field
  • Preorder menu email triggering on submit booking
  • Preorder menu support to GET venues/bookings/:bookingId by preorderMenus field

Removed

  • packageId field on POST venues/:venueId/booking request

[4.0.0] - 2025-09-02

Added

  • BREAKING CHANGE: Booking PUT request now requires compositeId

Removed

  • GET /venues/products/{compositeId} endpoint

[3.4.0] - 2025-08-20

Added

  • Venue packages detail by packages
  • Booking POST request now accepts packageId
  • Booking POST request now accepts preorders

[3.3.0] - 2025-08-13

Added

  • Endpoint to get a venue product detail by compositeId

[3.2.0] - 2025-08-12

Changed

  • Venue Schema Fields: Deprecated is_active and created_at fields in venue responses
  • Booking POST request now accepts null value for duration field

[3.1.0] - 2025-07-30

Added

  • Booking POST request includes admin_notes, comments & labels field

[3.0.0] - 2025-07-29

Added

  • Standardized error handling across all endpoints

Changed

  • BREAKING CHANGE: Modified venue composition - products are now contained within the venue structure

[2.3.0] - 2025-07-02

Added

  • X-Partner-Reference header for Bookable Agents. The header specifies the partner reference for whom the booking is being made.

[2.2.0] - 2025-06-06

Added

  • Endpoint to update an existing booking by its unique ID
  • Endpoint to cancel a booking by its unique ID

[2.1.0] - 2025-05-30

Added

  • Endpoint to retrieve a paginated list of bookings
  • Endpoint to retrieve a specific booking by its unique ID

[2.0.0] - 2025-05-16

Added

  • Support for paginated venue listings

Changed

  • Rename shut into bookingCutoff

[1.2.0] - 2025-05-14

Added

  • bookingRules: Insert booking rules on Venue to show information about the opening/ close time, max min number of people, and other

[1.1.1] - 2025-05-08

Fixed

  • Validation on require field (#TS-948)

[1.1.0] - 2025-05-02

Unified API

  • Add the unified api

Added

  • VenueId: Introduced the concept of composite Id to manage id into the system
  • type into avalability response: Specifies how an operators time slot can be handled.
  • type into revervation request
  • product_name: the name of product offer from venue