“Invalid number” in an SMS delivery report means the message could never reach the destination as addressed: the number is badly formatted, was never allocated, has been disconnected, or belongs to a line that cannot receive SMS. Unlike a temporary failure, sending again will not help, so the fix is to correct or remove the number, ideally by checking it with an HLR lookup API before you send.
This guide explains where the status comes from, how it differs from “unknown subscriber” and from temporary errors, and how to stop invalid numbers reaching your send queue in the first place.
What do “invalid number” and “unknown subscriber” actually mean?
Both labels say the same thing from the sender’s point of view: this address is not a working mobile subscription. They come from two different checkpoints, though, and knowing which one fired tells you what went wrong.
- Rejected before sending. Your provider validates the number when you submit the message. If it has the wrong length, contains letters or lacks a country code, the submission is refused. Over SMPP this is the standard
ESME_RINVDSTADRstatus (0x0000000B, “Invalid Dest Addr”) defined in the SMPP 3.4 specification. Over an HTTP API you normally get a validation error in the response. - Rejected by the network. The number looks valid, so the message goes out. Before delivery, the SMS centre asks the recipient’s home network where to send it. If the home network has no record of the number, it answers with the GSM MAP error unknownSubscriber (error code 1 in 3GPP TS 29.002), and the failure comes back in your delivery report (DLR).
Providers then translate these causes into their own labels. Vonage, for example, lists “Illegal Number” as DLR error 9 in its delivery receipt documentation, while Twilio describes error 30005 as meaning “the destination number is unknown and may no longer exist”. Different words, same underlying cause.
What causes an invalid number error?
The common causes fall into five groups.
1. Wrong format (not E.164)
International SMS routing expects numbers in E.164 format: a plus sign, the country code, then the national number, with no spaces or trunk prefix. The ITU’s E.164 recommendation limits an international number to 15 digits. Common mistakes are a missing country code, a national leading zero kept after the country code (+44 07… instead of +44 7…), the international dialling prefix “00” stored in the field, or extra digits pasted from a form.
2. Disconnected numbers
Prepaid SIMs that stop being topped up are eventually deactivated by the operator. Once the subscription is removed from the home network’s register, the number returns “unknown subscriber” until it is reissued. Older lists collect these steadily, which is why a list that delivered well a year ago can fail noticeably today.
3. Ported numbers routed to the old network
When a subscriber moves to another operator and keeps their number, the original network no longer holds the subscription. If a route still treats the number as belonging to the old operator, the lookup can fail. The MAP standard even has a specific diagnostic for this situation, npdbMismatch, alongside the unknown-subscriber error. A mobile number portability (MNP) check resolves the current operator before routing.
4. Landlines and lines without SMS
A fixed-line number is a perfectly valid phone number, but it has no mobile subscription to deliver a text to. Some data-only or machine-to-machine SIMs are also provisioned without SMS. Depending on the route, these come back as invalid, unknown subscriber or “teleservice not provisioned”.
5. Numbers that were never allocated
Some numbers are syntactically correct but sit in ranges no operator has assigned: typos, made-up numbers typed into sign-up forms, or reserved ranges. Ofcom, for instance, reserves 07700 900000 to 900999 for TV and radio drama, so those numbers never belong to a real subscriber.
| Cause | Typical signal | Fix |
|---|---|---|
| Wrong format | Rejected at submission, or invalid destination address | Normalise to E.164 when the number is captured |
| Disconnected | Unknown subscriber in the DLR | Suppress; re-verify only if the customer re-confirms it |
| Ported, wrong route | Unknown subscriber or routing failure | Run an MNP or HLR lookup and route to the current network |
| Landline or no SMS service | Invalid, unknown subscriber or teleservice not provisioned | Check number type; ask for a mobile number |
| Never allocated | Invalid or unknown subscriber | Validate at sign-up and ask the user to correct it |
How do you tell an invalid number from a temporary failure?
The key question is whether the network recognises the subscription. If it does, the problem is usually temporary. If it does not, it is permanent.
| Status | What the network is saying | Permanent or temporary | What to do |
|---|---|---|---|
| Invalid number / unknown subscriber | No such subscription exists | Permanent | Stop sending; fix or remove the number |
| Absent subscriber | Subscription exists, but the handset is off or out of coverage | Temporary | Let the network retry; do not resend immediately |
| Handset memory full | Phone is reachable but has no space for the message | Temporary | Retry later |
| System failure | A network element failed while handling the message | Temporary | Retry with backoff |
| Expired | Retries ran out before the validity period ended | Final, but the cause was temporary | Resend only if the content is still relevant |
Two practical rules help. First, look at the exact error text rather than a generic “failed” or “undelivered” status, because both permanent and temporary causes can end in the same final state. Second, look at the pattern: a number that fails once with a vague error may be a network issue, but a number that returns “unknown subscriber” on several attempts across different days should be treated as invalid.
Also be aware that some providers group causes together. Twilio’s documentation for error 30005, for example, lists a powered-off device as a possible cause alongside a number that no longer exists. When a label is ambiguous, a lookup settles it.
How do you prevent invalid numbers before sending?
Prevention works in two layers: clean formatting when you collect the number, and a live network check before you rely on it.
Normalise at the point of capture
Store every number in E.164. Use a country selector on forms, strip spaces, brackets and dashes, remove a national leading zero, and reject anything longer than 15 digits. Validate on the client for fast feedback and again on the server.
Check the number on the network
An HLR lookup queries the number’s home network in real time without sending anything to the handset. It tells you whether the number is active, which operator serves it and whether it has been ported. With SMS.to you can run it with a single request:
curl -X POST "https://hlr.sms.to/api/v2/lookup" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"number": "+447700900123"}'
If your stored numbers are in national format, add the optional default_prefix parameter with a two-letter country code, and numbers without a country dial code are validated as if they belong to that country. To check a whole list, send a numbers array to the same endpoint: it runs asynchronously and returns a report_id you can fetch later from https://hlr.sms.to/api/v2/reports/{id}. There is also an estimate endpoint, https://hlr.sms.to/api/v2/estimate, so you can see the cost before running a large batch.
The lookup response returns practical fields for validation and routing, including:
reachable: whether the line is active or inactiveported: whether the number has moved to another networkoperator_name, plusmccandmnc: the current or original network and its codesnumber_type: mobile, landline or virtualcountry_iso: the two-letter country codestatus_codeandreason: whether the lookup succeeded or what issue it found
Fields may vary by country or operator, so if your logic depends on a specific field, confirm coverage for your markets first. For port-heavy markets, add an MNP lookup; we cover the trade-offs in our guide to HLR and MNP checks.
What should you do with numbers already marked invalid?
- Suppress, do not delete. Keep the record but flag the number so it is excluded from future sends. Deleting it means it may be re-imported later.
- Stop automatic retries. Retrying a permanent error only adds cost. Make sure your retry logic is driven by the error cause, not just by “not delivered”.
- Ask the user. For sign-ups and one-time passcodes, show a clear “check your number” message and let the user correct it, rather than silently failing.
- Re-check old lists. Numbers are disconnected and reissued all the time. Run a lookup on dormant segments before a campaign rather than trusting last year’s results.
- Watch the rate by source. If one form, partner or import produces most of your invalid numbers, fix the source. If you integrate over SMPP, our SMPP guide explains how DLRs are returned so you can map these errors correctly.
How SMS.to handles invalid numbers
SMS.to is operated by Intergo Telecom, a licensed telecom and CPaaS operator. Every message you send through the SMS API can include a callback_url, so delivery reports, including failures, are pushed to your system as webhooks and you can suppress invalid numbers automatically. If you are wiring this up for the first time, our first-integration guide covers the basics.
For prevention, the SMS.to HLR and MNP lookup returns reachability, portability, MCC and MNC, number type and, where available, the last country of use. You can call it from the API, run lookups directly in the dashboard and export the results. Batch checks and CSV uploads are supported where enabled.
FAQs
Does “invalid number” mean the number is fake?
Not necessarily. It means the number cannot receive SMS as written. It may be mistyped, missing a country code, disconnected, a landline or never allocated.
Am I charged for messages to invalid numbers?
That depends on where it failed. A number rejected at submission is usually not sent at all, while a message that reaches the network and fails there may still be billed. Check your provider’s terms, and use a lookup to avoid the question entirely.
Is “unknown subscriber” the same as “absent subscriber”?
No. Unknown subscriber means the network has no such subscription, which is permanent. Absent subscriber means the subscription exists but the handset cannot be reached right now, which is temporary.
Can an invalid number become valid again?
Yes. Operators reissue disconnected numbers, often to a different person. That is why you should re-confirm consent and re-verify a number rather than resume sending to it later.
Want to see which numbers on your list will fail before you pay to send? Run your first lookups and test messages with a free trial. Create a free account, no credit card needed.