Standardized NDR Reason Codes API
Convert ambiguous courier non-delivery reports into structured reason codes. Trigger instant customer outreach and reduce return to origin (RTO) rates.
The Challenge with Courier NDRs
When a doorstep delivery fails, logistics partners log varied text remarks across different portals and formats. Without a unified classification, e-commerce brands cannot reliably automate customer follow-ups before couriers initiate return-to-origin procedures.
Normalized Reason Code Enums
ClearTrack maps courier event descriptions to strict, predictable reason code enums:
| Reason Code | Category | Description | Automated Action |
|---|---|---|---|
customer_unavailable |
Customer Unavailable | Recipient was not available at the delivery address or did not answer the phone. | Send automated WhatsApp/SMS message to confirm availability for the next attempt. |
address_issue |
Address Issue | Incomplete address, missing landmark, or incorrect pin code. | Request address confirmation link from the customer before RTO is initiated. |
refused |
Customer Refused | Recipient refused the parcel or rejected Cash on Delivery payment. | Alert support team to confirm order cancellation before the shipment returns. |
premises_closed |
Premises Closed | Office, storefront, or residential premises were closed or locked. | Verify operating hours or request an alternate delivery contact number. |
cod_not_ready |
COD Payment Not Ready | Cash on Delivery payment was not ready or doorstep collection failed. | Send digital payment link or inform customer of exact cash required. |
other |
Operational Exception | Courier operational constraint, weather hold, or local restriction. | Monitor for next business day delivery re-attempt. |
cURL Integration Example
curl -s -H "X-API-Key: ct_live_your_api_key" \
"https://api.cleartrackpromise.in/v1/track/delhivery/1000000000001"
Illustrative Response with Delivery Attempts
{
"tracking_number": "IN100000003IN",
"carrier": "indiapost",
"status": "exception",
"delivery_attempts": {
"count": 1,
"attempts": [
{
"at": "2026-10-08T16:20:00.000Z",
"outcome": "failed",
"reason_code": "customer_unavailable",
"reason_text": "Door Closed / Customer Not Available"
}
]
},
"insights": {
"transit_days_elapsed": 2.3,
"hours_since_last_scan": 1.7,
"is_stuck": false,
"is_late_vs_carrier_edd": null,
"delay_days_vs_carrier_edd": null,
"hub_count": 2,
"current_stage": "delivery_attempted",
"requires_attention": true,
"attention_reason": "failed_attempt",
"benchmark": {
"median_transit_days_for_route": null,
"sample_size": null,
"expected_delivery_by": null
}
}
}
For technical field definitions and code samples, see the NDR Codes Documentation, view prepaid lookup plans, and read the Tracking Field Reference.
Frequently Asked Questions
What is an NDR reason code in ClearTrack?
An NDR (Non-Delivery Report) reason code is a standardized enum that categorizes why a delivery attempt was unsuccessful, converting raw courier remarks into actionable machine-readable codes.
How do standardized NDR codes help reduce RTO?
Instead of waiting for manual updates, automated systems can read the specific reason code (such as address_issue or customer_unavailable) and instantly trigger customer communication to resolve the issue before return to origin.
Which courier partners provide NDR data?
ClearTrack standardizes delivery attempt outcomes across all supported logistics partners into the same structured delivery_attempts array.
Are delivery attempt timestamps included?
Yes. Every attempt entry in the delivery_attempts array includes an ISO 8601 timestamp, the outcome flag, and the classified reason code.
Automate NDR Workflows Today
Sign up for a free 14-day trial with 100 test lookups. Reduce RTO with structured non-delivery intelligence.