How AI agents book freight through Warp
FTL in 3 fields. Rebook in 2. Real carriers, real prices, no human in the loop. This is the complete agent booking flow: from first API call to tenth shipment on the same lane. Dry freight only. All accessorials waived.
The booking flow in 4 steps
Every other freight API is stateless. You send 10+ fields on every call, forever. Warp remembers the shipper, consignees, lanes, and payment method. First shipment captures real info. Every shipment after drops to near zero fields.
Step 1: Get a key
Signup, card capture, key in your inbox.
Go to wearewarp.com/agents/signup, enter your email, add a card via Stripe Checkout. A wak_live_* key arrives in your inbox within 30 seconds. Quoting doesn't need a key. Booking does.
Step 2: Quote
3 fields for FTL. 5 for van/box truck. 8+ for LTL.
POST /api/v1/ftl/quote with origin_zip, destination_zip, and pickup_date. The API returns a quote_id, price_usd, transit_days, and a lane_id. Quote is firm for 15 minutes. LA to Phoenix: $1,723. Van and box truck also need pallets and weight. LTL needs class, commodity, and dims too.
Step 3: Book
quote_id + 6 delivery fields + accessorials.
POST /api/v1/book with your Bearer key, the quote_id, and delivery details (street, city, state, zip, contact, phone) plus any accessorials. All accessorials (liftgate, residential, appointment, limited access) are waived by Warp but still collected for dispatch. Your pickup address comes from default_shipper (set once).
Step 4: Rebook
2 fields. Everything else remembered.
POST /api/v1/rebook with { lane_id, pickup_date }. The API already knows the mode, consignee, and pallet count from your last shipment. It re-quotes, books, and returns a new shipment_id. Your 10th ship on the same lane is 2 fields.
The math
First ship: 3 to 8+ fields. Every ship after: 2.
Competitors require all fields every time because their APIs are stateless. Warp stores lane_history, location_cache, and load_templates per agent. State accumulates. Friction drops.
The result
Agents that ship, not agents that fill forms.
An LLM with the Warp MCP can go from "ship 6 pallets to Phoenix" to a real booking in two tool calls. No address lookup, no carrier selection, no paperwork. The API handles it.
Code: quote, book, rebook
curl
# Quote FTL (3 fields, public, no key)
curl -X POST https://wearewarp.com/api/v1/ftl/quote \
-H 'content-type: application/json' \
-d '{"origin_zip":"90001","destination_zip":"85001","pickup_date":"2026-04-14"}'
# Response: { "quote_id": "wq_...", "price_usd": 1722.55, "lane_id": "ln_900_850", "quote_tier": "firm" }
# Book (requires key: quote_id + 6 delivery fields + accessorials)
curl -X POST https://wearewarp.com/api/v1/book \
-H 'content-type: application/json' \
-H 'Authorization: Bearer wak_live_YOUR_KEY' \
-d '{"quote_id":"wq_...","patch":{"delivery":{"street":"456 Receiver St","city":"Phoenix","state":"AZ","zipCode":"85001","contactName":"Jane Doe","phone":"6025551234"}}}'
# Response: { "booked": true, "shipment_id": "...", "lane_id": "ln_900_850" }
# Rebook the same lane (2 fields)
curl -X POST https://wearewarp.com/api/v1/rebook \
-H 'content-type: application/json' \
-H 'Authorization: Bearer wak_live_YOUR_KEY' \
-d '{"lane_id":"ln_900_850","pickup_date":"2026-04-21"}'MCP (Claude Desktop)
// Tool call 1: quote FTL (3 fields)
{ "tool": "warp_ftl_quote", "args": { "origin_zip": "90001", "destination_zip": "85001", "pickup_date": "2026-04-14" } }
// Returns: { "quote_id": "wq_...", "price_usd": 1722.55, "lane_id": "ln_900_850", "quote_tier": "firm" }
// Tool call 2: book (quote_id + delivery details)
{ "tool": "warp_book", "args": { "quote_id": "wq_...", "patch": { "delivery": { ... } } } }
// Returns: { "booked": true, "shipment_id": "..." }
// Next time, same lane (2 fields):
{ "tool": "warp_rebook", "args": { "lane_id": "ln_900_850", "pickup_date": "2026-04-21" } }CLI
# Quote FTL (3 fields)
warp-agent ftl quote 90001 85001 --date 2026-04-14
# Book the last quote
warp-agent book -
# Rebook the lane (2 fields)
warp-agent rebook ln_900_850 --date 2026-04-21What the API remembers per agent
This is the difference. Every other freight API forgets you between calls. Warp stores state per agent. Here's what accumulates:
default_shipper
Your pickup address, set once.
When you sign up, you set your origin facility: street, city, state, zip, contact name, phone. Every booking uses this as the pickup. You don't send it again.
lane_history
Every lane you've shipped.
The API tracks: lane_id, last consignee, last pallet count, ship count, last shipped date. When you rebook, all of this is pre-filled. Your 5th shipment to the same warehouse is truly 2 fields (lane_id + pickup_date).
load_templates
Saved load specs for LTL.
LTL needs weight, dims, freight class, and commodity. Create a template once (POST /api/v1/load_templates) and reference it by lt_id on future quotes. Drops LTL from 8+ fields to 2.
Which mode to use
Cargo van
5 fields. Under 4 pallets.
Local and regional. POST /api/v1/van/quote. Origin, dest, pallets, weight, date. Best for same day or next day delivery under 3,000 lb. LA to San Diego: $331.
Box truck
5 fields. Up to 10 pallets.
Mid range. POST /api/v1/box-truck/quote. Origin, dest, pallets, weight, date. 26' straight truck, liftgate waived. LA to Vegas: $806.
FTL
3 fields. Full trailer.
Full truckload. POST /api/v1/ftl/quote. Origin, dest, date. Weight and pallets optional. 53' dry van, any distance. LA to Phoenix: $1,723.
LTL
8+ fields (or 2 with template).
Partial loads. POST /api/v1/ltl/quote. Needs weight, freight class, commodity, and dims to avoid reclassification at the dock. Use load_template_id to drop to 2 fields.
Frequently asked questions
How many fields does an agent need to quote freight?
It depends on the mode. FTL needs 3 fields: origin_zip, destination_zip, and pickup_date. Van and box truck need 5: origin, destination, pallets, weight, and pickup date. LTL needs 8+: origin, destination, pallets, weight, freight class, commodity, dims, and pickup date. A saved load template drops LTL to 2 fields.
What's the difference between quote and book?
Quoting is public and doesn't require an API key. It returns a price, a quote_id, and a lane_id. Booking requires a Bearer key (wak_live_*) and takes the quote_id plus a delivery address. The API creates a real shipment with a tracking number.
What happens after the quote expires?
Quotes expire after 15 minutes. If an agent tries to book an expired quote_id, the API returns a 400 error. The agent needs to re-quote the same lane to get a fresh quote_id with a current price. Lane_id doesn't expire, so rebook still works.
Can an agent rebook without re-entering delivery info?
Yes. That's the core of the wedge. After the first shipment on a lane, the API stores the consignee in lane_history. POST /api/v1/rebook with { lane_id, pickup_date } and the API uses the stored consignee, pallet count, and mode from the last shipment. Two fields.
What carriers does the API connect to?
XPO, ABF, SAIA, Estes, FedEx Freight, and 20,000+ additional carriers across FTL, LTL, cargo van, and box truck. The API returns the best rate from all available carriers for the requested lane and mode.
How does billing work?
Agents prepay by adding a card via Stripe Checkout during signup. When the agent books a shipment, the internal charge route creates an off-session PaymentIntent against the agent's saved card. No invoicing, no net-30, no manual payment.
Do I need a key to get a quote?
No. All four quote endpoints (van, box truck, FTL, LTL) are public. You need a key (wak_live_*) to book, rebook, or access state routes (lanes, locations, templates). Get a key at wearewarp.com/agents/signup.
What's quote_tier: firm vs indicative?
Firm means the price is locked for 15 minutes and you can book it directly. Indicative means the quote is directional but missing fields needed for a firm price (usually weight, class, or dims on LTL). The missing_for_ship array tells the agent exactly what's needed to upgrade to firm.
Get a key and ship your first load in 5 minutes.
Signup takes 30 seconds. Your first quote takes 190ms. Your first booking takes one more API call. Your second booking on the same lane takes two fields.