// Deliverability

SMS deliverability: sender IDs, carrier filtering, and routing

The hardest part of SMS verification is not sending the message β€” it is making sure it arrives. Delivery is decided by carriers, sender-ID rules, message content, and routing, and it varies wildly by country. This guide explains why OTPs go missing and the concrete levers that fix it.

Why SMS is best-effort

There is no guaranteed delivery in SMS. Between your API call and a handset sit aggregators, international gateways, and the destination carrier β€” any of which can delay, filter, or silently drop a message. Verification traffic is scrutinized especially hard because carriers fight fraud and spam on exactly these routes.

The practical consequence: you must design for partial failure (resend, fallback) and actively monitor delivery, rather than assuming a sent message is a delivered message.

  • Delivery depends on the destination carrier's filtering policy.
  • International routes add gateways, each a possible failure point.
  • Application (A2P) traffic is filtered harder than person-to-person.

Sender IDs and why they matter

The sender ID is what the recipient sees as the "from" β€” a long code, a short code, or an alphanumeric name. Countries differ sharply: some require pre-registered alphanumeric sender IDs, some mandate short codes for A2P, and some rewrite or block unregistered senders. Using the right, registered sender ID for each country is one of the biggest delivery levers.

  • Alphanumeric sender IDs: branded text as the sender; pre-registration required in many countries.
  • Short codes: highest throughput and trust for A2P, but need carrier approval.
  • Long codes: fine for many markets, but need 10DLC registration in the US.
  • Using an unregistered sender in a strict country is a common silent-failure cause.

Carrier filtering and message content

Carriers score message content. URLs, especially shortened links, public URL shorteners, and unusual formatting are classic triggers for filtering. OTP messages should be minimal and consistent: your app name, the code, and nothing else. Consistency also helps because some carriers build reputation on a sender+template pairing over time.

  • Avoid links in OTP messages; shortened links are a strong filter trigger.
  • Keep templates consistent β€” erratic content looks like spam.
  • Do not include marketing in a transactional OTP message.
  • Register message templates where the country requires it.
!

If delivery suddenly drops in one country, suspect a content or sender-ID rule change there before anything in your code.

Per-country routing

A route is the path your message takes to a destination carrier, and route quality varies by provider and country. Cheap grey routes can look fine in testing and then silently degrade. For verification, prefer direct or high-quality routes to your important countries, even at higher cost, and let your provider know the traffic is OTP so they route it appropriately.

  • Prefer direct/premium routes for verification in key markets.
  • Beware grey routes: low price, unstable delivery, poor DLRs.
  • Some providers let you tag traffic as OTP for better routing.
  • Test each important country separately β€” averages hide country-level failure.

Monitor delivery and act on it

You cannot fix what you do not measure. Collect delivery receipts (DLRs) and track delivery rate and latency per country and per carrier, then alert on regressions. Combine that with fallback logic so a delivery dip degrades gracefully instead of blocking signups.

  1. 1

    Collect DLRs

    Enable delivery receipts and store them against each send so you know delivered vs failed, not just sent.

  2. 2

    Segment by country and carrier

    Track delivery rate and latency per destination β€” the average will hide a single failing market.

  3. 3

    Alert on regressions

    Trigger an alert when a country's delivery rate or latency degrades beyond a threshold.

  4. 4

    Fail over

    Route around a degraded provider or escalate to a fallback channel automatically.

Frequently asked questions

Why are my OTP messages not being delivered?+

The usual causes are an unregistered or wrong sender ID for the country, message content that trips carrier filtering (especially links), or a low-quality route. Start by checking delivery receipts per country, then verify sender-ID registration and remove any URLs from the message.

Should OTP messages contain a link?+

Avoid it. Links β€” especially shortened ones β€” are a leading trigger for carrier spam filtering and can leak the code. Keep OTP messages to your app name and the code only for the best delivery and security.

What is a delivery receipt (DLR)?+

A DLR is a status callback from the carrier telling you whether a message was delivered, failed, or is still pending. Collecting and storing DLRs is essential β€” it's the only way to distinguish a message that was sent from one that actually arrived.

Why does delivery vary so much by country?+

Each country has its own sender-ID rules, A2P regulations, carrier filtering policies, and route quality. A provider and configuration that delivers perfectly in one country can fail in another, which is why you must test and monitor each key destination separately.

EdgeGigs

Fighting carrier filtering and low delivery rates?

A vetted SMS specialist can audit your routes, register sender IDs, and set up per-country routing so your OTPs actually arrive.

Find a developer on EdgeGigs β†’