Skip to main content

Overview

A booking (dossier) is the unit your teams manage in BookingShake: one or several events (a date, a time slot, a space, a number of guests) created and handled together, with a contact, a company, a status and its financial documents. The API exposes bookings read-only:
  • GET /bookings/{id} returns one booking with its nested events[]
  • GET /bookings lists bookings with cursor pagination and filters
Bookings are created through POST /events/create, which returns the booking_id, and change notifications are available through the booking webhooks.

The booking payload

The same payload shape is served by both endpoints and by the data field of booking.* webhooks.

Conventions

  • References are bare IDs. Resolve status_id, source_id and space_id with GET /status, GET /sources, GET /spaces (these endpoints expose type, is_canceled, slug, is_default… so you never hardcode venue-specific IDs). Follow contact_id, account_id, invoice_ids, payment_ids to their own endpoints.
  • Timestamps are Unix milliseconds, business dates are YYYY-MM-DD, empty fields are an explicit null.
  • Custom fields configured for your venue appear as additional custom_* properties: booking-level fields (collection requests) on the booking, event-level fields (collection reservations) on each event. Use GET /fields for their definitions.
  • owner_ids are internal user IDs (the salespeople assigned to the booking), exposed for correlation only.
  • payment_ids exclude security deposits / pre-authorization holds, consistent with the payments endpoints.
Booking ID stability. id matches the booking_id of payment and invoice webhooks. It is however not guaranteed stable for the whole life of a booking: when a single-event booking gains a second event, BookingShake generates a new group ID. When that happens a booking.updated webhook delivers the payload under its new id; the event IDs (events[].id) never change, so the events you already hold let you recognize the booking and store its new id.

GET /bookings/

Returns { "message": "success", "data": { ...booking } }. A uniform 404 is returned when the booking does not exist, belongs to another venue, or when the id is an event that is member of a group (bookings are addressed by their booking id, not by member event ids).

GET /bookings

Response:

Pagination

Cursor-based. Pass next_cursor back as the cursor parameter until it comes back null.
A page may contain fewer than limit items even when more data remains (an internal scan bound protects very large venues). Always iterate on next_cursor; never treat a short page as the end of the listing.

Filters

Allowed combinations: date_from/date_to alone or with status_id; created_from/created_to combinable with status_id OR contact_id; status_id and contact_id are mutually exclusive.
The updated_at payload field is reliable from the feature go-live onward: modifications are stamped going forward, without backfill. canceled_at follows the same rule for bookings cancelled before go-live.

Rate limits

Both endpoints follow the standard read limit (60 requests/minute per API key per endpoint). See Rate Limiting.