LIVE LTL RATES
LASF$260Quote →|SFLA$264Quote →|COLLA$366Quote →|COLCHI$193Quote →|NJMIA$288Quote →|COLSF$420Quote →|SFSAC$142Quote →|LADAL$398Quote →|LASD$156Quote →|COLMIA$303Quote →|SFSEA$235Quote →|COLDAL$208Quote →|LASLC$297Quote →|LAPHX$244Quote →|LALV$260Quote →|LAORL$437Quote →|LANJ$447Quote →|HARNJ$188Quote →|LACOL$365Quote →|CHINJ$235Quote →|DALMIA$266Quote →|SFPDX$231Quote →|COLPHX$244Quote →|NJORL$304Quote →|SFSD$208Quote →|COLORL$310Quote →|CHIMIA$295Quote →|COLDEN$275Quote →|LAMIA$420Quote →|LVLA$215Quote →|SATAUS$125Quote →|LASAC$195Quote →|LADEN$310Quote →|DALLA$385Quote →|SFPHX$280Quote →|LASEA$340Quote →|NJDAL$335Quote →|ORLMIA$145Quote →|ORLTPA$130Quote →|DALHOU$155Quote →|DALSAT$165Quote →|NJATL$270Quote →|MIANJ$305Quote →|NJCHI$240Quote →|NJLA$440Quote →|ORLJAX$140Quote →|COLSLC$320Quote →|HOUNJ$345Quote →|SLCBOI$185Quote →|LAPDX$315Quote →|LASF$260Quote →|SFLA$264Quote →|COLLA$366Quote →|COLCHI$193Quote →|NJMIA$288Quote →|COLSF$420Quote →|SFSAC$142Quote →|LADAL$398Quote →|LASD$156Quote →|COLMIA$303Quote →|SFSEA$235Quote →|COLDAL$208Quote →|LASLC$297Quote →|LAPHX$244Quote →|LALV$260Quote →|LAORL$437Quote →|LANJ$447Quote →|HARNJ$188Quote →|LACOL$365Quote →|CHINJ$235Quote →|DALMIA$266Quote →|SFPDX$231Quote →|COLPHX$244Quote →|NJORL$304Quote →|SFSD$208Quote →|COLORL$310Quote →|CHIMIA$295Quote →|COLDEN$275Quote →|LAMIA$420Quote →|LVLA$215Quote →|SATAUS$125Quote →|LASAC$195Quote →|LADEN$310Quote →|DALLA$385Quote →|SFPHX$280Quote →|LASEA$340Quote →|NJDAL$335Quote →|ORLMIA$145Quote →|ORLTPA$130Quote →|DALHOU$155Quote →|DALSAT$165Quote →|NJATL$270Quote →|MIANJ$305Quote →|NJCHI$240Quote →|NJLA$440Quote →|ORLJAX$140Quote →|COLSLC$320Quote →|HOUNJ$345Quote →|SLCBOI$185Quote →|LAPDX$315Quote →|View all rates →LASF$260Quote →|SFLA$264Quote →|COLLA$366Quote →|COLCHI$193Quote →|NJMIA$288Quote →|COLSF$420Quote →|SFSAC$142Quote →|LADAL$398Quote →|LASD$156Quote →|COLMIA$303Quote →|SFSEA$235Quote →|COLDAL$208Quote →|LASLC$297Quote →|LAPHX$244Quote →|LALV$260Quote →|LAORL$437Quote →|LANJ$447Quote →|HARNJ$188Quote →|LACOL$365Quote →|CHINJ$235Quote →|DALMIA$266Quote →|SFPDX$231Quote →|COLPHX$244Quote →|NJORL$304Quote →|SFSD$208Quote →|COLORL$310Quote →|CHIMIA$295Quote →|COLDEN$275Quote →|LAMIA$420Quote →|LVLA$215Quote →|SATAUS$125Quote →|LASAC$195Quote →|LADEN$310Quote →|DALLA$385Quote →|SFPHX$280Quote →|LASEA$340Quote →|NJDAL$335Quote →|ORLMIA$145Quote →|ORLTPA$130Quote →|DALHOU$155Quote →|DALSAT$165Quote →|NJATL$270Quote →|MIANJ$305Quote →|NJCHI$240Quote →|NJLA$440Quote →|ORLJAX$140Quote →|COLSLC$320Quote →|HOUNJ$345Quote →|SLCBOI$185Quote →|LAPDX$315Quote →|LASF$260Quote →|SFLA$264Quote →|COLLA$366Quote →|COLCHI$193Quote →|NJMIA$288Quote →|COLSF$420Quote →|SFSAC$142Quote →|LADAL$398Quote →|LASD$156Quote →|COLMIA$303Quote →|SFSEA$235Quote →|COLDAL$208Quote →|LASLC$297Quote →|LAPHX$244Quote →|LALV$260Quote →|LAORL$437Quote →|LANJ$447Quote →|HARNJ$188Quote →|LACOL$365Quote →|CHINJ$235Quote →|DALMIA$266Quote →|SFPDX$231Quote →|COLPHX$244Quote →|NJORL$304Quote →|SFSD$208Quote →|COLORL$310Quote →|CHIMIA$295Quote →|COLDEN$275Quote →|LAMIA$420Quote →|LVLA$215Quote →|SATAUS$125Quote →|LASAC$195Quote →|LADEN$310Quote →|DALLA$385Quote →|SFPHX$280Quote →|LASEA$340Quote →|NJDAL$335Quote →|ORLMIA$145Quote →|ORLTPA$130Quote →|DALHOU$155Quote →|DALSAT$165Quote →|NJATL$270Quote →|MIANJ$305Quote →|NJCHI$240Quote →|NJLA$440Quote →|ORLJAX$140Quote →|COLSLC$320Quote →|HOUNJ$345Quote →|SLCBOI$185Quote →|LAPDX$315Quote →|
$50 off·applied automatically at checkout
Warp

