SMS error codes, translated across platforms.
The same failure has a different number on every platform. This is the same eight problems, side by side, with what each one actually means.
Last verified against vendor documentation: August 22, 2026
30007 is a Twilio number. Telnyx and
Bandwidth have their own numbering for the same condition, and underneath all of
them the carrier returned its own reason that your provider mapped — and usually
flattened — into one of theirs. So a business on Telnyx searching its code finds
Twilio's documentation, and a business on Twilio never finds out what the carrier
actually said.
Registration is the exception. Campaign rejections and ineligible use cases come from a single registry and shared industry guidance, so those reasons are broadly the same wherever you are. It is the delivery codes that fragment.
Look up your code
| What the vendor calls it | The failure | ||
|---|---|---|---|
| Twilio | 30007 | Message filtered | The carrier filtered it as spam |
| Telnyx | 40002 / 40003 | Blocked as spam (temporary / permanent) | The carrier filtered it as spam |
| Bandwidth | 4770 | destination-spam-detected | The carrier filtered it as spam |
| Vonage | 6 | Anti-spam rejection | The carrier filtered it as spam |
| Plivo | 30 | Spam Detected | The carrier filtered it as spam |
| Twilio | 30007 | Message filtered (Twilio-side or carrier-side) | The platform itself blocked it before the carrier saw it |
| Bandwidth | 4470 | rejected-spam-detected | The platform itself blocked it before the carrier saw it |
| Twilio | 30034 | US A2P 10DLC — Message from an Unregistered Number | The number is not registered for A2P 10DLC |
| Telnyx | 40010 | Not 10DLC registered | The number is not registered for A2P 10DLC |
| Bandwidth | 4476 / 4773 | blocked-unregistered / inactive-campaign | The number is not registered for A2P 10DLC |
| Twilio | 30032 | Toll-Free Number Has Not Been Verified | A toll-free number that was never verified |
| Twilio | 30006 | Landline or unreachable carrier | The destination cannot receive texts at all |
| Telnyx | 40001 | Not routable | The destination cannot receive texts at all |
| Bandwidth | 4700 / 4720 | invalid-service-type / invalid-destination-address | The destination cannot receive texts at all |
| Vonage | 11 | Unroutable | The destination cannot receive texts at all |
| Plivo | 50 | Invalid Destination Number (includes landlines) | The destination cannot receive texts at all |
| Twilio | 30003 / 30005 | Unreachable destination handset / Unknown destination handset | The number does not exist or is dead |
| Telnyx | 40012 | Invalid destination number | The number does not exist or is dead |
| Bandwidth | 4303 / 4721 | malformed-invalid-to-number / destination-tn-deactivated | The number does not exist or is dead |
| Vonage | 3 | Absent subscriber — permanent | The number does not exist or is dead |
| Twilio | 30008 | Unknown error | The carrier rejected it and said nothing useful |
| Telnyx | 40004 / 40008 | Rejected by destination / Undeliverable | The carrier rejected it and said nothing useful |
| Bandwidth | 4750 / 5999 | destination-rejected-message / unknown-error | The carrier rejected it and said nothing useful |
| Vonage | 1 / 99 | Unknown error / General error | The carrier rejected it and said nothing useful |
| Plivo | 90 / 1000 | No Route Available / Unknown Error | The carrier rejected it and said nothing useful |
| Twilio | 30007 | folded into Message filtered | AT&T specifically rejected it |
| Telnyx | 40017 | AT&T spam rejection | AT&T specifically rejected it |
| Bandwidth | 4770 | folded into destination-spam-detected | AT&T specifically rejected it |
Codes shown as a / b are two codes for the same failure on that
platform. Sorting is by first code.
Eight things that actually go wrong
The carrier filtered it as spam
The message reached the carrier and the carrier refused to deliver it. This is the one people mean when they say “our texts stopped working.” It is a content, consent, or reputation judgement — not a technical fault — so resending the same message from the same number reproduces it.
- Twilio
- 30007 Message filtered
- Telnyx
- 40002 / 40003 Blocked as spam (temporary / permanent)
- Bandwidth
- 4770 destination-spam-detected
- Vonage
- 6 Anti-spam rejection
- Plivo
- 30 Spam Detected
What to do about it. Stop retrying — every retry is another data point against the number. Check whether the campaign use case actually matches the traffic, then look at the opt-in you have on file for these recipients. Telnyx splits temporary from permanent, which is worth knowing: permanent means that sending number is done on that carrier.
The platform itself blocked it before the carrier saw it
Not a carrier decision. Your own provider's filters caught it. Easy to confuse with carrier filtering, and the fix is different because you have a support path with your provider that you do not have with a carrier.
- Twilio
- 30007 Message filtered (Twilio-side or carrier-side)
- Telnyx
- — surfaced under the spam codes
- Bandwidth
- 4470 rejected-spam-detected
- Vonage
- — not separately coded
- Plivo
- — not separately coded
What to do about it. Bandwidth distinguishes its own block (4470) from the carrier's (4770) — a genuinely useful split most platforms do not give you. On Twilio, 30007 covers both, so the code alone will not tell you who blocked it and you have to ask.
The number is not registered for A2P 10DLC
You are sending business traffic from a 10-digit number that has no approved campaign behind it. This is a registration problem, not a deliverability problem, and no amount of message rewriting fixes it.
- Twilio
- 30034 US A2P 10DLC — Message from an Unregistered Number
- Telnyx
- 40010 Not 10DLC registered
- Bandwidth
- 4476 / 4773 blocked-unregistered / inactive-campaign
- Vonage
- — not separately coded
- Plivo
- — surfaced as a delivery failure
What to do about it. Check the brand and the campaign separately — a brand can be approved while the campaign is not. Then check the number is actually in the campaign's sender pool, which is the step most people miss: registration approved and number never attached looks identical from the dashboard.
A toll-free number that was never verified
Toll-free traffic has its own verification track, separate from 10DLC. Unverified toll-free traffic to US and Canadian mobiles has been blocked outright since 31 January 2024.
- Twilio
- 30032 Toll-Free Number Has Not Been Verified
- Telnyx
- — handled through toll-free verification status
- Bandwidth
- — handled through toll-free verification status
- Vonage
- — handled through verification status
- Plivo
- — handled through verification status
What to do about it. Submit toll-free verification. Note this is a different process from 10DLC with a different queue — being 10DLC-registered does nothing for a toll-free number.
The destination cannot receive texts at all
A landline, a number not provisioned for messaging, or a line type that simply does not do SMS. Nothing is wrong with your setup.
- Twilio
- 30006 Landline or unreachable carrier
- Telnyx
- 40001 Not routable
- Bandwidth
- 4700 / 4720 invalid-service-type / invalid-destination-address
- Vonage
- 11 Unroutable
- Plivo
- 50 Invalid Destination Number (includes landlines)
What to do about it. Run line-type lookup before sending rather than discovering it per message. If a meaningful share of a list throws this, the list is the problem — and a list full of landlines is itself a consent smell worth looking at.
The number does not exist or is dead
Disconnected, never issued, or deactivated. Distinct from a landline: the number is not merely unable to receive texts, it is not a live subscriber.
- Twilio
- 30003 / 30005 Unreachable destination handset / Unknown destination handset
- Telnyx
- 40012 Invalid destination number
- Bandwidth
- 4303 / 4721 malformed-invalid-to-number / destination-tn-deactivated
- Vonage
- 3 Absent subscriber — permanent
- Plivo
- — folded into Invalid Destination Number
What to do about it. Suppress these permanently rather than letting them recycle through campaigns. Bandwidth's deactivation list is the useful signal here — a number that deactivated is a number that will be reissued to somebody else, and texting them is a consent problem, not just a wasted send.
The carrier rejected it and said nothing useful
The genuinely unhelpful one. A downstream failure with no reason attached. It is frequently filtering wearing a disguise, but the code will not tell you that.
- Twilio
- 30008 Unknown error
- Telnyx
- 40004 / 40008 Rejected by destination / Undeliverable
- Bandwidth
- 4750 / 5999 destination-rejected-message / unknown-error
- Vonage
- 1 / 99 Unknown error / General error
- Plivo
- 90 / 1000 No Route Available / Unknown Error
What to do about it. Do not treat it as random. Group them: if they cluster on one carrier, it is that carrier's filter. If they cluster on one sending number, it is that number's reputation. If they cluster on one message template, it is the content. The code is useless; the distribution is not.
AT&T specifically rejected it
Telnyx is unusual in surfacing a carrier-specific spam rejection as its own code rather than folding it into a generic one.
- Twilio
- 30007 folded into Message filtered
- Telnyx
- 40017 AT&T spam rejection
- Bandwidth
- 4770 folded into destination-spam-detected
- Vonage
- — folded into anti-spam rejection
- Plivo
- — folded into Spam Detected
What to do about it. Worth knowing because AT&T uses Hiya and the other two carriers do not. A rejection that is AT&T-only points at your Hiya reputation specifically, which is a different filing than the other engines.
What this page will not tell you
Recognize your code and still don’t know what to do?
That is the normal outcome. The code names the symptom; finding the cause means looking at the registration, the consent, the number's history and the attestation together. Tell me what you are seeing and I will tell you where the problem actually is — including if it is something you can fix yourself for free.