---
title: "OTP Not Received? Causes, Diagnostic Table and Fixes"
description: "OTP not received? Find the cause fast: number format, DND, sender ID filtering, roaming, delays and pumping controls, with a diagnostic table and fixes."
canonical: "https://omnichannels.ai/blog/otp-not-received-troubleshooting/"
language: "en"
updated: "2026-11-03"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "sms"
primaryQuery: "OTP not received"
keywords: ["otp not received", "sms otp not delivered", "why am i not receiving otp", "otp delay", "otp delivery failure", "otp resend", "otp fallback"]
published: "2026-11-03"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 10
answer: "An OTP is usually not received because of one of seven things: a number that is not in E.164 format or is wrong, a handset problem (no signal, roaming, full inbox, blocked sender), a do-not-disturb setting, operator filtering of an unregistered or unrecognised sender ID, a delayed or failed route, a code that expired before it arrived, or fraud controls blocking the request. Read the delivery report first; it usually names the cause."
takeaways: ["Start with the delivery status of the message: DELIVERED with no code on the handset points to the device, FAILED or REJECTED points to the number, sender ID or route, and no status at all points to your own system.", "Numbers should be stored in E.164 format, which has a plus sign, a country code and at most 15 digits in total. A leading zero or a missing country code is a frequent cause of failure that looks like a network problem.", "A sender ID that is not registered where the market requires it, or that an operator does not recognise, can be filtered. Check the sender ID rules for the destination country before launch.", "NIST SP 800-63-4 says an out-of-band code is invalid unless used within 10 minutes. Design resend and expiry so that a slow message does not produce an expired code.", "Fraud controls can block real users by mistake. Track the conversion rate from OTP request to successful verification per country and per operator, and add a second channel such as WhatsApp or voice as a fallback."]
faq: 
  - q: "Why am I not receiving OTP codes on my phone?"
    a: "The usual causes are no signal or roaming restrictions, a full inbox, a blocked or filtered sender, do-not-disturb settings, a mistyped number, or a delayed message. Restart the phone, check the spam or blocked folder, confirm the number on the account, and wait for the resend timer before asking for a new code."
  - q: "How long should an OTP take to arrive?"
    a: "Most arrive within seconds, but delivery depends on the operator and route and is not guaranteed. Do not promise a specific time. Show a resend timer, keep the code valid long enough for slow delivery, and offer another channel if the first message does not arrive."
  - q: "Why do some users get the OTP and others on the same network do not?"
    a: "The network is rarely the whole story. Differences in number format, handset settings, blocked senders, roaming and ported numbers can split users on one operator. Segment your delivery reports by operator, country and error code to see which group is failing."
  - q: "Can an unregistered sender ID stop OTP delivery?"
    a: "Yes. In markets where operators or regulators require sender ID registration, an unregistered ID can be blocked or replaced. Check the destination country's rules, register ahead of launch, and test on every major operator. Our team can prepare and file the registration with you."
  - q: "What should I do when the OTP is delivered but the user says it never arrived?"
    a: "A DELIVERED status means the operator reported handing the message to the handset or its network, so look at the device: blocked sender, filtered folder, notification settings, or a second SIM. Ask the user to check the spam folder, then offer a resend by another channel."
  - q: "Can SMS pumping protection block genuine users?"
    a: "It can. Rate limits and country or prefix blocks stop fake traffic, but set too tightly they also reject real people. Review blocked requests regularly, log the reason, and give blocked users a clear route to a second channel or to support."
sources: 
  - title: "NIST SP 800-63B-4: Authentication and Authenticator Management"
    url: "https://pages.nist.gov/800-63-4/sp800-63b.html"
  - title: "ITU-T Recommendation E.164: The international public telecommunication numbering plan"
    url: "https://www.itu.int/rec/T-REC-E.164"
  - title: "3GPP TS 23.038: Alphabets and language-specific information"
    url: "https://www.3gpp.org/dynareport/23038.htm"
  - title: "GSMA: Interworking Security"
    url: "https://www.gsma.com/solutions-and-impact/technologies/security/cybersecurity-knowledge-base/interworking-security/"
---

# OTP Not Received? Causes, Diagnostic Table and Fixes

Canonical: https://omnichannels.ai/blog/otp-not-received-troubleshooting/
Language: en
Publisher: OmniChannels.ai by BroadNet Technologies

This guide is for product, engineering and support teams whose users say "I did not get the code", and for the users themselves. It gives a diagnostic table that links each symptom to a cause, a check and a fix, then covers delivery reports, fallback channels and the metric that tells you whether the problem is getting better. For how to send OTPs well in the first place, read our [OTP authentication messages guide](/blog/otp-authentication-messages-guide/).

## Why is my OTP not received?

An OTP goes missing at one of five points: your system, the number, the route, the operator or the handset. Work from your side outward, because each step leaves a different trace in the delivery report.

