Key Takeaways
- On this product the “server” is the control plane that accepts HTTPS, queues jobs, and records DLR — GSM still leaves the Android SIM.
- HTTP 201 on enqueue is not delivered. Drive UX from DLR or a timeout, not from the send call.
- Pending can stick. Timeout unknown. Do not mint a second OTP because a status row is lonely.
- Webhooks are not on Free. Signed callbacks beat polling your own DLR endpoint into the ground.
- Priced by devices and SMS send volume. You use your own phone and operator SMS credit. Failed submits still burn airtime even when DLR never resolves.
What “server DLR” means
Cornerstone: Android SMS gateway server. The server is the control plane in front of your SIMs — cloud relay or local mode. Product DLR: delivery reports. Limits spoke: DLR limits. This in-depth page is how those rows should drive software, not a second marketing pass.
A green enqueue is a receipt for JSON. A delivered DLR is a rumor from an operator you do not control. Design for both.
States you can actually use
Queued (we have the job). Submitted (the Android accepted it). Delivered (operator said so). Failed (operator or radio said so). Unknown (timeout). Anything else is a display problem. Confirm live enum names in Developer Center — do not hard-code a blog’s labels into production.
Control plane vs radio vs operator
| Layer | Can claim | Cannot claim |
|---|---|---|
| Your API client | Request accepted or rejected | Handset delivery |
| Control plane | Queued, device mapped, DLR stored | GSM physics |
| Android + SIM | Submit to SMSC | Recipient’s notification shade |
| Operator DLR | Sometimes a final state | A global SLA |
Webhooks, polling, signatures
Paid plans: SMS webhooks. Verify signatures. Idempotent handlers — operators and retries duplicate. Free: poll with backoff. Industry messaging context: GSMA, not a DLR warranty.
Wire DLR without lying to the product
- Read the server cornerstone. Know cloud relay vs local mode before you interpret a status row.
- Map states to product UX. Queued, submitted, delivered, failed, unknown. “Pending” is not success.
- Prefer signed webhooks on paid plans. Free polls with backoff. Do not DDoS GET /messages/{id}.
- Timeout OTP unknown. Show “try again” after your SLO. Do not auto-fire a second code on a lonely pending.
- Slice DLR by deviceId. On-call should see which phone went mute, not a single green lie.
- Export before retention ends. Free 30 days; Starter 90 days; Professional 1 year; Business 2 years; Developer 90 days.
API: SMS API documentation. OTP UX: OTP verification.
History retention
Free 30 days, Starter 90 days, Professional 1 year, Business 2 years, Developer 90 days. Export what finance or support needs. Retention is not an audit archive we keep forever.
Cost of not knowing
Service pricing is based on device count and total SMS sent through the gateway. You need a working Android phone with a SIM and SMS credit from your mobile operator. Operator message costs are yours—we do not sell carrier SMS balance. Retries you fire because DLR was pending still count. Free canary is 300 SMS lifetime. Paid from $19/month. Device and SMS volume pricing.
Next steps
Map five states, sign webhooks, timeout unknown, export before the plan window closes.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS delivery reports (DLR)Delivery status tracking
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- SMS API documentationLive endpoint reference





