Book a shipment
POST https://www.wearewarp.com/api/v1/book
Books a previously quoted shipment. The request body is one field: the quote_id from any quote response. Quoting is keyless on every mode. Booking is the single call that needs an API key and a card on file, and the key is self serve: sign up at /agents/account, no sales call.
Auth
- Authorization: Bearer wak_live_... -- production key, books real freight
- Authorization: Bearer wak_test_... -- sandbox key, books sandbox quotes only. Nothing ships, nothing is charged.
Request
curl example
MCP tool call
CLI example
Response
The confirmation carries the shipment_id you will track with, plus the live tracking dashboard URL.
Bookings are idempotent on quote_id
A quote_id is single use.
Retrying a book call with a quote_id your account already booked returns the original confirmation with idempotent_replay: true and never charges twice. A retry near the quote expiry edge also replays instead of failing, so a double submit from your agent is always safe.
Retrying a book call with a quote_id your account already booked returns the original confirmation with idempotent_replay: true and never charges twice. A retry near the quote expiry edge also replays instead of failing, so a double submit from your agent is always safe.
How payment settles
A booking settles from your prepaid wallet balance first and charges your card only for any shortfall. Read GET /api/v1/balance before you book to know your runway.
Errors self describe the fix
- PAYMENT_REQUIRED -- no card on file. The error includes a checkout_url: open it, add a card, then re-send the exact same book request.
- QUOTE_NOT_FOUND -- the quote expired or does not exist. Re-run the quote (quotes are free) and book the fresh quote_id.
- MISSING_DIMS -- an LTL quote needs length_in, width_in, height_in before it can book. Re-quote with dims.
- SANDBOX_QUOTE_REQUIRED -- a wak_test_ key can only book a quote made with that same sandbox key.