# Update one or more bookings within an order Partial update — each OrderItemUpdate only carries the fields being changed; anything omitted keeps its current value. Items are resolved and updated independently, same isolation model as POST /v1/orders: a failure on one item does not block the others. Capability (table reservation vs. event ticket) is resolved server-side from the existing booking, not from the request — every field below applies uniformly to either capability at the API level, even where the RMS-side effect currently differs (noted per field). compositeId moves the booking to a different bookable product — the same identifier used everywhere else (Bookable.compositeId, the only thing taken from a listing's bookableProducts[]), not a ticket-specific field. Supported for both capabilities: for event tickets it changes the ticket type (the compositeId's 4th segment); for table reservations it changes the booked product/space. The new compositeId must reference the same venue group, RMS and venue/event as the booking's current product — only the trailing product/ticket-type segment may differ; a cross-venue or cross-event move is rejected (400 ORDER-N-007). firstName/lastName/email/phone update the guest's details, either capability. Preorders (table-reservation only in practice — event tickets have no preorder concept, these fields are accepted but a no-op for them today): preorders is a full replacement of the current preorder set (omit to leave unchanged, send empty arrays to clear). preorderChanges is the incremental alternative — add or remove specific packages/menus without resending the rest; mutually exclusive with preorders on the same item (400 ORDER-N-008). Endpoint: PATCH /v1/orders/{orderId} 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" ## Path parameters: - `orderId` (string, required) Example: "ORD-9980140810" ## Request fields (application/json): - `items` (array, required) One entry per booking to update, within this order. - `items.bookingId` (string, required) The booking's platform id — BookingResult.id from the create/update/cancel response. Example: "1|TN|423458" - `items.notes` (string,null) Internal note. Table reservation → booking notes; event ticket → Tonic purchase comment. Example: "Customer upgraded to Pay ticket" - `items.firstName` (string,null) Guest first name. Applies to either capability. Example: "John" - `items.lastName` (string,null) Guest last name. Applies to either capability. Example: "Doe" - `items.email` (string,null) Guest email address. Applies to either capability. Example: "john.doe@example.com" - `items.phone` (string,null) Guest phone number, E.164 format. Applies to either capability. Example: "+441234567890" - `items.commission` (number,null) Partner commission for this booking. Currently wired through for table_reservation (Collins) on update — event_ticket (Tonic) only supports commission on create today, not on update. Example: 2.5 - `items.date` (string,null) Example: "2026-06-15" - `items.time` (string,null) Example: "20:00" - `items.duration` (integer,null) Example: 90 - `items.quantity` (integer,null) New covers count for a table reservation, or new ticket count for an event-ticket line. For event tickets: a decrease is processed as a partial refund of the difference; an increase is rejected with 400 (EVENT-N-003) — Tonic has no way to add tickets to an existing purchase, create a new order item instead. Example: 6 - `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.preorderChanges` (object) Incremental preorder change for OrderItemUpdate — add or remove specific packages/menus without resending the full current list. Mutually exclusive with preorders on the same item (400 ORDER-N-008 if both are present). An id appearing in both an "add" list and its matching "remove" list in the same request is rejected (400 ORDER-N-009) rather than silently resolved. - `items.preorderChanges.addPackages` (array,null) Packages to add. If a package with the same id is already on the booking, this replaces its quantity (upsert), matching legacy's /preorders/packages/{id}/quantity behavior — it does not add a duplicate line or increment the existing quantity. - `items.preorderChanges.removePackageIds` (array,null) - `items.preorderChanges.addMenus` (array,null) Menus to add. If a menu with the same id is already on the booking, this replaces its quantity and its full items selection (upsert) — there's no separate operation to change one item within an existing menu; resend that menu's full items list here to change it. - `items.preorderChanges.removeMenuIds` (array,null) - `items.compositeId` (string,null) Full CompositeId of the bookable product to move this booking to — same shape and meaning as Bookable.compositeId (the only identifier taken from a listing's bookableProducts[]), not a ticket-specific field. Supported for both capabilities: for event tickets, moves to a different ticket type on the same event (the compositeId's 4th segment); for table reservations, moves to a different bookable product/space on the same venue. Optionally combined with date in the same operation — Tonic has no separate "change date only" call. The new compositeId must reference the same venue group, RMS, and venue/event as the booking's current product — only the trailing product/ticket-type segment (AdditionalId) may differ. A cross-venue or cross-event compositeId is rejected with 400 (ORDER-N-007). Example: "1|TN|6a2bbc0285bf210719631c44|6a2bbb580ed61600150618f7" ## 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 404 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 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"