NDR (Non-Delivery Report) workflow
An NDR is raised when a courier attempts delivery and cannot complete it (buyer unavailable, address incorrect, buyer refused, etc.). Shiprocket exposes NDR management via two endpoints:
-
GET /v1/external/ndr/all— list all current NDRs for your account, with filters likefrom,to,page,per_page. -
POST /v1/external/ndr/{awb}/action— take an action on a specific NDR. The body'sactionfield is required and accepts:re-attempt— ask the courier to try delivery again. Senddeferred_date, the preferred redelivery date (YYYY-MM-DD): it must be after today, within the NDR window, and not a Sunday. You can also send an updatedphone(a 10-digit Indian mobile number starting with 6, 7, 8 or 9) andaddress1/address2. The pincode cannot be changed.fake-attempt— report that the courier's delivery attempt did not really happen. Senddeferred_dateandremarks, plus proof asproof_image(a public JPEG or PNG URL) orproof_audio(a public audio URL, up to 5 MB), or both.return— send the shipment back to origin (RTO) instead of trying delivery again.
commentsis optional for every action and is saved with the NDR history.
Re-attempt payload:
{
"action": "re-attempt",
"comments": "Customer asked for delivery on the next working day",
"phone": "9876543210",
"deferred_date": "2026-09-08"
}
Return-to-origin payload:
{
"action": "return",
"comments": "Customer no longer wants the product"
}
Respond within the SLA window shown in the dashboard (typically 24–48h) — beyond it, the shipment auto-RTOs.
NDR webhook
Shiprocket pushes NDR events to your configured webhook URL. Set the webhook up on the dashboard — see Webhooks for the steps. The API reference has no endpoint for managing webhooks. The payload includes awb, current_status, attempts, and reason.