Skip to content

SMS Delivery Report (DLR): Statuses and Codes

What an SMS delivery report (DLR) shows: DELIVRD, UNDELIV, EXPIRED, REJECTD and other statuses, the DLR format, error codes and how to read them.

Updated 20 October 2026

An SMS delivery report (DLR) tells you the final state of a message: DELIVRD (reached the handset), UNDELIV (failed), EXPIRED (validity period ran out), REJECTD (refused by the network), DELETED, UNKNOWN, or ACCEPTD and ENROUTE as intermediate states. The status comes with an error code that explains failures, but error codes are specific to each operator or platform.

How a DLR reaches you

Over SMPP, you request a receipt by setting the registered_delivery field in submit_sm (value 1 asks for a receipt on success and failure, value 2 only on failure). The supplier answers with submit_sm_resp and a message ID, which only means the message was accepted, not delivered. Later the receipt arrives as a deliver_sm with the esm_class marking it as a delivery receipt. Over HTTP APIs, the same information is pushed to your webhook. The two interfaces are compared in SMPP vs HTTP API for A2P SMS.

The SMPP 3.4 specification suggests a text format for the receipt, which most platforms follow:

id:1234567890 sub:001 dlvrd:001 submit date:2610201015 done date:2610201015 stat:DELIVRD err:000 text:Your code is

The id matches the message ID from submit_sm_resp. Dates are usually YYMMDDhhmm. Many platforms also send the same data in the receipted_message_id and message_state optional parameters.

Status values

StatusMeaningFinal?
DELIVRDDelivered to the handsetYes
UNDELIVCould not be delivered (invalid number, absent subscriber, barred, blocked)Yes
EXPIREDValidity period ended before delivery, often because the phone was off or out of coverageYes
REJECTDRejected by the network or an SMS firewall, often for sender ID or content reasonsYes
DELETEDDeleted from the SMSC before deliveryYes
UNKNOWNFinal state not known or not reportedTreat as failed until proven otherwise
ACCEPTDAccepted by the SMSC on behalf of the subscriber, no handset confirmationIntermediate
ENROUTEIn transit, delivery still being attemptedIntermediate

Some platforms send intermediate receipts and then a final one. Your system should update the message state each time and treat only the final state as the result.

Error codes

The err field carries a three-digit code, usually 000 on success. On failures, its meaning depends on the operator and on each platform in the chain, so there is no universal list. Common categories behind the codes are: unknown or unallocated subscriber, absent subscriber, handset memory full, call barred, network failure, and blocked by spam filter or firewall. Ask each supplier for its error code table and map it to your own categories. Do not confuse DLR error codes with SMPP command_status codes returned at submission: those are covered in common SMPP error codes.

Reading DLRs correctly

  • Missing DLRs are not failures by default. Some destinations or routes do not return receipts. Know which ones before you build alerts.
  • Timing matters. An EXPIRED status can arrive hours or days later, depending on the validity period you set. A short validity period suits OTP, where a late code is useless.
  • Concatenated messages may produce one receipt per part. Count a long message as delivered only when all parts are. See long concatenated SMS.
  • Too good to be true is a signal. A route with 100% DELIVRD and instant receipts may be sending fake DLRs.

Using DLRs to manage routes

Aggregate statuses per country, per network and per route each hour. A rise in UNDELIV or REJECTD on one network often means a firewall change or a sender ID problem; a rise in EXPIRED can mean congestion. This is the base of delivery monitoring, explained in SMS delivery rate and latency. When a route degrades, a backup route lets you move traffic quickly.

VoIPMatcher sources A2P SMS routes with delivery reports from its carriers. Request an SMS route and tell us which destinations need full DLR support.

Frequently asked questions

What does DLR mean in SMS?

DLR stands for delivery report, also called delivery receipt. It is the status message sent back after a network tries to deliver an SMS, telling the sender whether the message reached the handset, failed, expired or was rejected. A2P platforms pass it back to the sender over SMPP or to a webhook.

How do I turn on SMS delivery reports on my phone?

On most Android messaging apps, delivery reports are an option in the app's SMS settings, often under advanced settings. iPhone does not offer delivery reports for regular SMS. Phone delivery reports are separate from the A2P DLRs that businesses receive from their SMS provider, which are requested when each message is submitted.

What is an SMSC DLR?

An SMSC DLR is the delivery receipt generated by the operator's Short Message Service Centre after it tries to deliver the message. It is the only report that reflects what happened on the network. Receipts created by intermediate platforms without operator confirmation are not real SMSC DLRs and can hide undelivered traffic.

Why do I get no delivery report for some SMS?

Some destinations, networks and routes do not return receipts at all, and some only return them for failures. A missing DLR is therefore not proof that a message failed. Find out from your supplier which destinations have full DLR support, report missing receipts separately from failures, and confirm with handset tests.

How long does a delivery report take?

On good routes a DELIVRD report usually follows within seconds of delivery. Failure statuses can take much longer: an EXPIRED report only arrives when the validity period ends, which can be hours or days later. Reports that always arrive within a second of submission, even for failures, suggest they are generated rather than real.

Need a route?

Send the destination, route type and target rate. We reply with what we can deliver.

More guides

All guides
A2P SMS Voice OTP: How Voice Verification Calls Work What voice OTP is, how a text-to-speech verification call works, voice OTP vs SMS OTP, caller ID, cost and how to prevent fraud. A2P SMS SMPP Client and Server Tools for Testing Open-source SMPP client libraries, servers and simulators for testing, and a step-by-step method to test an SMPP connection. A2P SMS How to Test an SMS Route: A2P SMS Testing Checklist How to test an SMS route or SMS gateway before sending traffic: handset tests per network, sender ID, latency, DLR accuracy, load tests and pilots. A2P SMS SMS OTP Best Practices: Length, Expiry and Delivery SMS OTP best practices for fast, secure delivery: route choice, sender ID, message format, code length and expiry, SMS pumping protection and fallback. A2P SMS VoIP Number Lookup: How Line Type Detection Works How VoIP number lookup and line type detection work, what each line type means, and how apps use them to stop fake sign-ups and SMS fraud. A2P SMS HLR vs VLR: What Is the Difference in GSM? HLR vs VLR explained: what each mobile network register stores, how they work together for calls, SMS and roaming, and what replaced them in 4G and 5G. A2P SMS Transactional vs Promotional SMS: Key Differences Transactional vs promotional SMS compared: what each type means, consent, opt-out, sending hours, registration rules and why the type changes routing. A2P SMS SMPP Error Codes: Full List and What They Mean SMPP error codes explained: common SMPP 3.4 command_status values such as 0x0B, 0x45 and 0x58, their causes, and which to retry or treat as permanent.