# Create an order — one or more independent bookings, across any platform Creates an order containing one or more bookings. Each item is resolved and booked independently — there is no cross-item transaction. A failure on one item (e.g. the venue/event on one platform is fully booked) does not block or roll back the others. The response carries one OrderItemResult per requested item, preserving request order — mirroring how POST /v1/availabilities reports one result per compositeId. Because every item is self-sufficient via its own compositeId (which embeds VenueGroupId + RmsSlug), a single order can span multiple venues and even multiple RMS platforms (e.g. one item on Collins, another on Zonal) — there is no top-level listingId constraining the order to one platform. Each OrderItem is unified (no capability field, no oneOf) — quantity carries the count for either capability (covers for a table reservation, ticket count for an event-ticket line); time additionally applies to table reservations. Capability is resolved server-side from the compositeId's RMS slug, not from which fields are populated. An order's items may mix capabilities and platforms freely. Endpoint: POST /v1/orders 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" - `X-Booking-Source` (string) Identifies the source or channel through which the order was created. Defaults to "api" when not provided. Enum: "email", "phone", "api", "webhook", "js-tag", "chatbot", "puller", "portal" ## Request fields (application/json): - `customer` (object, required) - `customer.firstName` (string, required) Example: "John" - `customer.lastName` (string, required) Example: "Doe" - `customer.email` (string, required) Example: "john.doe@example.com" - `customer.phone` (string, required) E.164 format. Example: "+441234567890" - `customer.dateOfBirth` (string,null) - `partnerOrderId` (string,null) Optional external reference for cross-system tracking. - `notes` (string,null) - `adminNotes` (array,null) Internal notes visible to venue operators only. - `marketingConsent` (boolean,null) - `items` (array, required) One item per booking to create. - `items.compositeId` (string, required) CompositeId of the bookable product. - table_reservation → {VenueGroupId}|{RmsSlug}|{VenueId}|{ProductId} - event_ticket → {VenueGroupId}|{RmsSlug}|{EventId}|{TicketTypeId} Example: "29|CO|275cc44dd2e2496fba44857c9257443a|e4d909c290d0fb1ca068ffaddf22cbd0" - `items.date` (string, required) Example: "2026-06-15" - `items.quantity` (integer, required) Covers for a table reservation, or ticket count for an event-ticket line. Example: 4 - `items.notes` (string,null) Free-text note or special request for the booking. Applies to either capability — table reservation notes or an event-ticket purchase comment. Example: "Birthday celebration" - `items.partnerBookingId` (string,null) Optional external reference supplied by the caller, used to cross-link this booking with records in another system. Applies to either capability. Example: "ext-ref-123" - `items.commission` (number,null) Partner commission for this booking. Currently wired through only for event_ticket (Tonic's partner_commission) — behaviour for table_reservation (Collins/Zonal) is not yet defined. Example: 2.5 - `items.time` (string,null) Example: "19:30" - `items.duration` (integer,null) Duration in minutes. Example: 90 - `items.type` (string,null) Must match the availability slot type returned for this time. Enum: "book", "request" - `items.preorders` (object) Pre-order items attached to a table reservation. - `items.preorders.packages` (array,null) - `items.preorders.packages.id` (string, required) Example: "3f9a1c20-5b7e-4c1a-9e2d-1a2b3c4d5e6f" - `items.preorders.packages.quantity` (integer, required) Example: 2 - `items.preorders.menus` (array,null) - `items.preorders.menus.items` (array,null) - `items.spaceId` (integer,null) Specific space/area to book, overriding automatic selection by the RMS. Obtain valid ids from AvailabilityResult.availability.times[].product.spaces[].id in the POST /v1/availabilities response for this compositeId/date/time — not from Bookable.spaces[], which is the unfiltered listing-level list. Example: 12 - `items.depositAmount` (number,null) Deposit amount to charge for this booking. When provided, a payment is taken from the RMS for this exact amount; when omitted, none is taken. Example: 10 - `items.unitPriceAmount` (number,null) Example: 25 - `items.priceCurrency` (string,null) Example: "GBP" ## Response 200 fields (application/json): - `id` (string, required) Platform-generated unique order identifier. Example: "ORD-9980140810" - `partnerOrderId` (string,null) - `customer` (object, required) - `customer.firstName` (string, required) Example: "John" - `customer.lastName` (string, required) Example: "Doe" - `customer.email` (string, required) Example: "john.doe@example.com" - `customer.phone` (string, required) E.164 format. Example: "+441234567890" - `customer.dateOfBirth` (string,null) - `createdAt` (string, required) Example: "2026-04-21T14:22:00Z" - `results` (array, required) One result per requested item, in request order. - `results.compositeId` (string, required) The compositeId this result refers to — the product for a table-reservation item, or the ticket-type line for an event-ticket line. Example: "29|CO|275cc44dd2e2496fba44857c9257443a|e4d909c290d0fb1ca068ffaddf22cbd0" - `results.date` (string, required) The date this result refers to. Example: "2026-06-15" - `results.booking` (object) Confirmed booking detail for a single order item. Common fields (including quantity — covers or ticket count) always apply; time/duration/ preorders apply to table reservations only, unitPriceAmount/ priceCurrency to event tickets only. Check capability to know which. - `results.booking.id` (string, required) Booking CompositeId assigned by the platform — the bookingId to pass back in OrderItemUpdate.bookingId / OrderCancelRequest.bookingIds for a subsequent PATCH/DELETE /v1/orders/{orderId} call. Opaque and platform-specific in shape — e.g. Collins/Zonal append a booking-type flag (B/R) as a 4th segment, Tonic uses a plain 3-segment purchase reference. Never equal to the compositeId that was booked (a different resource — the booking itself vs. the product/ticket type); treat it as an opaque token and round-trip it exactly as received. Example: "29|CO|BKG-8841203|B" - `results.booking.capability` (string, required) Identifies a booking capability. Enum: "table_reservation", "event_ticket" - `results.booking.reference` (string,null) Human-readable reference (e.g. DMN-9980140810). Example: "DMN-9980140810" - `results.booking.operatorOrderId` (string,null) Booking reference assigned by the operator's RMS (Collins, Zonal, Tonic, etc.). - `results.booking.status` (string, required) Enum: "Pending", "InProgress", "Confirmed", "Cancelled", "Deleted", "Lost" - `results.booking.productName` (string,null) - `results.booking.quantity` (integer, required) Covers for a table reservation, or ticket count for an event-ticket line. Example: 2 - `results.booking.notes` (string,null) Free-text note or special request for the booking. Applies to either capability — table reservation notes or an event-ticket purchase comment. Example: "Birthday celebration" - `results.booking.partnerBookingId` (string,null) External reference supplied by the caller at creation time, used to cross-link this booking with records in another system. Applies to either capability. Example: "ext-ref-123" - `results.booking.time` (string,null) Example: "19:30" - `results.booking.duration` (integer,null) - `results.booking.preorders` (object) Pre-order items attached to a table reservation. - `results.booking.preorders.packages` (array,null) - `results.booking.preorders.packages.id` (string, required) Example: "3f9a1c20-5b7e-4c1a-9e2d-1a2b3c4d5e6f" - `results.booking.preorders.packages.quantity` (integer, required) Example: 2 - `results.booking.preorders.menus` (array,null) - `results.booking.preorders.menus.items` (array,null) - `results.booking.spaceId` (integer,null) Space/area booked — either the requested OrderItem.spaceId or the one assigned by the RMS. Matches an id from AvailabilityResult.availability.times[].product.spaces[].id. Example: 12 - `results.booking.depositAmount` (number,null) Deposit amount charged for this booking, when applicable. Example: 10 - `results.booking.unitPriceAmount` (number,null) Example: 25 - `results.booking.priceCurrency` (string,null) Example: "GBP" - `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 207 fields (application/json): - `id` (string, required) Platform-generated unique order identifier. Example: "ORD-9980140810" - `partnerOrderId` (string,null) - `customer` (object, required) - `customer.firstName` (string, required) Example: "John" - `customer.lastName` (string, required) Example: "Doe" - `customer.email` (string, required) Example: "john.doe@example.com" - `customer.phone` (string, required) E.164 format. Example: "+441234567890" - `customer.dateOfBirth` (string,null) - `createdAt` (string, required) Example: "2026-04-21T14:22:00Z" - `results` (array, required) One result per requested item, in request order. - `results.compositeId` (string, required) The compositeId this result refers to — the product for a table-reservation item, or the ticket-type line for an event-ticket line. Example: "29|CO|275cc44dd2e2496fba44857c9257443a|e4d909c290d0fb1ca068ffaddf22cbd0" - `results.date` (string, required) The date this result refers to. Example: "2026-06-15" - `results.booking` (object) Confirmed booking detail for a single order item. Common fields (including quantity — covers or ticket count) always apply; time/duration/ preorders apply to table reservations only, unitPriceAmount/ priceCurrency to event tickets only. Check capability to know which. - `results.booking.id` (string, required) Booking CompositeId assigned by the platform — the bookingId to pass back in OrderItemUpdate.bookingId / OrderCancelRequest.bookingIds for a subsequent PATCH/DELETE /v1/orders/{orderId} call. Opaque and platform-specific in shape — e.g. Collins/Zonal append a booking-type flag (B/R) as a 4th segment, Tonic uses a plain 3-segment purchase reference. Never equal to the compositeId that was booked (a different resource — the booking itself vs. the product/ticket type); treat it as an opaque token and round-trip it exactly as received. Example: "29|CO|BKG-8841203|B" - `results.booking.capability` (string, required) Identifies a booking capability. Enum: "table_reservation", "event_ticket" - `results.booking.reference` (string,null) Human-readable reference (e.g. DMN-9980140810). Example: "DMN-9980140810" - `results.booking.operatorOrderId` (string,null) Booking reference assigned by the operator's RMS (Collins, Zonal, Tonic, etc.). - `results.booking.status` (string, required) Enum: "Pending", "InProgress", "Confirmed", "Cancelled", "Deleted", "Lost" - `results.booking.productName` (string,null) - `results.booking.quantity` (integer, required) Covers for a table reservation, or ticket count for an event-ticket line. Example: 2 - `results.booking.notes` (string,null) Free-text note or special request for the booking. Applies to either capability — table reservation notes or an event-ticket purchase comment. Example: "Birthday celebration" - `results.booking.partnerBookingId` (string,null) External reference supplied by the caller at creation time, used to cross-link this booking with records in another system. Applies to either capability. Example: "ext-ref-123" - `results.booking.time` (string,null) Example: "19:30" - `results.booking.duration` (integer,null) - `results.booking.preorders` (object) Pre-order items attached to a table reservation. - `results.booking.preorders.packages` (array,null) - `results.booking.preorders.packages.id` (string, required) Example: "3f9a1c20-5b7e-4c1a-9e2d-1a2b3c4d5e6f" - `results.booking.preorders.packages.quantity` (integer, required) Example: 2 - `results.booking.preorders.menus` (array,null) - `results.booking.preorders.menus.items` (array,null) - `results.booking.spaceId` (integer,null) Space/area booked — either the requested OrderItem.spaceId or the one assigned by the RMS. Matches an id from AvailabilityResult.availability.times[].product.spaces[].id. Example: 12 - `results.booking.depositAmount` (number,null) Deposit amount charged for this booking, when applicable. Example: 10 - `results.booking.unitPriceAmount` (number,null) Example: 25 - `results.booking.priceCurrency` (string,null) Example: "GBP" - `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"