Bookings

The Bookings API provides a way for integrations to manage bookings and get Webhooks for any Orders related to those Bookings.

A Booking can be tied to a Customer or a Table during a specific time period, during which any other Orders created on that Table (or with that Customer) will trigger Webhooks, allowing the integration to get a full picture of all that happened during the Booking.

Get all bookings

GET /v1/companies/5678/bookings Get all bookings
GET /v1/companies/5678/customers/818839/bookings Get all bookings for customer 818839
GET /v1/companies/5678/sites/409/bookings Get all bookings for site 409
GET /v1/companies/5678/sites/409/pending/bookings Get all bookings for site 409 with status PENDING
GET /v1/companies/5678/sites/409/customers/818839/bookings Get all bookings for site 409 and customer 818839
GET /v1/companies/5678/sites/409/customers/818839/pending/bookings Get all bookings for site 409 and customer 818839 with status PENDING
GET /v1/companies/5678/bookings?start_at_gte=2025-09-20T08:00:00Z&end_at_lte=2025-09-20T20:30:00Z Get all bookings whose booking time is between 2025-09-20T08:00:00Z and 2025-09-20T20:30:00Z
GET /v1/companies/5678/bookings?created_at_gte=2025-09-11T10:00:00Z&created_at_lte=2025-09-12T20:30:00Z Get all bookings whose creation time is between 2025-09-11T10:00:00Z and 2025-09-12T20:30:00Z
The following query parameters are supported:
  • site_id - Filter bookings by site ID
  • customer_id - Filter bookings by customer ID
  • status - Filter bookings by status. One of PENDING, CONFIRMED, SEATED, CANCELLED, COMPLETE
  • start_at - Filter bookings by start time using an ISO 8601 timestamp. Range queries are supported with the suffixes _gt, _gte, _lt and _lte
  • end_at - Filter bookings by end time using an ISO 8601 timestamp. Range queries are supported with the suffixes _gt, _gte, _lt and _lte
  • created_at - Filter bookings by creation time using an ISO 8601 timestamp. Range queries are supported with the suffixes _gt, _gte, _lt and _lte

Response
  • The reference field is returned if the booking is created by the same API client requesting this endpoint.
  • The orders field will not be returned on this endpoint. You must request individual Bookings in order to retrieve the orders field.

Pagination
  • The page size is 100
  • When there are more results, there is a header X-Next-Page with the URL in the response to get the next page of results

Get a booking

GET /v1/companies/5678/bookings/15223.json Get a booking
  • The orders field contains a list of order IDs for the orders that satisfied the following conditions:
    • The order was created during the booking period (i.e. between start_at and end_at) AND
    • The order is not deleted and the status in ON_HOLD, PENDING or COMPLETE AND
    • The order was created at the same site as the booking AND
    • Either:
      • The order was created with the same customer as the booking OR
      • The order was created at one of the tables included in the booking
  • The reference, booking_callback_uri, and order_callback_uri fields are optional and will only be returned if the booking is created by the same API client requesting this endpoint

Create a Booking

POST /v1/companies/5678/bookings Create a new booking for a given company
Required fields
  • Required fields are site_id, customer_id, guests, status, start_at, and end_at
  • Optional fields are tables, notes, reference, booking_callback_uri, and order_callback_uri

Data Type
  • site_id - Integer
  • customer_id - Integer
  • guests - Integer
  • status - String, one of PENDING, CONFIRMED, SEATED, CANCELLED, or COMPLETE
  • tables - Array of strings, each string is a table name/number
  • notes - String, max length 1024 characters
  • reference - String, max length 40 characters, can be used to store an external reference for the booking. Must be unique per company.
  • start_at - String in ISO 8601 format, e.g. "2025-09-05T18:00:00+10:00"
  • end_at - String in ISO 8601 format, e.g. "2025-09-10T20:00:00+10:00"
  • booking_callback_uri - String, max length 1024 characters, must be a valid URI. If provided, a webhook will be sent to this URI when the booking is created, updated or deleted.
  • order_callback_uri - String, max length 1024 characters, must be a valid URI. If provided, a webhook will be sent to this URI when an order related to this booking is created or updated.

Validations
  • site_id must refer to a valid site for the company
  • customer_id must refer to a valid customer for the company
  • start_at must be before end_at
  • start_at can be in the past but end_at must be in the future
  • The duration between start_at and end_at can't exceed one week
  • tables must refer to a valid table for the site, see the GET Tables endpoint

Response

This POST will return a HTTP 201 with a Location header to the created resource.

Update a booking

PUT /v1/companies/5678/bookings/456 Update a booking
Allowed fields for update

Any combination of the following fields can be updated:

  • status - String, one of PENDING, CONFIRMED, SEATED, CANCELLED, or COMPLETE
  • customer_id - Integer (note: this affects the orders output)
  • tables - Array of strings (note: this affects the orders output)
  • guests - Integer
  • reference - String, max length 40 characters (only if modified by the creator of the booking)
  • notes - String, max length 1024 characters
  • start_at - String in ISO 8601 format (note: this affects the orders output)
  • end_at - String in ISO 8601 format (note: this affects the orders output)

Status transitions

Status can only be updated according to the following rules:

  • PENDING - can change to any other status
  • CONFIRMED - can change to SEATED, COMPLETE, or CANCELLED
  • SEATED - can change to COMPLETE or CANCELLED
  • COMPLETE - no further changes can be made to status
  • CANCELLED - no further changes can be made to status

Validations
  • tables must be valid table names for the site (see Tables endpoint)
  • end_at must not be in the past (start_at can be in the past)
  • end_at must be after start_at
  • The total length of the booking (start → end) cannot exceed 1 week
  • Standard schema type validations apply for date-time formats, URLs, and numbers
  • reference max length is 40 characters (allows for UUID formats)
  • notes max length is 1024 characters

Access restrictions
  • Only the client_id that created the booking can update it
  • Once a booking is in COMPLETE or CANCELLED status, it can no longer be updated

List of Webhooks

Here is a list of the supported webhook topics.

bookings/created

Triggered when a new booking is created. The payload contains the full booking details as returned by the GET individual booking endpoint.

Note: The reference field is only included in the payload if the webhook subscriber is the same client that created the booking.

bookings/updated

Triggered when a booking is updated. This includes updates to the booking itself as well as changes to the orders field when new orders are dynamically linked to the booking.

For example, if a booking is for table T12 and a new POS order is created on T12 during the booking window, this webhook will trigger because the order becomes linked to the booking.

The payload contains the full booking details as returned by the GET individual booking endpoint, including the updated orders array.

Note: The reference field is only included in the payload if the webhook subscriber is the same client that created the booking.