# API reference > RouteCheetah REST API for integrations: create delivery orders, build and dispatch routes, and read proof of delivery. OpenAPI 3.1 spec included. - **URL:** https://routecheetah.com/developers/ --- 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. ## Authentication 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](https://api.routecheetah.com/openapi.json) to generate a client in any language. ## Orders GET `/orders` List orders - `date`: Service date (YYYY-MM-DD) - `status`: Order status - `unrouted`: "true" for orders not yet on a route POST `/orders` Create a pickup-and-delivery order **Request body** - `serviceDate` string (required) - `priority` string - `serviceLevel` string - `autoServiceLevel` boolean - `recurring` boolean - `refrigerated` boolean - `reference` object - `poNumber` object - `pickup` object (required) - `delivery` object (required) - `packages` object - `weightLbs` object - `notesForDriver` object - `notesInternal` object - `requesterName` object - `requesterPhone` object - `customerId` object - `items` array POST `/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 **Request body** - `text` string - `image` string GET `/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 **Request body** - `serviceLevel` string - `recurring` boolean - `refrigerated` boolean - `customerId` object - `attemptBillable` boolean - `otherCostCents` integer - `refreshFuelPrice` boolean POST `/orders/{id}/redeliver` Redeliver a failed order on a separate trip: a new order with the same stops, priced in full **Request body** - `serviceDate` string (required) - `serviceLevel` string POST `/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 **Request body** - `driverMembershipId` object (required) - `mode` string - `routeId` object POST `/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 **Request body** - `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 page ## Routes GET `/routes` List routes - `date`: Service date (YYYY-MM-DD) - `from`: Range start - `to`: Range end POST `/routes` Create a route **Request body** - `name` object - `serviceDate` string (required) - `driverMembershipId` object - `start` object - `end` object - `roundTrip` boolean GET `/routes/{id}` Get a route with its stops and proof of delivery PATCH `/routes/{id}` Update a route **Request body** - `name` object - `serviceDate` string - `driverMembershipId` object - `start` object - `end` object - `roundTrip` boolean DELETE `/routes/{id}` Delete a route that has not started POST `/routes/{id}/stops` Add new stops or move unrouted order stops onto a route **Request body** - `stops` array - `stopIds` array POST `/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 **Request body** - `image` string (required) POST `/routes/{id}/import` Import stops from spreadsheet rows (rows that cannot be located are added and counted as unlocated) **Request body** - `rows` array (required) PUT `/routes/{id}/sequence` Set the stop order **Request body** - `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 **Request body** - `objective` string POST `/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 **Request body** - `objective` string (required) POST `/routes/{id}/assign` Assign or offer a route to a driver **Request body** - `driverMembershipId` object (required) - `mode` string ## Stops GET `/stops/{id}` Get a stop POST `/stops/{id}/status` Change a stop status (on the way, arrived, attempted, skipped, reopen) **Request body** - `status` string (required) - `failureReason` object - `note` object - `lat` object - `lng` object POST `/stops/{id}/complete` Complete a stop with proof of delivery **Request body** - `recipientName` object - `recipientRelation` object - `signature` object - `photos` array - `notes` object - `waitMinutes` object - `waitAutoMinutes` object - `lat` object - `lng` object POST `/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 **Request body** - `scans` array - `exceptions` array - `temperatureC` object - `handoff` boolean - `at` object - `lat` object - `lng` object ## Places GET `/places` List or search saved places - `q`: Search text POST `/places` Save a place **Request body** - `name` string (required) - `contactName` object - `phone` object - `email` object - `notes` object - `address` 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 **Request body** - `rateOverrides` object (required) ## Reports GET `/reports/deliveries` Completed stops in a date range - `from` (required): YYYY-MM-DD - `to` (required): YYYY-MM-DD - `format`: "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-DD - `to` (required): YYYY-MM-DD GET `/fuel` The diesel price fuel surcharges follow today, where it comes from (EIA weekly or entered by hand), and recent weeks ## Tracking 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 [support@routecheetah.com](mailto:support@routecheetah.com). ## Connect your systems to dispatch Start a free trial, then upgrade to Business when you're ready to connect via the API. [I'm a driver](https://app.routecheetah.com/signup?type=solo) [I manage drivers](https://app.routecheetah.com/signup?type=fleet) --- _Source: [RouteCheetah](https://routecheetah.com/)_ _Generated: 2026-10-25 22:50:00 UTC_