API endpoints reference
Create orders, get rates, check serviceability, track, download labels and cancel shipments with the RouteOne API.
All endpoints live under https://app.routeonex.com/api/public/v1 and need an API key with the matching scope. See API quickstart for keys and authentication. The full field-by-field reference with examples is also on Settings › Configure API.
POST /orders
Scope orders:write. Creates an order (status Processing) and one unbooked shipment (status CREATED). No courier is booked and your wallet is not charged. Ship the order from Orders or Shipments in the dashboard.
| Field | Notes |
|---|---|
order_id | Required. Your reference, unique in your account, up to 50 characters. A repeat returns 409. |
payment_mode | Required. PREPAID or COD. |
collectable_value | COD only. Greater than 0 and no more than the order value. Rejected with PREPAID. |
items[] | Required, 1 to 100 items, each with name, units (whole number, at least 1), price and optional sku. |
weight_kg | Required, greater than 0 and up to 100. |
dimensions.l / .w / .h | Required, in cm, each greater than 0 and up to 300. |
customer | Required name and phone (10-digit Indian mobile); optional email. |
shipping | Required address1, city, state and a 6-digit pincode; optional address2 and country. |
A successful reply returns order_id (RouteOne's id), seller_order_id (your reference), shipment_id, shipment_code and status. Use shipment_id with tracking, labels and cancel.
Idempotency. Send an optional Idempotency-Key header (1 to 255 characters, for example a UUID). A retry with the same key and body within 24 hours returns the original response with the header Idempotent-Replayed: true instead of creating another order. Reusing a key with a different body returns 422. Only successful responses are stored, so you can fix and resend after a 4xx.
Negative wallet. The order is still created, but the response adds warning: "wallet_balance_negative", wallet_balance and a message asking you to recharge. See Outstanding dues.
POST /rates
Scope rates:read. Send pickup_pincode, delivery_pincode, weight_kg, payment_mode and order_value (and optionally dimensions). You get zone, billed_weight_kg and a quotes list, cheapest first, with courier, mode, rate, edd and tat_days. An empty quotes list means no enabled courier serves that shipment.
GET /serviceability
Scope serviceability:read. Pass pincode. The reply has city, state, serviceable and cod.
GET /track
Scope tracking:read. Pass one of shipment_id, awb or order_id. You get the status, AWB, courier, edd, a customer tracking link and the events list. Customer name, phone and street address are never returned. If an order has several shipments, the most recent is returned.
If order_id matches more than one order (for example two connected stores both have order 1000) you get 409 with a matches list. Retry with shipment_id or awb.
Statuses: CREATED, ASSIGNED, READY_TO_SHIP, SHIPPED, IN_TRANSIT, OUT_FOR_DELIVERY, DELIVERED, EXCEPTION (an NDR), RTO and CANCELLED.
GET /labels
Scope labels:read. Pass shipment_id or awb. Returns the label as a PDF. A 404 means there is no printable label yet, or the shipment was cancelled.
POST /cancel
Scope shipments:cancel. Send shipment_id or awb. Works for shipments that have not left your warehouse (CREATED, ASSIGNED or READY_TO_SHIP). A booked AWB is cancelled with the courier first, and freight charged for it is refunded to your wallet. You get 409 if it has already been dispatched or cancelled, or the courier refused the cancellation.
Account suspended
If your account is suspended, every endpoint returns 403 with code: "account_suspended".
POST /orders, always send an Idempotency-Key. If a request times out or returns a 500, resend it with the same key and you will never get a duplicate order.Still need help? Email support@routeone.app with your order ID or AWB, or raise a ticket from Help Center › Ticket in the app.
