ShiprocketAPI

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 like from, to, page, per_page.

  • POST /v1/external/ndr/{awb}/action — take an action on a specific NDR. The body's action field is required and accepts:

    • re-attempt — ask the courier to try delivery again. Send deferred_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 updated phone (a 10-digit Indian mobile number starting with 6, 7, 8 or 9) and address1 / address2. The pincode cannot be changed.
    • fake-attempt — report that the courier's delivery attempt did not really happen. Send deferred_date and remarks, plus proof as proof_image (a public JPEG or PNG URL) or proof_audio (a public audio URL, up to 5 MB), or both.
    • return — send the shipment back to origin (RTO) instead of trying delivery again.

    comments is optional for every action and is saved with the NDR history.

Re-attempt payload:

json
{
  "action": "re-attempt",
  "comments": "Customer asked for delivery on the next working day",
  "phone": "9876543210",
  "deferred_date": "2026-09-08"
}

Return-to-origin payload:

json
{
  "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.