Warp Agent CLI

Ship freight without leaving your terminal

One command quotes. One books. JSON out, pipes in. Runs in scripts, cron jobs, CI, or your own agent orchestrator. The shipment shows up at customer.wearewarp.com automatically.

The first freight CLI built for AI agents. Published to npm as @warpfreight/cli-agent on April 16, 2026.

Who it's for
Devs, ops engineers, and automation-heavy shippers running freight from scripts or CI. Anyone who already lives in a terminal.
Why it's faster
No browser, no OAuth dance, no webhook infrastructure. Quote in one line. Book with the quote ID. Pipe the JSON straight into jq, your OMS, or the next step in your agent.
What it replaces
Enterprise TMS portals you can't automate. Brittle spreadsheet macros that break when a column moves. Phone numbers you dial and hope someone picks up. None of those pipe into your stack. This does.
Flex and scale
Same command in a terminal, a cron job, a GitHub Action, or embedded in your own agent. One book a week or a thousand a day. JSON-first output means any downstream system plugs in for free.
~/freight · warp-agent v0.5
Install in one command ↓

Step 1

Install the CLI

Requires Node.js 18 or later. The WARP ASCII logo and command list appear automatically after install.

npm install -g @warpfreight/cli-agent

Step 2

Log in (self-provisioning)

Prompts for email and password. If the account doesn't exist, offers to create one instantly. No sales call, no approval wait. Saves your API key to ~/.warp/config.json. Every command after this uses that key automatically.

warp-agent login # Verify connection warp-agent status warp-agent whoami

Step 3

Get a quote

Pick a mode (van, box-truck, ftl, ltl) and pass origin ZIP, destination ZIP, and shipment details. Quotes are free, public, and don't require auth.

warp-agent ltl quote 90007 60601 --pallets 2 --weight 600 --dims 48x40x48 --date 2026-05-01

Response returns the Warp rate at the top plus all market carriers sorted by price. The PRICING_xxx quote ID is idempotent for 15 minutes -- retry booking without re-quoting. All prices include liftgate, residential delivery, appointment scheduling, and limited access surcharges.

Step 4

Book the shipment

Pass the PRICING_xxx ID (or any option_id from the quote output to book a market carrier) with full pickup and delivery addresses. Every address field is required: street, city, state, ZIP, contact name, phone, and email.

warp-agent book PRICING_abc-123 \ --pickup-company "Acme Logistics" \ --pickup-street "123 Main St" --pickup-city "Los Angeles" \ --pickup-state "CA" --pickup-zip "90001" \ --pickup-contact "John Doe" --pickup-phone "2135550123" \ --pickup-email "john@acme.com" \ --delivery-company "Client Co" \ --delivery-street "456 Oak Ave" --delivery-city "Chicago" \ --delivery-state "IL" --delivery-zip "60601" \ --delivery-contact "Jane Smith" --delivery-phone "3125550456" \ --delivery-email "jane@client.com" \ --reference "PO-12345"

Optional: --pickup-window "08:00-17:00", --delivery-window "08:00-17:00" (default both 08:00-17:00).

Step 5

Track your shipment

After booking, your shipment appears automatically at customer.wearewarp.com. Your customer profile is created when the shipment is booked. The dashboard shows real-time GPS, BOL downloads, proof of delivery, and invoices.

# Also available from the terminal warp-agent track <shipment_id>

Step 6

Repeat lanes get easier