1. **Your system** never sent it, or sent it twice and the first code was overwritten.
2. **The number** was wrong, badly formatted or not a mobile line.
3. **The route** rejected, delayed or dropped the message.
4. **The operator** filtered it because of the sender ID, content or traffic pattern.
5. **The handset** could not receive or show it: no signal, roaming, full storage, blocked sender or do-not-disturb.

Most "OTP not received" tickets turn out to be points 2 and 5, which is why the first check is always the delivery status.

## What does the delivery status tell you?

The final status narrows the search to one of the five points before you test anything else. A delivery report (DLR) is the receipt the operator network returns for each message; see [delivery receipt](/glossary/delivery-receipt/) and our guide to [message delivery status](/blog/message-delivery-status-explained/).

| Status you see | Where to look first |
|---|---|
| No record at all | Your own application: the send call failed, was rate limited or was never made |
| SUBMITTED or SENT, nothing after | The route or operator, a possible delay; wait for the report window, then check the route |
| DELIVERED | The handset: blocked sender, filtered folder, notification settings, second SIM |
| FAILED or REJECTED | The number, the sender ID or the content; read the error code |

Statuses on our platform are SUBMITTED, SENT, DELIVERED, READ, FAILED and REJECTED, delivered to your system through a [webhook](/developers/webhooks/) in one normalised format. Paste a raw report into the [SMS delivery report decoder](/tools/sms-delivery-report-decoder/) to translate an error code. Some networks never return a final report, so treat a missing DELIVERED as unknown, not as failed.

## OTP not received: diagnostic table

Use this table as a checklist. Each row is a symptom, its likely cause, the check to run and the fix.

| Symptom | Likely cause | Check | Fix |
|---|---|---|---|
| FAILED immediately, invalid number error | Wrong number format | Compare the stored number with E.164 | Normalise to E.164 at sign-up; validate with a number formatter |
| Works for some countries, fails for others | Leading zero kept after the country code, or national format stored | Look at the failing numbers side by side | Strip the trunk prefix, add the country code |
| DELIVERED, user sees nothing | Blocked sender or filtered folder on the handset | Ask the user to check blocked and spam lists | Unblock; use a consistent sender ID |
| REJECTED or filtered on one operator only | Sender ID not registered or not recognised there | Check the destination country's sender ID rules | Register the sender ID; test on every operator |
| Message arrives minutes late | Congestion, a slow route or a handset out of coverage | Compare submit time with delivery time per operator | Resend rules, longer validity, fallback channel |
| Code arrives but is "expired" | Validity shorter than real delivery time | Compare delivery latency with code lifetime | Lengthen validity; invalidate older codes on resend |
| User abroad receives nothing | Roaming not enabled, or the visited network restricts messages | Ask whether data roaming and SMS roaming are on | Offer WhatsApp or voice OTP as an alternative |
| Real users blocked after a rate-limit rule | Fraud controls too strict | Review blocked-request logs by country and prefix | Loosen the rule for verified patterns; add an appeal route |
| Number recently moved to another operator | Ported number routed to the old network | Run a number lookup | Use lookup data before sending |
| Same user fails only on one SIM | Dual-SIM phone receiving on the other SIM | Ask which number is the default for SMS | Confirm the number on the account |
| Emoji or special characters in the template, odd characters shown | Encoding change | Run the template through the character counter | Keep OTP text in plain GSM-7 |

Two items deserve a closer look.

### Is the number in E.164 format?

E.164 is the international numbering standard: a plus sign, the country code and the subscriber number, with at most 15 digits in total (ITU-T E.164). A UK mobile saved as `07700 900123` is a national format. In E.164 it becomes `+447700900123`, with the leading zero dropped. Format at the point of entry, store one clean version, and keep the raw input only for display. Our [phone number formatter](/tools/phone-number-formatter/) shows the conversion, and the [E.164 glossary entry](/glossary/e164/) gives the definition.

### Could the sender ID be the problem?

Yes, when the market registers or filters sender IDs. An alphanumeric sender ID, the brand name shown instead of a number, can be blocked or rewritten if the destination requires registration and the ID is not on the operator's list. Rules differ by country, so check the [sender ID checker](/tools/sender-id-checker/), and read our guide to [sender ID types](/blog/sms-sender-id-types-explained/). If you want us to prepare and file the registration with you, see [registrations](/services/registrations/); approval decisions stay with the operators and regulators.

## Why does the OTP arrive late or after it has expired?

Delay usually comes from the route or the handset, and expiry turns a delay into a failure. NIST SP 800-63B-4 says an out-of-band authentication is invalid unless completed within 10 minutes, and that a code may be used only once. That is a ceiling for high-assurance use, not a target. Pick a lifetime that covers normal delivery variance without leaving the code open longer than you need.

Practical rules:

- **Invalidate the old code when a new one is issued**, and tell the user the newest code is the only one that works.
- **Show a resend timer** so users do not tap repeatedly and flood their inbox with codes that conflict.
- **Limit attempts** and requests per number to protect against guessing and abuse.
- **Log send time, delivery time and verification time** so you can see real latency, not guess at it.

