Create booking

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`.

Authentication

X-Api-Keystring
API Key authentication via header

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.

Response

OK — idempotent replay of an existing booking

idstring
statusenum
laneobject
commodityobject
transport_modeenum
totaldouble
estimated_delivery_datedate
created_atdatetime
rateobject

Freight rate. id is the booked rate id.

chargeslist of objects

Additional fees included in total.

senderobject
recipientobject
booked_atdatetime

Errors

401
Unauthorized Error
404
Not Found Error
409
Conflict Error
422
Unprocessable Entity Error