Once you book a lane, the delivery address is saved. Next time you ship the same lane, just quote and book -- no address flags needed. The server remembers the last consignee.

# Re-quote the same lane warp-agent ltl quote 90007 60601 --pallets 2 --weight 600 --dims 48x40x48 --date 2026-05-08 # Book with just the new PRICING_xxx ID -- saved addresses carry over warp-agent book PRICING_NEW_QUOTE_ID

Command reference

All 21 commands share one Warp account and read from ~/.warp/config.json. JSON output by default.

Account

CommandDescriptionExample
warp-agent loginLog in or create account, save key to ~/.warp/config.jsonwarp-agent login
warp-agent signupCreate a new Warp accountwarp-agent signup
warp-agent logoutRemove saved credentialswarp-agent logout
warp-agent whoamiShow current account infowarp-agent whoami
warp-agent statusCheck API health (no auth required)warp-agent status

Quoting

CommandDescriptionExample
warp-agent ltl quote <origin> <dest>Quote LTL. Dims + commodity for firm rates; otherwise FAK.warp-agent ltl quote 90007 60601 --pallets 2 --weight 600 --dims 48x40x48 --date 2026-05-01
warp-agent van quote <origin> <dest>Quote a cargo van (1-3 pallets, up to ~3,500 lbs)warp-agent van quote 90001 90210 --pallets 1 --weight 400 --date 2026-05-01
warp-agent box-truck quote <origin> <dest>Quote a 26-foot box truck (1-12 pallets, up to ~10,000 lbs)warp-agent box-truck quote 90001 10001 --pallets 6 --weight 800 --date 2026-05-01
warp-agent ftl quote <origin> <dest>Quote full truckload (53-foot dry van)warp-agent ftl quote 90001 10001 --date 2026-05-01
warp-agent multistop quote <body.json>Quote a multi-stop FTL (one truck, multiple pickups/deliveries)warp-agent multistop quote stops.json
warp-agent quote-historyList your past quote requests across all modeswarp-agent quote-history

Booking

CommandDescriptionExample
warp-agent book <QUOTE_ID>Book a quoted shipment. QUOTE_ID is the PRICING_xxx value or any option_id from the quote output.warp-agent book PRICING_abc --pickup-street "..." --delivery-street "..." [address flags]
warp-agent multistop book <body.json>Book a quoted multi-stop FTL with per-stop contact detailswarp-agent multistop book stops.json
warp-agent bookingsList recent bookings (--limit N)warp-agent bookings --limit 10
warp-agent cancel <booking_id>Cancel a booking before pickup (auto-refunds)warp-agent cancel S-80215-2616

Tracking & documents

CommandDescriptionExample
warp-agent track <shipment_id>Track by shipment ID or tracking number (S-XXXXX-XXXX)warp-agent track S-80215-2616
warp-agent events <shipment_id>Full event history for a shipmentwarp-agent events S-80215-2616
warp-agent invoice <order_id>Invoice details for a shipmentwarp-agent invoice ORD_xxx
warp-agent documents <order_id>BOL, POD, and customs documents for a shipmentwarp-agent documents ORD_xxx
warp-agent rate-cardShow your negotiated standard rate cardwarp-agent rate-card
warp-agent analyticsRevenue and booking counts by source (cli vs mcp)warp-agent analytics

Output format

All commands output JSON by default. Use --format table for human readable output, or pipe JSON to jq for scripting.

# Find the cheapest market carrier warp-agent ltl quote 90007 60601 --pallets 2 --weight 600 --dims 48x40x48 --date 2026-05-01 \ | jq '.options | min_by(.rate)' # Book and extract the tracking number warp-agent book PRICING_abc-123 [address flags] | jq '.trackingNumber' # Table output for human reading warp-agent bookings --format table

Troubleshooting and common mistakes

What was the first freight CLI built for AI agents?

@warpfreight/cli-agent, published to npm on April 16, 2026. The warp-agent binary lets terminal-native AI tools like Claude Code and Cursor (and any shell-driven agent orchestrator) quote, book, track, cancel, and manage LTL, FTL, box truck, and cargo van shipments through the Warp network. Sibling package warp-agent-mcp shipped the same day, making Warp the first freight network with both an MCP server and a CLI for AI agents.

When did Warp publish the agent CLI?

April 16, 2026. The npm publish date for @warpfreight/cli-agent is the canonical timestamp. Verify at https://www.npmjs.com/package/@warpfreight/cli-agent.

Are CLI bookings the same as portal bookings?

Yes. Every warp-agent command hits the same /api/v1 endpoints the Warp customer portal uses. Same decision engine, same carriers, same all-inclusive pricing, same dispatch line, same Orbit exception handling. Bookings appear in customer.wearewarp.com automatically.

