Shadowfax sends HTTP callbacks to your configured URL when order status changes or rider location updates. Share your callback URL and optional custom headers with the Shadowfax team.
Use this Postman collection to set up and test callbacks: Callback Sandbox Collection
Callback Behavior
Aspect Detail Method POST or PUT (as configured)Content-Type application/jsonTimestamps UTC, format YYYY-MM-DDTHH:MM:SS.fZ Expected response 200 or 201
Your callback endpoint should be idempotent — duplicate callbacks must return success.
Order Status Callbacks
ALLOTTED
{
"pick_to_drop_distance" : "1.0" ,
"allot_time" : "2017-11-30T09:25:17.000000Z" ,
"rider_name" : "Amit Kumar" ,
"rider_id" : 252477 ,
"sfx_order_id" : 10189964 ,
"client_order_id" : "19424482" ,
"order_status" : "ALLOTTED" ,
"rider_contact" : "9898989898" ,
"rider_latitude" : 12.343424 ,
"rider_longitude" : 77.987987987 ,
"track_url" : "http://api.shadowfax.in/track/1C3CEC76E35579F1844F346C1D15F603/" ,
"pickup_eta" : 5 ,
"drop_eta" : 20
}
When call masking is enabled, callbacks include masked_rider_contact and alternate_masked_rider_contact objects with PIN and virtual number details.
ARRIVED
Rider has arrived at the pickup location.
{
"pick_to_drop_distance" : "1.0" ,
"arrival_time" : "2017-11-30T09:25:17.000000Z" ,
"rider_id" : 252477 ,
"rider_name" : "Amit Kumar" ,
"sfx_order_id" : 10189964 ,
"client_order_id" : "19424482" ,
"order_status" : "ARRIVED" ,
"rider_contact" : "9898989898" ,
"rider_latitude" : 12.343424 ,
"rider_longitude" : 77.987987987 ,
"track_url" : "http://api.shadowfax.in/track/1C3CEC76E35579F1844F346C1D15F603/" ,
"pickup_eta" : 3 ,
"drop_eta" : 18 ,
"rider_vehicle_type" : "biker/cyclist"
}
When call masking is enabled, the callback includes masked_rider_contact and alternate_masked_rider_contact objects.
UNASSIGNED
{
"unassigned_time" : "2022-02-13T16:28:22.948375Z" ,
"order_status" : "UNASSIGNED" ,
"sfx_order_id" : 20656181 ,
"client_order_id" : "ClientTEST124974"
}
DISPATCHED
{
"pick_to_drop_distance" : 0.92 ,
"order_status" : "DISPATCHED" ,
"sfx_order_id" : 21043942 ,
"rider_name" : "Shashank Arya" ,
"rider_contact" : "7992362908" ,
"rider_id" : 139468 ,
"rider_latitude" : 12.937847 ,
"rider_longitude" : 77.624494 ,
"pickup_eta" : null ,
"drop_eta" : 46 ,
"rider_cod_limit" : 0 ,
"client_order_id" : "order_111288" ,
"track" : "https://api.shadowfax.in/track/0E53743151A1521DAA9844289AB65CA2/" ,
"dispatch_time" : "2026-06-23T11:02:30.000000Z" ,
"track_url" : "https://order-tracking-hl.staging.shadowfax.in/track/0E53743151A1521DAA9844289AB65CA2" ,
"rain_mode_flag" : false ,
"rain_surge_amount" : 0 ,
"rain_impacted" : false
}
When call masking is enabled, the callback includes masked_rider_contact and alternate_masked_rider_contact objects.
ARRIVED_CUSTOMER_DOORSTEP
Rider has arrived at the customer doorstep.
{
"pick_to_drop_distance" : "1.0" ,
"customer_doorstep_arrival_time" : "2017-11-30T09:25:17.000000Z" ,
"rider_name" : "Amit Kumar" ,
"rider_id" : 252477 ,
"sfx_order_id" : 10189964 ,
"client_order_id" : "19424482" ,
"order_status" : "ARRIVED_CUSTOMER_DOORSTEP" ,
"rider_contact" : "9898989898" ,
"rider_latitude" : 12.343424 ,
"rider_longitude" : 77.987987987 ,
"track_url" : "http://api.shadowfax.in/track/1C3CEC76E35579F1844F346C1D15F603/" ,
"pickup_eta" : null ,
"drop_eta" : 5
}
When call masking is enabled, the callback includes masked_rider_contact and alternate_masked_rider_contact objects.
DELIVERED
Partial delivery returns may include return_skus:
{
"order_status" : "DELIVERED" ,
"sfx_order_id" : 188283605 ,
"client_order_id" : "i83dguyx2ohs" ,
"delivery_time" : "2022-11-23T11:18:52.000000Z" ,
"return_skus" : [
{
"quantity_returned" : 2 ,
"reason" : "Damaged product" ,
"skuId" : "1234" ,
"actual_quantity" : 4
}
],
"drop_image_url" : null
}
CANCELLED
cancel_reasoncancel_reason_text0 Cancelled by Customer 1 Rider Not Available or is Late 2 Customer Not Available 3 Duplicate Order 4 Delivery Address Unserviceable or Incorrect 5 Operational Issue with order 6 Cancelled by Seller 7 Rider not having enough cash for purchase 15 Delivered by seller 16 Item not available 17 Incorrect seller location 19–24 See full list in API documentation
CANCELLED_BY_CUSTOMER
Triggered post-pickup when the rider reaches the customer doorstep but cannot complete delivery.
Reason Code Reason text 0 Cancelled by Customer 1 Rider Not Available or is Late 2 Customer Not Available 3 Duplicate Order 4 Delivery Address Unserviceable or Incorrect 5 Operational Issue with order / Customer denied order / Customer not at address / Customer causing delay 6 Cancelled by Seller 7 Rider not having enough cash for purchase 15 Delivered by seller 16 Item not available 17 Incorrect seller location 19–24 See full list in API documentation
{
"pick_to_drop_distance" : 9.35 ,
"order_status" : "CANCELLED_BY_CUSTOMER" ,
"sfx_order_id" : 21038705 ,
"rider_name" : "Shashank Arya" ,
"rider_contact" : "7992362908" ,
"rider_id" : 139468 ,
"rider_latitude" : 12.931749 ,
"rider_longitude" : 77.68556 ,
"pickup_eta" : null ,
"drop_eta" : null ,
"rider_cod_limit" : 0 ,
"client_order_id" : "order_24438" ,
"return_time" : "2026-05-05T09:47:00.746057Z" ,
"reason" : 5 ,
"reason_text" : "Damaged products" ,
"rain_mode_flag" : false ,
"rain_surge_amount" : 0 ,
"rain_impacted" : false
}
When call masking is enabled, the callback includes masked_rider_contact and alternate_masked_rider_contact objects.
UNDELIVERED
In the Milk Run delivery model, UNDELIVERED is sent instead of CANCELLED_BY_CUSTOMER:
{
"order_status" : "UNDELIVERED" ,
"sfx_order_id" : 10189964 ,
"client_order_id" : "19424482" ,
"rider_name" : "Amit Kumar" ,
"rider_contact" : "9876543210" ,
"undeliver_reason" : "RECEIVER REFUSED DELIVERY"
}
RETURNED_TO_SELLER
{
"rts_time" : "2017-11-30T09:25:17.000000Z" ,
"order_status" : "RETURNED_TO_SELLER" ,
"sfx_order_id" : 10189964 ,
"client_order_id" : "19424482" ,
"return_types" : [ "cod" , "skus" ]
}
Rider Location Callback
{
"order_id" : "8145671314" ,
"rider_name" : "Amit Kumar" ,
"rider_longitude" : 77.66824096441269 ,
"time" : "2017-11-30T09:25:17.000000Z" ,
"rider_latitude" : 12.991595437657885 ,
"sfx_rider_id" : 3419 ,
"location_accuracy" : "31.0" ,
"pickup_eta" : 3 ,
"drop_eta" : 18
}
order_id is the client order ID (COID) passed at order placement.
Best Practices
Return 200 immediately and process asynchronously.
Implement idempotency using sfx_order_id + order_status as a deduplication key.
Use Get Order Details as a reconciliation fallback.
See Sandbox Testing to trigger callbacks in staging.
Last modified on August 7, 2026