Reference

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

You don't need to follow all of this. If you scroll down and most of it means nothing to you, that isn't a gap in your knowledge — it's the reason this is somebody's job. Find your code, read the one line about what it means, and ignore the rest.

If it means something to you and you want to argue with it, even better. Both conversations are the same call.

Error codes do not carry over between platforms, and that is the whole problem. Twilio's 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.

The failures

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

A code tells you what happened, not why. "Filtered as spam" is the carrier's conclusion, not its reasoning — no carrier publishes the rule you broke, and support will not tell you either. Anyone who claims to know precisely why a specific message was filtered is guessing. What is knowable is the pattern: which carrier, which number, which template, which time of day.
Codes change, and this page is a snapshot. It was verified against vendor documentation on August 22, 2026. Platforms add codes, rename them, and occasionally re-map which carrier reason lands where. Check the vendor's own current documentation before acting on anything here — and if you find something out of date, tell me and I will fix it.

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.