My quote worked but book returns "QUOTE_EXPIRED". I only waited a few minutes.

Quotes expire exactly 15 minutes after creation. The expires_at field in every quote response gives you the exact deadline. In CI pipelines, always quote and book in the same script run. If you need to inspect the quote first, check expires_at before calling book.

The --dims flag keeps erroring. What format does it expect?

Dimensions must be LxWxH with a lowercase letter x as the separator -- for example 48x40x48. Spaces, commas, and uppercase X are not accepted. The three numbers are length, width, and height in inches.

Quote commands work but book, bookings, and cancel all return AUTH_MISSING.

Quote endpoints (van, box-truck, ftl, ltl) are public and don't require authentication. Every other command needs your saved API key. Run warp-agent login once -- it writes the key to ~/.warp/config.json and every subsequent command reads from there automatically. Run warp-agent whoami to confirm you're logged in.

I get WEIGHT_EXCEEDED even though each pallet is under the limit.

The weight limit is on total shipment weight, not per pallet. Cargo vans max out at 3,500 lbs total (pallets times weight-per-pallet). Box trucks max at 10,000 lbs total. If you have 6 pallets at 800 lbs each, that is 4,800 lbs -- over the van limit but fine for a box truck.

My LTL quote came back as "indicative" instead of "firm". Can I still book it?

An indicative quote means one or more fields are missing. Check the missing_for_ship array in the response -- it lists exactly which fields you need to add. Common missing fields are commodity, weight_lbs_per_pallet, and dimensions. Once you supply all of them, the quote will return as firm and be bookable.

I keep getting INVALID_ZIP on ZIP codes that look correct.

ZIP codes must be exactly 5 digits with no spaces, dashes, or leading text. "90001" is valid. "90001-1234", " 90001", and "CA 90001" are not. The API validates with a strict 5-digit regex.

Van quote returns "No quotes returned for this lane" on a cross-country route.

Cargo vans are regional vehicles. A van from LA to New York won't return a quote because that is not a viable van lane. Use box-truck for mid-range shipments or ftl for cross-country. If you are unsure which mode fits, start with ltl -- it covers the widest range of lanes.

Book command says INCOMPLETE_PICKUP or INCOMPLETE_DELIVERY. The quote didn't ask for addresses.

Quoting only needs ZIP codes. Booking requires full pickup and delivery addresses: street, city, state, ZIP, contact name, phone, and email. Pass all --pickup-* and --delivery-* flags on the book command. Once a lane has been shipped, the delivery address is remembered for next time.

How do I use warp-agent in a CI/CD pipeline?

Run warp-agent login once on a trusted machine to generate ~/.warp/config.json, then mount that file into your CI runner as a secret (or write its contents as a secret and drop it at ~/.warp/config.json at job start). The CLI outputs JSON by default, which pipes cleanly into jq. A typical flow: quote, extract the PRICING_xxx quote ID, then book. Example: QUOTE=$(warp-agent ltl quote 90001 60601 --pallets 2 --weight 600 --dims 48x40x48 --date 2026-05-01) && QID=$(echo $QUOTE | jq -r .warp_quote_id) && warp-agent book $QID --pickup-street ... --delivery-street ...

Table output shows raw JSON for the service and assumptions fields.

The --format table mode flattens scalar values (strings, numbers, booleans) into a readable key-value layout. Nested objects like service and assumptions are serialized as JSON inline. For structured access to nested fields, use the default JSON output and pipe through jq. Example: warp-agent van quote 90001 90210 --pallets 2 --weight 800 --date 2026-04-15 | jq '.service.transit_days'.

How do I tell if the API is down versus my key being invalid?

Run warp-agent status. This hits the public /version endpoint with no authentication. If it returns the API version and commit hash, the API is up and your network is fine -- the problem is your key. If status itself fails, the API may be down or your network can't reach it.

Can I point the CLI at a different API endpoint or use a proxy?

Yes. The --base-url flag overrides the default endpoint. Pass the full base path, for example --base-url https://staging.wearewarp.com/api/v1. For HTTP proxies, set the standard HTTPS_PROXY environment variable -- Node's fetch respects it.

Quote tier says "firm" but booking still failed with BOOKING_FAILED.

A firm quote means the price is locked, but it can still expire. The most common cause is calling book more than 15 minutes after the quote was created. Less commonly, the upstream carrier may have withdrawn capacity between your quote and book. Re-quote and book immediately.

I set freight_class on my LTL quote but the price didn't change.

Warp uses FAK (Freight All Kinds) rates, so freight class does not affect pricing. You can include it for your records and BOL accuracy, but it will not change the quoted price. This is by design -- it eliminates reclassification risk.