Agent API docs
v2 is Warp's gateway API, called directly with your developer key. Quote any mode, book it, and pay by card, balance, or credit terms, all from one account. Quotes on wearewarp.com stay keyless; booking needs a key. The full reference is at developer.wearewarp.com.
1. Get your keys
Sign up once at /agents/account and you get two developer keys, one per environment. Existing Warp customers sign in there with their Warp login and see the same keys. Send it as the apikey header.
| Environment | Base URL | Money |
|---|---|---|
| Staging | https://stg.wearewarp.com/api/v1 | Stripe test mode. Card 4242 4242 4242 4242 always succeeds, 4000 0000 0000 0341 declines. |
| Production | https://gw.wearewarp.com/api/v1 | Real bookings, real charges. |
Or create both keys from code:
curl -s -X POST https://www.wearewarp.com/api/v2/agents/signup \
-H 'content-type: application/json' \
-d '{ "email": "you@company.com", "password": "…", "firstName": "Jane", "lastName": "Shipper", "companyName": "Acme" }'
# → { production: { api_key, base_url }, staging: { api_key, base_url }, … }2. Quote
One endpoint for every mode. Pick the vehicle with vehicleType.code; pallets go in listItems. Quotes are valid until expiration_time_utc, typically end of the next day.
curl -s -X POST https://stg.wearewarp.com/api/v1/freights/quote \
-H 'content-type: application/json' \
-H 'apikey: YOUR_STAGING_KEY' \
-d '{
"pickupDate": "2026-10-30",
"pickupInfo": { "zipcode": "90058" },
"deliveryInfo": { "zipcode": "94105" },
"shipmentType": "FTL",
"vehicleType": { "code": "STRAIGHT_TRUCK_26" },
"listItems": [{ "name": "1", "length": 48, "width": 40, "height": 48, "sizeUnit": "IN",
"totalWeight": 800, "weightUnit": "lbs", "quantity": 4,
"packaging": "pallet", "stackable": false }]
}'{
"quote_id": "PRICING_ffecdc45-…",
"price": { "amount": 992.31, "currency_code": "USD" },
"transit_time": 1,
"expiration_time_utc": 1790467200,
"status": "ACCEPT",
"shipmentType": "FTL"
}| vehicleType.code | What you get |
|---|---|
CARGO_VAN | Cargo van. Local lanes. |
STRAIGHT_TRUCK_26 | 26 ft box truck. Regional lanes. |
DRY_VAN_53 | 53 ft dry van, full truckload. |
DRY_VAN_53_LTL | LTL. Set shipmentType to "LTL". |
3. Book
Send the quote_id back with your stops. Each stop takes a contact, an address, and a windowTime in UTC. A quote can be booked once; a failed booking leaves it available for a retry.
curl -s -X POST https://stg.wearewarp.com/api/v1/freights/booking \
-H 'content-type: application/json' \
-H 'apikey: YOUR_STAGING_KEY' \
-d '{
"quoteId": "PRICING_ffecdc45-…",
"pickupDate": ["2026-10-30"],
"shipmentType": "FTL",
"pickupInfo": {
"locationName": "Dock A", "contactName": "Jane Shipper", "contactPhone": "4155550101",
"address": { "street": "5800 S Boyle Ave", "city": "Vernon", "state": "CA", "zipcode": "90058" },
"windowTime": { "from": "2026-10-30T16:00:00.000Z", "to": "2026-10-30T23:00:00.000Z" }
},
"deliveryInfo": {
"locationName": "Receiving", "contactName": "Sam Receiver", "contactPhone": "4155550102",
"address": { "street": "1 Market St", "city": "San Francisco", "state": "CA", "zipcode": "94105" },
"windowTime": { "from": "2026-10-30T16:00:00.000Z", "to": "2026-10-30T23:00:00.000Z" }
},
"listItems": [{ "name": "1", "length": 48, "width": 40, "height": 48, "sizeUnit": "IN",
"totalWeight": 800, "weightUnit": "lbs", "quantity": 4,
"packaging": "pallet", "stackable": false }]
}'{
"message": "Success",
"orderNumber": "P-0044-2639",
"shipmentNumber": "S-01571-2639",
"trackingNumber": "S-01571-2639",
"orderId": "01M3FATAAR60ND9Q3R17AQ0JZG",
"shipmentId": "01M3FATABBRR79VE9TCT0D049R",
"payment": { "method": "card", "amount_charged": 1031.51, "card_fee": 39.2, "last4": "4242" }
}4. How the booking is paid
Every booking runs the same checks in order: an active credit account books on terms; otherwise the wallet balance covers it; otherwise, if you have saved a card and turned on Pay by card for API bookings at /agents/account, the saved card is charged the total plus the card processing fee and the shipment books immediately. The response then carries a paymentobject with the amount charged, the fee, and the card's last four. With none of those, the booking is created unpaid with a paymentLink to settle.
| HTTP | code | What to do |
|---|---|---|
| 402 | CHARGE_FAILED | The saved card declined. No order was created. Update the card at /agents/account and book the same quote again. |
| 402 | PAYMENT_ACTION_REQUIRED | The card needs authentication and cannot be charged off-session. Choose another card at /agents/account. |
| 409 | BOOKING_IN_PROGRESS | The same quote is being booked by another request. Only one goes through; you are never charged twice. |
| 400 | CARD_INSURANCE_NOT_SUPPORTED | Cargo insurance cannot be added to a card-paid booking yet. Remove insuranceQuoteId or fund your balance. |
| 400 | invalid_field_data | The quote was already booked, or has expired. Request a new quote. |
5. Track, documents, everything else
Tracking, BOL and POD retrieval, multi-stop, webhooks, and the complete request and response schemas are in the gateway reference.
- Gateway API reference, the source of truth for v2.
- Your keys, production and staging, with the pay-by-card setting one click away.
- MCP server, the same API inside Claude and Cursor.
- v1 docs, the warp-site self serve API, unchanged for existing integrations.