Skip to content

SMS delivery reports: statuses, webhooks and refunds

A delivery report tells you what happened to each message after you sent it. Every message carries one of five statuses: QUEUED, SENT, DELIVERED, UNDELIVERED or FAILED. You can see them in the dashboard, read them through the API, or receive a signed webhook at your own URL when a message is delivered or fails.

Updated

What does each SMS delivery status mean?

QUEUED means the message is accepted and waiting to go out. SENT means it has been handed to the mobile network. DELIVERED means the network reported it reached the phone. UNDELIVERED means the network reported it did not. FAILED means the message did not go through. Judge a send by the final status, not the first.

  • QUEUED: accepted, waiting to be sent
  • SENT: handed to the mobile network
  • DELIVERED: reported as reaching the phone
  • UNDELIVERED: reported as not reaching the phone
  • FAILED: did not go through; credits are refunded

Where can I see SMS delivery reports?

Every message status is visible in the dashboard and through the API. An API send returns 202 with a batch id and the cost, and the messages then go out in the background. Store the batch id with your own record, such as an order or a campaign, so you can match results to it later.

How do SMS delivery webhooks work?

Set a callback URL and the platform posts a webhook to it when a message is delivered or fails. Each webhook is signed with HMAC-SHA256 using a secret that belongs to your account, so your server can check it is genuine. A webhook that does not get through is tried up to 3 times.

Verify the signature against your account secret before you act on the payload. Because a webhook can be retried, make your handler safe to receive the same event twice without counting it twice.

Am I charged for SMS that fail?

No. Credits for a failed message are refunded. When you send, one segment to one recipient uses one credit, and if that message ends as FAILED, the credit comes back to your account. That way a FAILED status in your report does not also appear as a cost when you reconcile a campaign.

What should I do about undelivered SMS?

Look for patterns before you resend. A number that keeps coming back UNDELIVERED is often wrong, inactive or switched off for a long period. Correct typing errors, confirm each entry is a 10-digit Nepali mobile number, and remove numbers that fail on every send, so later reports reflect the customers you can actually reach.

Questions people also ask

Does the API tell me the cost before delivery?

Yes. A send request returns 202 with a batch id and the cost of the send. Delivery then happens in the background, and each message's status updates as results come in.

Can the same webhook arrive more than once?

It can, because a webhook is tried up to 3 times. Design your handler to accept a repeated event without double-counting it.

How do I stop a retried API request from sending twice?

Send an idempotency key with the request. A retry with the same key is sent exactly once, so a network timeout on your side does not produce duplicate messages.

Send your first message

Tell us what you plan to send. We set up your account, KYC and sender ID with you. Approval adds 10 free SMS credits for organizations, 5 for personal accounts.

Get started