Confirm a pending quote into a booking. The record **remains a parcel quote** —
no parcel is created. SEND creates the parcel when the booked cargo is received
into the warehouse.
Checks, in order: quote exists and is pending and not cancelled; `rate_id` belongs
to the quote and is still valid (rates expire after one hour — `GET` the quote to
refresh); sender resolves to an existing customer and the recipient resolves
(manual details, or the same customer via `customer_as_recipient`); then the quote
is marked `booked` with the selected rate and party snapshots saved.
**Sender** must be an existing customer: send `sender.customer_id` (token or
unique ID). Name, phone, and address are loaded from that profile — a sender
object with only `name` / `phone` / `address` is rejected (`INVALID_PARTY`).
**Recipient** is either entered manually (`name`, `phone`, `address`) or the
same customer: set `customer_as_recipient: true` with `sender.customer_id` and
omit `recipient` to load the customer’s saved details.
**Idempotency:** send an `Idempotency-Key` header (or `idempotency_key` field).
Replaying the same request returns the existing booking; reusing a key with
different content returns `409 IDEMPOTENCY_CONFLICT`.
Request
This endpoint expects an object.
quote_idstringRequired
Pending parcel quote token.
rate_idstringRequired
Rate ID from the quote’s rate.id. Must still be valid (one-hour window).
senderobjectRequired
Existing parcel customer. customer_id is required (token or unique ID).
Stored name, phone, and address are loaded; optional fields override the profile.
A sender with only name/phone/address and no customer_id is rejected.
customer_as_recipientbooleanOptionalDefaults to false
Set true with sender.customer_id to use that customer’s saved details as the recipient. Omit recipient when true. Otherwise recipient is required.
recipientobjectOptional
Required unless customer_as_recipient is true. Supply manual details or customer_id. Do not supply non-empty recipient details when the flag is true.
idempotency_keystringOptional
Optional idempotency key. Prefer the Idempotency-Key header.
OK — idempotent replay of an existing booking
estimated_delivery_datedate
rateobject
Freight rate. id is the booked rate id.
chargeslist of objects
Additional fees included in total.