Order Lifecycle
A forward delivery order follows this flow:
Code
Core States
These are the states you'll actually branch your logic on. status_id in tracking responses and webhooks can take other, less common values too (QC failures, e-way bill holds, hyperlocal partial delivery, and a few more) — see the status field on OrderDetails in the API Reference for the complete list.
status_id | Status | What it means |
|---|---|---|
new | New | Order received, pending processing |
picked | Picked | Item collected from the seller or warehouse |
recd_at_fwd_hub | Received At Forward Hub | Item is moving through Shadowfax's hub network toward the customer |
ofd | Out For Delivery | Rider is en route to the customer |
delivered | Delivered | Successfully delivered to the customer |
cid / nc / na / on_hold | Delivery Failure / Hold | Delivery couldn't proceed as scheduled — see below for what to do next |
reopen_ndr | Require Delivery - NDR | A failed delivery attempt was reopened for another try |
rts, rts_d | Return to Seller | Item is being (or has been) returned to the seller (Marketplace) |
rto, rto_d | Return to Origin | Item is being (or has been) returned to your warehouse (Warehouse/D2D) |
lost | Lost | Item lost in transit |
Delivery Failure
When a delivery attempt fails, the order moves into one of several hold statuses depending on the reason — cid (customer asked for another date), nc (customer not contactable), na (not attempted), or on_hold. There is no single generic "NDR" status; NDR (Non-Delivery Report) is the industry term for this class of outcome, not a status value you'll see in the API.
From any of these hold statuses, you can:
- Reopen for another delivery attempt — update customer contact or address, then set
status_update.statustoreopen_ndrto trigger a re-delivery - Initiate RTO — return the item to the origin warehouse
- Initiate RTS — return the item directly to the seller
Use the Order Update endpoint with status_update to trigger these transitions.
Webhooks
Shadowfax sends real-time POST callbacks whenever an order transitions state. Configure your webhook URL in the SFX 360 Partner Portal.