Acme Freight API v1
Track shipments and price quotes from your own systems: JSON over HTTP, one header to authenticate.
Authentication and limits
Send your key in the X-API-Key header. These demo keys work on this server:
| Key | Account | Limit |
|---|---|---|
acme-demo-7f3a91c2 | Demo partner | 120 requests per minute |
acme-trial-2b91e4d0 | Trial account | 5 requests per minute |
Over the limit, the API answers 429 Too Many Requests with a Retry-After header.
Money is always a string of exact decimals ("117.62"), never a float.
Endpoints
| Method | Path | What it does |
|---|---|---|
| GET | status | Is the API up, and which release answers (no key needed) |
| GET | shipments?status=&customer=&limit=&offset= | Search shipments (up to 50 per page) |
| GET | shipments/{id} | One shipment, with its scan history |
| POST | quotes | Price a shipment: origin, destination, weight_kg, optional service, promo, hazardous |
Base URL: http://test-hub.us/demo/freight/api/v1/
Try it
curl -H "X-API-Key: acme-demo-7f3a91c2" http://test-hub.us/demo/freight/api/v1/shipments/AF-100001
Pricing a quote
curl -X POST -H "X-API-Key: acme-demo-7f3a91c2" -H "Content-Type: application/json" \
-d '{"origin": "San Francisco", "destination": "San Diego", "weight_kg": 120, "promo": "SPRING10"}' \
http://test-hub.us/demo/freight/api/v1/quotes
Example response (live, from this server)
{
"id": "AF-100001",
"status": "in_transit",
"status_label": "In transit",
"customer": "Lumen Optics",
"origin": "Los Angeles, California, US",
"destination": "Frankfurt, Hessen, DE",
"service": "express",
"weight_kg": 42.5,
"pieces": 3,
"booked_at": "2026-09-23T06:00",
"delivered_at": null,
"price": {
"amount": "717.54",
"currency": "USD"
},
"events": [
{
"at": "2026-09-23T06:00",
"code": "booked",
"text": "Booked with Acme Freight (express)",
"location": "Los Angeles, California, US"
},
{
"at": "2026-09-23T18:00",
"code": "picked_up",
"text": "Picked up by courier",
"location": "Los Angeles, California, US"
},
{
"at": "2026-09-24T08:00",
"code": "at_hub",
"text": "Arrived at LAX hub",
"location": "Los Angeles, California, US"
},
{
"at": "2026-09-24T18:00",
"code": "in_transit",
"text": "Departed LAX for FRA",
"location": "Los Angeles, California, US"
}
],
"eta": "2026-09-25",
"estimated_delivery": "2026-09-25",
"deprecated": {
"eta": "use estimated_delivery; eta goes away in API v2"
}
}
API changelog
- 1.0.0 — API v1 launched: shipments, shipment lookup and quotes.
- 1.1.0 — Shipment lists answer up to 3x faster.
- 3.0.0 — Restored 'eta' (2.0.0 had renamed it to 'estimated_delivery' without notice). Both are sent; 'eta' is deprecated.