Developer guide
How to Ship Freight Programmatically
The complete guide to moving physical goods with code. Learn how to use freight APIs and CLI tools to quote rates, book shipments, track deliveries, and receive webhook notifications across LTL, truckload, box truck, and cargo van.
REST API · CLI · Webhooks · Python · Node.js · curl · AI coding tools
Why ship freight programmatically?
Every other infrastructure category is programmable. Payments have Stripe. Communications have Twilio. Compute has AWS. But freight, the $800 billion industry that moves physical goods across the country, still runs on phone calls, email chains, and web portals. Most shippers still copy and paste addresses into carrier websites, wait for emailed rate confirmations, and call brokers for tracking updates. This is the last major infrastructure category waiting to be automated.
Programmatic freight matters when your systems need to move goods without human intervention. Your warehouse management system needs to auto ship orders the moment they are packed. Your marketplace needs to offer real time shipping rates at checkout. Your supply chain software needs to pull carrier rates across multiple modes and book the best option. Your AI agents need to move physical goods as part of a larger automated workflow. In all of these cases, logging into a portal and clicking buttons is not an option.
The tools you need: a freight REST API for quoting, booking, and tracking. A CLI for terminal workflows, scripts, and AI coding agents. Webhooks for real time event notifications so your system knows the moment freight is picked up, in transit, or delivered. Warp provides all three. One API key gives you access to LTL, truckload, box truck, and cargo van capacity across 20,000+ local 3rd party carriers.
Step 1: Choose your integration method
There are three ways to ship freight programmatically with Warp. Choose based on your use case.
REST API
Standard HTTP requests
Works with any programming language. Send JSON, receive JSON. Best for production integrations, backend services, and automated workflows. Base URL: https://api.wearewarp.com/api/v1
CLI
Shell commands
Run freight operations from your terminal. Best for developer tooling, AI agents like Claude Code and Cursor, shell scripts, and cron jobs. Pipe output to other commands.
AI coding tool
Natural language
Describe what you need in plain English. The AI reads the API documentation, generates the correct request, and executes it. Best for rapid prototyping, one off shipments, and exploring the API.
Step 2: Get a freight quote
Every programmatic freight workflow starts with a quote. Send your origin, destination, pickup date, and item details to the quote endpoint. Warp returns a rate with transit time, carrier, and a quote ID you will use to book.
POST /api/v1/freights/quoteapikey: YOUR_API_KEYapplication/jsoncurl
curl -X POST https://api.wearewarp.com/api/v1/freights/quote \
-H "Content-Type: application/json" \
-H "apikey: YOUR_API_KEY" \
-d '{
"pickupDate": ["2026-04-10"],
"pickupInfo": {
"zipCode": "90001",
"city": "Los Angeles",
"state": "CA",
"street": "123 Warehouse Blvd",
"contactName": "Dispatch Team",
"phone": "3105551234"
},
"deliveryInfo": {
"zipCode": "85001",
"city": "Phoenix",
"state": "AZ",
"street": "456 Distribution Dr",
"contactName": "Receiving Dock",
"phone": "6025551234"
},
"listItems": [{
"name": "Pallet - Retail Goods",
"length": 48, "width": 40, "height": 48,
"sizeUnit": "in",
"totalWeight": 800, "weightUnit": "lb",
"quantity": 2,
"packaging": "pallet",
"stackable": false
}],
"shipmentType": "LTL"
}'Python
import requests
response = requests.post(
"https://api.wearewarp.com/api/v1/freights/quote",
headers={
"Content-Type": "application/json",
"apikey": "YOUR_API_KEY"
},
json={
"pickupDate": ["2026-04-10"],
"pickupInfo": {
"zipCode": "90001",
"city": "Los Angeles",
"state": "CA",
"street": "123 Warehouse Blvd",
"contactName": "Dispatch Team",
"phone": "3105551234"
},
"deliveryInfo": {
"zipCode": "85001",
"city": "Phoenix",
"state": "AZ",
"street": "456 Distribution Dr",
"contactName": "Receiving Dock",
"phone": "6025551234"
},
"listItems": [{
"name": "Pallet - Retail Goods",
"length": 48, "width": 40, "height": 48,
"sizeUnit": "in",
"totalWeight": 800, "weightUnit": "lb",
"quantity": 2,
"packaging": "pallet",
"stackable": False
}],
"shipmentType": "LTL"
}
)
quote = response.json()
print(f"Quote ID: {quote['data']['quoteId']}")
print(f"Price: ${quote['data']['totalCost']}")
print(f"Transit: {quote['data']['transitDays']} days")Claude Code / Cursor
# In Claude Code or Cursor, just describe what you need: # # "Get me an LTL freight quote from Los Angeles 90001 # to Phoenix 85001 for 2 pallets, 800 lbs each, # 48x40x48 inches. Use the Warp API." # # The AI reads the API docs, generates the correct # POST request, and returns the quote.
Response (200 OK)
{
"data": {
"quoteId": "01HG9W6CMAWHNWTVXDKW9QYFS9",
"carrierCode": "WTCH",
"carrierName": "Warp Technology",
"serviceLevel": "standard",
"transitDays": 2,
"totalCost": 485.00,
"pickupWindow": { "from": "08:00", "to": "17:00" },
"deliveryWindow": { "from": "08:00", "to": "17:00" }
}
}Key fields: quoteId is the identifier you pass to the booking endpoint. totalCost is the all inclusive price with no fuel surcharges or hidden fees. transitDays is the estimated transit time. Omit vehicleType and Warp automatically selects the right vehicle for your freight.
Step 3: Book the shipment
Once you have a quote, book it by passing the quoteId along with full pickup and delivery contact details. Warp returns a shipment ID, tracking number, and order ID.
POST /api/v1/freights/bookingapikey: YOUR_API_KEYcurl
curl -X POST https://api.wearewarp.com/api/v1/freights/booking \
-H "Content-Type: application/json" \
-H "apikey: YOUR_API_KEY" \
-d '{
"quoteId": "01HG9W6CMAWHNWTVXDKW9QYFS9",
"pickupInfo": {
"zipCode": "90001",
"city": "Los Angeles",
"state": "CA",
"street": "123 Warehouse Blvd",
"contactName": "Dispatch Team",
"phone": "3105551234",
"specialInstruction": "Dock 4, call 30 min before arrival"
},
"deliveryInfo": {
"zipCode": "85001",
"city": "Phoenix",
"state": "AZ",
"street": "456 Distribution Dr",
"contactName": "Receiving Dock",
"phone": "6025551234",
"specialInstruction": "Receiving hours 7am-3pm"
},
"listItems": [{
"name": "Pallet - Retail Goods",
"length": 48, "width": 40, "height": 48,
"sizeUnit": "in",
"totalWeight": 800, "weightUnit": "lb",
"quantity": 2,
"packaging": "pallet",
"stackable": false
}],
"deliveryServices": ["delivery-appointment"]
}'Node.js
const response = await fetch(
"https://api.wearewarp.com/api/v1/freights/booking",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"apikey": process.env.WARP_API_KEY
},
body: JSON.stringify({
quoteId: "01HG9W6CMAWHNWTVXDKW9QYFS9",
pickupInfo: {
zipCode: "90001",
city: "Los Angeles",
state: "CA",
street: "123 Warehouse Blvd",
contactName: "Dispatch Team",
phone: "3105551234"
},
deliveryInfo: {
zipCode: "85001",
city: "Phoenix",
state: "AZ",
street: "456 Distribution Dr",
contactName: "Receiving Dock",
phone: "6025551234"
},
listItems: [{
name: "Pallet - Retail Goods",
length: 48, width: 40, height: 48,
sizeUnit: "in",
totalWeight: 800, weightUnit: "lb",
quantity: 2, packaging: "pallet",
stackable: false
}]
})
}
);
const booking = await response.json();
console.log("Tracking:", booking.data.trackingNumber);Response (201 Created)
{
"data": {
"shipmentId": "shp_01HGA2K9MNPQ4RV8XW3YZ5TJ6",
"shipmentNumber": "WRP-2026-041542",
"orderId": "ord_01HGA2K9MNPQ4RV8XW3YZ5TK7",
"trackingNumber": "WARP1234567890",
"shipmentType": "LTL",
"status": "CONFIRMED"
}
}Save the trackingNumber for the tracking step. Save the orderId for retrieving invoices and documents (BOL, POD) later. The specialInstruction field lets you pass dock numbers, gate codes, and receiving hours directly to the driver through the Warp driver app.
Step 4: Track the shipment
Pass one or more tracking numbers to the tracking endpoint. Warp returns the current status, last known location, estimated delivery, and the full event history for each shipment.
POST /api/v1/freights/trackingapikey: YOUR_API_KEYRequest
curl -X POST https://api.wearewarp.com/api/v1/freights/tracking \
-H "Content-Type: application/json" \
-H "apikey: YOUR_API_KEY" \
-d '{
"trackingNumbers": ["WARP1234567890"]
}'200 Response
{
"data": [{
"trackingNumber": "WARP1234567890",
"status": "IN_TRANSIT",
"currentLocation": {
"city": "Barstow",
"state": "CA",
"timestamp": "2026-04-11T08:42:00Z"
},
"estimatedDelivery": "2026-04-12T14:00:00Z",
"events": [
{
"status": "PICKED_UP",
"location": "Los Angeles, CA",
"timestamp": "2026-04-10T10:15:00Z",
"description": "Freight picked up from origin"
},
{
"status": "IN_TRANSIT",
"location": "Barstow, CA",
"timestamp": "2026-04-11T08:42:00Z",
"description": "In transit to destination"
}
]
}]
}Warp provides 12+ granular statuses, not just "in transit" and "delivered." Each status change includes timestamps and GPS coordinates. For real time updates without polling, use webhooks.
Step 5: Receive webhook events
Instead of polling the tracking endpoint, register webhook URLs in your Warp dashboard. Warp pushes events to your server as shipments move through each status: booked, arrivedAtPickup, pickupSuccessful, inRouteToWarehouse, arrivedAtWarehouse, departedFromWarehouse, arrivedAtDelivery, delivered. Each event includes timestamps, GPS coordinates, and scan data.
Common webhook use cases: trigger warehouse receiving workflows when freight is 30 minutes away. Send customer notifications on delivery. Alert your ops team on exceptions flagged by our AI backbone, Orbit. Close out purchase orders automatically when proof of delivery is captured.
Example webhook payload
{
"event": "shipment.status_changed",
"shipmentId": "shp_01HGA2K9MNPQ4RV8XW3YZ5TJ6",
"trackingNumber": "WARP1234567890",
"status": "delivered",
"timestamp": "2026-04-12T13:42:00Z",
"location": {
"city": "Phoenix",
"state": "AZ",
"latitude": 33.4484,
"longitude": -112.0740
},
"details": {
"signedBy": "J. Martinez",
"podUrl": "https://api.wearewarp.com/documents/pod_01HGA..."
}
}Ready to ship freight with code?
Get an API key and start quoting in minutes. No software fees, no integration fees.
What freight modes can you ship programmatically?
One API key gives you access to all four modes. Omit the vehicle type and Warp selects the right one based on your item dimensions and weight.
LTL (Less Than Truckload)
1 to 12 pallets
Routes through Warp operated cross dock facilities. Per pallet instant pricing. All inclusive rates with no fuel surcharges or terminal handling charges. Set shipmentType: "LTL" or omit and let Warp auto select.
Truckload (FTL)
Up to 26 pallets / 44,000 lbs
Dedicated 53 ft dry van. Carrier goes through Warp safety and quality vetting: authority verification, insurance validation, safety score review, equipment inspection. Set vehicleType: "DRY_VAN_53".
Box Truck
1 to 12 pallets, liftgate equipped
26 ft box trucks. All liftgate equipped. Temperature controlled units available. Best for locations that cannot receive a 53 ft trailer: retail stores, restaurants, residential, congested urban. Set vehicleType: "STRAIGHT_TRUCK_26".
Cargo Van
Cartons, cases, parcels, or up to 3 pallets
Same day dispatch available. Best for tight access locations: urban storefronts, residential, narrow loading areas, height and weight restricted buildings. Set vehicleType: "CARGO_VAN".
Using AI coding tools to ship freight
AI coding tools like Claude Code and Cursor can handle the entire freight workflow autonomously. Point them at the Warp API documentation and describe what you need in natural language. The AI generates the correct HTTP requests, executes them, parses the responses, and handles errors.
Claude Code
Autonomous freight agent
Claude Code reads the Warp API docs, generates curl or Python requests, executes them in the terminal, and returns structured results. It can quote, book, and track freight in a single conversation.
Cursor
IDE integrated shipping
Build freight integrations directly in your codebase. Cursor generates the API client code, handles authentication, and writes the error handling. Ship freight from your editor.
Any LLM agent
Structured JSON, predictable responses
Every Warp endpoint returns structured JSON with explicit field names and enum values. AI agents can parse responses without ambiguity. No natural language interpretation required.
For the full walkthrough on shipping freight with Claude Code, see the Ship with Claude Code guide.
The infrastructure behind the API
When you call the Warp API, you are accessing a freight network of 20,000+ local 3rd party carriers, 9,000+ box trucks and cargo vans, and 50+ Warp operated cross dock facilities. Every carrier operates through the Warp driver app, which provides live GPS tracking, scan in and scan out events, proof of delivery photos, and electronic signature capture. Our AI backbone, Orbit, monitors every load automatically, flagging late pickups, missed scans, route deviations, and delivery exceptions before your team has to chase them. Pricing is all inclusive and per pallet. No fuel surcharges, no terminal handling charges, no hidden accessorial fees.
Frequently asked questions
What is the best API for shipping freight?
Warp's freight API provides programmatic access to LTL, truckload, box truck, and cargo van shipping across 20,000+ carriers. One API key, all modes, structured JSON, real time webhooks.
Can I ship freight without calling a broker?
Yes. Warp's REST API lets you quote, book, and track freight entirely through code. No phone calls, no email chains, no freight portals.
What programming languages work with freight APIs?
Any language that makes HTTP requests. The Warp API is standard REST with JSON payloads. Python, Node.js, Go, Java, Ruby, Rust, or any other language.
How much does it cost to use a freight API?
Warp charges no software fees, no API call fees, and no integration fees. You pay when you ship with all inclusive per pallet pricing. No fuel surcharges or hidden fees.
Can AI agents ship freight?
Yes. Warp's API and CLI are designed for autonomous operation. AI coding tools like Claude Code can quote, book, and track freight by reading the API documentation and generating the correct requests.
Freight is now programmable.
Quote, book, and track LTL, truckload, box truck, and cargo van shipments with standard HTTP requests. One API key, all modes, structured JSON responses, real time webhooks.
REST API · CLI · Webhooks · Python · Node.js · curl · AI coding tools