GET /orders
List orders
date: Service date (YYYY-MM-DD)status: Order statusunrouted: "true" for orders not yet on a route
Send orders from your store, WMS, or lab system straight into dispatch, and pull back delivery status and proof of delivery. API access is included with the Business plan.
Create a key in Settings → API keys and send it as a bearer token. Keys act with dispatcher permissions for the organization that created them.
curl https://api.routecheetah.com/orders?unrouted=true \
-H "Authorization: Bearer rck_your_key" Errors return JSON with a machine-readable code: validation (with per-field details), plan_limit, feature_unavailable, not_found.
Download the OpenAPI 3.1 spec to generate a client in any language.
GET /orders
List orders
date: Service date (YYYY-MM-DD)status: Order statusunrouted: "true" for orders not yet on a routePOST /orders
Create a pickup-and-delivery order
serviceDate string (required)priority stringserviceLevel stringautoServiceLevel booleanrecurring booleanrefrigerated booleanreference objectpoNumber objectpickup object (required)delivery object (required)packages objectweightLbs objectnotesForDriver objectnotesInternal objectrequesterName objectrequesterPhone objectcustomerId objectitems arrayPOST /ai/order-draft
Draft an order from a customer's email or text message, or a photo of a paper order or label, with AI (Business plan). Returns matched saved places, service level, date, and times for review; nothing is created
text stringimage stringGET /orders/{id}
Get an order with its pickup and delivery status
PATCH /orders/{id}/pricing
Change an order's service level, recurring rate, special handling, billed customer, failed-attempt billing, or extra costs, and reprice it from the rate card
serviceLevel stringrecurring booleanrefrigerated booleancustomerId objectattemptBillable booleanotherCostCents integerrefreshFuelPrice booleanPOST /orders/{id}/redeliver
Redeliver a failed order on a separate trip: a new order with the same stops, priced in full
serviceDate string (required)serviceLevel stringPOST /orders/{id}/cancel
Cancel an order
POST /orders/{id}/dispatch
Dispatch an order: to a driver's route for its date (created if needed), or onto the route in routeId
driverMembershipId object (required)mode stringrouteId objectPOST /orders/{id}/items
Chain of custody: add items (bags, totes, packages) to scan at pickup and delivery, each with an optional temperature range. Returns all the order's items
items array (required)DELETE /orders/{id}/items/{itemId}
Chain of custody: remove an item nobody has scanned yet
GET /orders/{id}/custody
Chain of custody report: each item's status, every scan with who, where, when, and temperature, exceptions, and temperature excursions
format: "json" (default) or "html" for a printable pageGET /routes
List routes
date: Service date (YYYY-MM-DD)from: Range startto: Range endPOST /routes
Create a route
name objectserviceDate string (required)driverMembershipId objectstart objectend objectroundTrip booleanGET /routes/{id}
Get a route with its stops and proof of delivery
PATCH /routes/{id}
Update a route
name objectserviceDate stringdriverMembershipId objectstart objectend objectroundTrip booleanDELETE /routes/{id}
Delete a route that has not started
POST /routes/{id}/stops
Add new stops or move unrouted order stops onto a route
stops arraystopIds arrayPOST /ai/stops-from-photo
Read delivery stops (name, address, phone, notes) from a photo of shipping labels or a printed or handwritten list, as rows for /routes/{id}/import. Nothing is added until you import them
image string (required)POST /routes/{id}/import
Import stops from spreadsheet rows (rows that cannot be located are added and counted as unlocated)
rows array (required)PUT /routes/{id}/sequence
Set the stop order
stopIds array (required)POST /routes/{id}/optimize
Optimize the stop order. With traffic-aware routing (paid plans), `plan` on the route has a fastest and a fuel-efficient option when they differ: drive time with traffic, miles, fuel, and cost. The route follows `objective`, or the organization's default
objective stringPOST /routes/{id}/plan
Switch a route between the fastest and fuel-efficient options of its plan: resequences the stops and updates distance, drive time, and ETAs. Drivers can switch their own route before starting it when the organization allows it
objective string (required)POST /routes/{id}/assign
Assign or offer a route to a driver
driverMembershipId object (required)mode stringGET /stops/{id}
Get a stop
POST /stops/{id}/status
Change a stop status (on the way, arrived, attempted, skipped, reopen)
status string (required)failureReason objectnote objectlat objectlng objectPOST /stops/{id}/complete
Complete a stop with proof of delivery
recipientName objectrecipientRelation objectsignature objectphotos arraynotes objectwaitMinutes objectwaitAutoMinutes objectlat objectlng objectPOST /stops/{id}/retry
Try a failed stop again on the same route. A billable failed attempt adds one stop fee to the order
POST /stops/{id}/arrival-check
Text the stop's contact from RouteCheetah's number asking whether someone will be there (reply Y or N). Once per stop; the reply shows on the stop as arrivalCheck
POST /stops/{id}/custody
Chain of custody: record item scans, exceptions for items that can't be scanned, and a temperature reading at an order's pickup or delivery. Labels not on the order are logged as exceptions. Completing the stop needs every item scanned or excused, and a reading for refrigerated loads
scans arrayexceptions arraytemperatureC objecthandoff booleanat objectlat objectlng objectGET /places
List or search saved places
q: Search textPOST /places
Save a place
name string (required)contactName objectphone objectemail objectnotes objectaddress object (required)PUT /places/{id}/rates
Set a customer's negotiated rates (any rate-card field; null clears them). Orders billed to the place are priced with them
rateOverrides object (required)GET /reports/deliveries
Completed stops in a date range
from (required): YYYY-MM-DDto (required): YYYY-MM-DDformat: "json" (default) or "csv"GET /reports/recovered
Revenue recovered by automatic pricing, by month: fuel surcharge, measured wait time the driver kept, and service levels raised by the rules (owners and admins)
from (required): YYYY-MM-DDto (required): YYYY-MM-DDGET /fuel
The diesel price fuel surcharges follow today, where it comes from (EIA weekly or entered by hand), and recent weeks
GET /tracking/live
Latest position of each active driver
GET /tracking/board
Live map for a day: each driver's position, route stops, the stop they're heading to, today's trail, and driving stats (distance, driving time, average and top speed, speeding)
date (required): Service date (YYYY-MM-DD)Questions about integrating? Email [email protected].
Start a free trial, then upgrade to Business when you're ready to connect via the API.