SMS Delivery Reports: DLR, Status Tracking & Webhooks
An SMS delivery report (DLR) is a status signal from the carrier network confirming what happened to a message after it was submitted - delivered, failed, rejected or another outcome - returned to the sender through the API or a webhook. It answers "did my SMS actually reach the recipient?" at the network level, from both a business reporting angle and a developer integration angle.
This page covers how delivery reporting actually works, the status categories involved, common failure causes, and how to calculate a meaningful delivery rate - without overstating what a delivery report can tell you.
What Is DLR?
DLR stands for Delivery Receipt (also called a delivery report) - the network-level acknowledgment carriers send back confirming what happened to a specific SMS after it left the gateway. It's the mechanism behind every "delivered" or "failed" status a business or developer sees.
SMS Sent vs Delivered
Sent means the message was handed off to the carrier network - it says nothing about whether it actually reached the phone. Delivered means the carrier confirmed the message reached the recipient's device. Treating "sent" as success is a common mistake - the delivery report, not the initial send confirmation, is what tells you the real outcome.
How SMS Delivery Reports Work
SMS SubmittedSMS GatewayCarrier/NetworkRecipient
Delivery ResultDLR / StatusAPI / WebhookApplication / Dashboard
The message ID returned at send time is what correlates a status event back to the original message - your application (or dashboard) matches on that ID rather than tracking messages by content or recipient alone.
SMS Delivery Status Categories
Status names can vary between providers - these are the categories most commonly used across the industry:
| Status | Meaning |
|---|---|
| Submitted | The API accepted the message for processing. |
| Queued | Waiting to be sent, often as part of batch processing. |
| Sent | Handed off to the carrier network. |
| Delivered | The carrier confirmed the message reached the recipient's device. |
| Failed | Could not be delivered - the report carries a reason. |
| Rejected | Rejected before sending, e.g. an invalid number or template mismatch. |
| Expired | The message wasn't delivered within the carrier's validity window and was discarded. |
Delivery Report API & DLR Webhooks
Configure a webhook URL to receive delivery status events as they happen, correlated to the message ID returned when you sent the message:
{
"message_id": "sms_7ac21f",
"channel": "sms",
"status": "delivered",
"timestamp": "2026-09-23T10:42:00Z"
}Failed SMS Troubleshooting
A failed or rejected status generally traces back to one of a few causes:
Carrier/Network Issues
A temporary carrier-side problem or network congestion preventing delivery.
Invalid Recipient
The number is incorrectly formatted, inactive, or doesn't exist.
Expired Message
The message wasn't delivered within the validity window the carrier allows.
Sender/Template/Compliance Issues
A DLT template mismatch, unregistered sender ID, or content that fails compliance checks.
DLR vs delivery guarantee: a delivery report is a network/provider status signal - it confirms what the carrier reported back, not an absolute guarantee of delivery in every edge case, and it never confirms that a person actually read the message.
Need Better Visibility Into SMS Delivery?
Talk to our team about delivery reporting, webhooks and campaign-level analytics.
SMS Analytics & Delivery Rate Calculation
Delivery Rate
Delivered Messages ÷ Submitted Messages × 100
The exact denominator can vary by reporting methodology - some providers calculate against messages sent rather than submitted, so confirm the basis before comparing figures across providers or campaigns.
Monitoring Large Campaigns
For high-volume sends, aggregate delivery reports across the whole campaign rather than checking messages individually - a rising failure rate on one segment (say, one carrier or one number range) is a pattern you'd otherwise miss. See SMS Blast API for how large campaigns are structured, and Transactional SMS API for delivery tracking on triggered, one-to-one messages.
SMS API Integration
The full loop from send to analytics runs through a consistent chain:
API Request
Your application submits the message.
Message ID
Returned immediately to correlate later status.
SMS Submission
Queued and sent through the gateway.
DLR Callback
Carrier status flows back through the webhook.
Webhook Processor
Your backend receives and stores the event.
Analytics
Aggregated into delivery-rate and failure reporting.
See SMS API for the full REST integration this reporting loop runs on.
SMS Delivery Reports FAQs
What is an SMS delivery report?
An SMS delivery report (DLR) is a status signal from the carrier network confirming what happened to a specific message after it was sent - such as delivered, failed or rejected - returned to the sender through the API or a webhook.
What does DLR stand for?
DLR stands for Delivery Receipt (sometimes called a delivery report) - the network-level acknowledgment that tells a sender what happened to a message after submission.
What's the difference between SMS sent and SMS delivered?
"Sent" means the message was handed off to the carrier network. "Delivered" means the carrier confirmed it actually reached the recipient's device - a message can be sent without ever being confirmed delivered.
Does a delivery report mean the person read the SMS?
No. A delivery report is a network/provider status signal confirming the message reached the device - it does not confirm the recipient opened or read it, since SMS has no read-receipt mechanism.
What are the common SMS delivery statuses?
Common categories include submitted, queued, sent, delivered, failed, rejected and expired - though exact status names can vary between providers, so always check your specific provider's status definitions.
How do I track SMS delivery status via API?
Each message returns a message ID at send time; delivery, failed or other status events for that ID are then sent to your configured webhook in real time, or available through the dashboard's delivery reports.
What is an SMS DLR webhook?
It's a URL your application exposes to receive delivery status updates as they happen, instead of repeatedly polling the API to check on a message's outcome.
Why did my SMS fail to deliver?
Common causes include carrier/network issues, an invalid or inactive recipient number, the message expiring before delivery, or a sender ID/template/compliance mismatch - see the failure-cause breakdown on this page.
How do I calculate SMS delivery rate?
Divide delivered messages by submitted messages and multiply by 100. The exact denominator can vary by reporting methodology - some providers calculate against messages sent rather than submitted, so confirm which basis your reports use before comparing numbers across providers.
Can delivery reports be used for large campaign monitoring?
Yes, aggregating delivery reports across a campaign shows overall delivery rate and surfaces failure patterns (like a spike in a specific failure cause) that a single message's status wouldn't reveal.
Are delivery report status names the same across every SMS provider?
No. While the underlying network-level concepts are similar, exact status naming and the specific categories reported can vary between providers - don't assume every platform uses identical terminology.
Does a delivery report guarantee the message reached the person, not just the device?
It confirms the message reached the recipient's device/number at the network level - it isn't a guarantee about the person themselves seeing or reading it.
How do delivery reports relate to SMS Blast campaigns?
For high-volume sends, delivery reports are what you monitor to see how a campaign is actually performing in real time, not just what was submitted - see SMS Blast API for how large campaigns are structured.
How do delivery reports relate to transactional SMS?
Transactional messages (like OTPs and order alerts) rely on delivery status just as much as bulk sends, often with tighter application-level handling since a failed OTP needs a fast fallback decision - see Transactional SMS API.
Can I get delivery reports through the SMS API directly?
Yes, delivery reports are available both through webhook events tied to your message ID and through the dashboard/reporting API for a campaign or date range - see SMS API for the broader integration.

Ready to unify your business communication?
Most businesses are live on their own branded panel within days, not months - talk to our team today and see how fast you can start sending.