## What can users do when the code does not arrive?

A short checklist for end users, which you can place on the verification screen or in help content:

1. Check the number shown on screen. Is it the right one, with the right country code?
2. Check signal. Move to a place with coverage, or turn flight mode on and off.
3. Look in the spam, blocked or "unknown senders" folder of the messages app.
4. Make sure do-not-disturb or a call-and-message filter is not hiding the message.
5. Free up storage if the inbox is full.
6. If you are abroad, turn on roaming for calls and messages, or use a different method.
7. Wait for the resend timer, then request a new code once. Repeated requests can trigger limits.
8. If it still fails, choose another method such as WhatsApp or a voice call, or contact support.

## Can SMS pumping protection block real users?

Yes, and the cost is invisible unless you measure it. SMS pumping, also called artificial traffic inflation, is fraud in which attackers trigger OTP messages to numbers they profit from. Controls such as rate limits, country allow-lists, prefix blocks and bot checks stop it, but a rule that is too broad rejects genuine requests, for example a new customer in a country you do not usually serve. Our guide to [SMS pumping fraud](/blog/sms-pumping-fraud-prevention/) covers the attack; for this problem the key points are:

- **Log why each request was blocked**, with country, prefix and rule name.
- **Compare blocked requests with later successful sign-ups** from the same user or device. If users blocked at step one succeed on a second try, your rule is hurting real people.
- **Give blocked users a path**, not a dead end: a second channel or a support link.
- **Review rules after each campaign or launch**, because traffic from new markets looks unusual at first.

## How do you use delivery reports to find the pattern?

Cut your delivery data by country, operator, sender ID, hour and error code, and look for one segment that fails far more than the rest. A blended average hides weak spots. Our guide to [improving SMS delivery rates](/blog/sms-not-delivered-improve-delivery-rate/) explains the method in more detail, and an [HLR lookup](/blog/hlr-lookup-number-validation/) before sending can flag numbers that are inactive or that have moved network.

| Cut | What a spike suggests |
|---|---|
| One operator | Filtering of your sender ID or content, or a route problem on that network |
| One country | Registration missing, a regulatory rule or a pumping rule too strict |
| One hour | Congestion or a deployment on your side |
| One error code | The specific cause named in the report |
| One template | Content or encoding that triggers filters |

## What fallback should you offer when SMS fails?

Offer a second channel after a short, fixed wait, and keep it simple for the user. Common options are a resend by SMS, a WhatsApp authentication template, or a voice call that reads the code aloud.

| Fallback | Works well when | Watch out for |
|---|---|---|
| Resend by SMS | The first message was delayed or deleted | Repeated resends can look like abuse |
| WhatsApp OTP | The user has WhatsApp and has opted in | Authentication is a Meta template category with its own rules |
| Voice OTP | SMS is blocked or the user prefers a call | Slower to use; contact sales for voice pricing |

Our comparison of [WhatsApp OTP and SMS OTP](/blog/whatsapp-otp-vs-sms-otp/), the [voice OTP guide](/blog/voice-otp-guide/) and the guide to [channel fallback strategy](/blog/channel-fallback-strategy/) show how to order the steps. A WhatsApp OTP must be sent as a template in Meta's Authentication category, so build it with the authentication template format rather than free text.

## What should you monitor?

Track the OTP conversion rate: the share of OTP requests that end in a successful verification. The formula is:

`OTP conversion rate = successful verifications / OTP requests`

Compute it per country, per operator, per channel and per sender ID, and set an alert when any segment drops well below its usual level. Pair it with median delivery latency and the share of requests blocked by fraud rules. The three together tell you whether the problem is reach, speed or your own controls.

## What are the common mistakes?

- **Blaming the operator first.** Many failures are formatting or handset issues that the delivery report would have shown.
- **Short OTP texts with extras.** Emoji and promotional text can change the encoding and invite filtering. A plain message such as `Your code is 482913. Valid for 10 minutes. Do not share it.` stays within one GSM-7 message (59 characters).
- **No resend limit.** It invites abuse and confuses users with several valid codes.
- **A single channel.** If SMS is the only option, every SMS problem becomes a sign-up problem.
- **No measurement.** Without a conversion rate by segment, you find out about failures from support tickets.

## How OmniChannels.ai helps

OmniChannels.ai, powered by BroadNet, sends OTPs over direct operator connectivity and returns delivery statuses to your system through webhooks in one format. You can order a fallback such as WhatsApp, then SMS or voice, per use case, and use HLR and number lookup before sending. Our team prepares and files sender ID registration with you. See the [OTP and notifications solution](/solutions/otp-notifications/), read the [webhooks documentation](/developers/webhooks/), or ask for test access through the [developers page](/developers/). For a voice fallback, see [voice call OTP delivery](/channels/voice/).
