Twilio SMS Error Codes 30003 to 30008: What They Mean for Your List
Twilio's SMS error codes fall into three groups. List problems you can catch before sending: 21211 (invalid number format), 21614 (not a valid mobile number), 30006 (landline or unreachable carrier), plus 21610 (the recipient opted out). Sending and compliance problems that no list cleaning fixes: 30007 (message filtered), 30034 (unregistered US 10DLC number) and often 30004 (message blocked). Handset problems that may be temporary: 30003 (unreachable handset), 30005 (unknown handset) and 30008 (unknown error). Act on the group, not just the number.
This guide quotes Twilio's own error documentation for each code, says what each one tells you about your list, and gives a pre-send routine that prevents the list-level errors.
First, failed or undelivered?
Every Twilio message ends with a status. Two of them carry error codes. Per Twilio's Message resource documentation:
- failed: "The outbound message failed to send." It never left Twilio.
- undelivered: Twilio "received a delivery receipt indicating that the outbound message was not delivered." It left Twilio and a carrier reported failure.
Read the status together with the code. A list problem and a carrier problem can both end as undelivered, so the code is what tells them apart.
The codes at a glance
| Code | Twilio's title | Group | What to do with the number |
|---|---|---|---|
| 21211 | Invalid 'To' Phone Number | List | Fix the format or remove |
| 21614 | 'To' number is not a valid mobile number | List | Remove from SMS; keep for calls if valid |
| 30006 | Landline or unreachable carrier | List | Don't resend; remove from SMS |
| 21610 | Attempt to send to unsubscribed recipient | Consent | Suppress until they text START |
| 30005 | Unknown destination handset | Handset or list | Retry once; suppress if it repeats |
| 30003 | Unreachable destination handset | Handset | Retry later |
| 30008 | Unknown error | Handset or route | Retry later; investigate patterns |
| 30004 | Message blocked | Compliance or recipient | Check opt-out, content and sender |
| 30007 | Message filtered | Compliance | Fix content, consent and registration |
| 30034 | US A2P 10DLC - Message from an Unregistered Number | Compliance | Finish 10DLC registration |
Titles are from Twilio's error pages, checked on 13 October 2026.
List problems you can prevent
21211: Invalid 'To' Phone Number
Twilio's 21211 page says the number "is not a valid phone number or is incorrectly formatted". The listed causes include a missing + or country code, separators such as spaces and dashes, and too many or too few digits for the country.
The fix is formatting. Convert every number to E.164: a plus sign, the country code, then the subscriber number, with no separators. Our E.164 format guide has examples by country. If a number still fails after formatting, it does not fit its country's numbering plan, and it should leave the list.
21614: 'To' number is not a valid mobile number
Per Twilio's 21614 page, Twilio does not recognise the number as a valid mobile number. It is "likely a landline or otherwise invalid". Twilio suggests checking with a lookup that the number is not a landline.
These numbers may be fine for calls. Keep them in your CRM, but out of SMS sends.
30006: Landline or unreachable carrier
Twilio's 30006 page says "the destination number cannot receive your message." The first listed cause is a landline. Twilio's advice is direct: check the line type before sending, and don't resend the same SMS to a number identified as a landline.
In most countries the number's prefix shows whether it is a mobile. In the US and Canada it does not, because mobiles and landlines share area codes and numbers can be ported. Our explainer on mobile vs landline lookup covers why. For North American lists, you need a live line-type lookup.
21610: Attempt to send to unsubscribed recipient
Twilio's 21610 page says the recipient has opted out, usually by replying STOP, and you cannot message them until they opt back in with START. Twilio also lists "The phone number was recently reassigned to a different person" as a cause.
Suppress the number in your own system too, not only in Twilio. If a number was reassigned, the person who consented is no longer at it. In the US, the FCC's Reassigned Numbers Database lets callers check whether a number was permanently disconnected after a given date. Our guide to the Reassigned Numbers Database explains when to use it.
Handset problems: retry once, then decide
30003: Unreachable destination handset
Twilio's 30003 page says the phone "can't be reached over the carrier network", usually because it is off, has no service, cannot receive SMS, or is temporarily unavailable. Causes include weak signal and roaming. Twilio also lists landlines and other unsupported line types, and for long codes or toll-free numbers, repeated failures may point to carrier filtering.
Treat a single 30003 as temporary. Retry once, later. If the same number fails repeatedly, check its line type and stop sending to it.
30005: Unknown destination handset
Per Twilio's 30005 page, "the destination number is unknown and may no longer exist." Other listed causes include a powered-off device and a landline. One of Twilio's suggested steps is to confirm the number is in E.164 format with the right country code.
Check the format first. A missing country code can make a valid number look unknown. If the format is right and 30005 repeats, suppress the number.
30008: Unknown error
Twilio's 30008 page describes a generic delivery failure reported without enough detail. Causes include handsets that are off or roaming, a problem with one carrier path, an alphanumeric sender ID the destination does not support, and message length or character encoding.
Look for patterns. If 30008 clusters on one carrier or country, it is a route or sender problem. If it hits scattered numbers once, retry later.
Compliance problems: the list is not the cause
30007: Message filtered
Twilio's 30007 page says the message was blocked by Twilio or by a carrier. Twilio may block messages that violate its Messaging Policy or Acceptable Use Policy. Carriers block abusive traffic and messages that break their rules.
A clean list does not lift this block. Check consent, content, links and sender registration. Our guide to why SMS delivery fails covers carrier filtering in more detail.
30034: Unregistered 10DLC number
Per Twilio's 30034 page, Twilio blocks messages to US numbers sent from a +1 10DLC number that is not tied to an approved A2P 10DLC Campaign. The fix is to complete Brand and Campaign registration and add the number to the Messaging Service linked to the approved Campaign.
Every message from that sender fails until registration is done. Pause the campaign; the list is fine.
30004: Message blocked
Twilio's 30004 page says the destination number is blocked from receiving the message. Causes span both groups: the recipient blocking you or opting out, a device that is off, a landline, and carrier or Twilio filtering. If the recipient opted out, Twilio notes that messages fail with 21610 until they send START or UNSTOP.
Check opt-out status first. If the number never opted out, treat 30004 like 30007 and review content and sender.
Collecting the codes for a whole campaign
Single errors are easy to read in the Console. For a campaign, you need every code in one table. Twilio's error pages note that delivery errors appear in three places: the Messaging logs, the ErrorCode field on the Message resource, and the StatusCallback requests Twilio sends to your server. If you set a status callback URL, store the phone number, status and error code from each callback. Then count codes per group. One table of counts tells you whether the next fix is the list, the sender or the content.
A pre-send routine that prevents the list-level codes
- Normalise to E.164. This removes most 21211 errors and some 30005s.
- Validate against the numbering plan. Drop numbers with the wrong length or an unused prefix for their country.
- Deduplicate after normalising. The same number written three ways becomes one row. See removing duplicate phone numbers.
- Look up the line type. Remove landlines from SMS sends to prevent 21614 and 30006. Twilio's own Line Type Intelligence returns types such as mobile, landline, fixedVoip and nonFixedVoip, and notes that a landline "usually can't receive SMS".
- Apply your suppression list. Every 21610 and every manual opt-out, across all senders.
- Check consent records and, in the US, reassignment for numbers collected long ago.
Steps 1 to 4 can run on a whole CSV in one upload. Our guide to validating phone numbers before an SMS campaign covers each step.
Worked example (illustrative numbers)
The numbers below are invented to show the triage, not taken from a real campaign.
A US retailer texts 10,000 numbers collected over three years. 640 messages come back with errors:
| Code | Count | Group | Action |
|---|---|---|---|
| 21211 | 90 | List | Reformat; 70 pass on retry, 20 removed |
| 30006 | 260 | List | Removed from SMS, kept for calls |
| 21614 | 40 | List | Removed from SMS |
| 21610 | 35 | Consent | Suppressed everywhere |
| 30003 | 110 | Handset | Retried next day; 80 delivered |
| 30005 | 60 | Handset or list | Format checked; 45 repeat and are suppressed |
| 30007 | 45 | Compliance | Content with a shortened link reviewed |
390 of the 640 errors (21211, 30006 and 21614) were list problems that format validation and a line-type lookup would have caught before the send. The 30007s needed a content fix. The 30003s mostly cleared on their own.
What validation can and cannot tell you
A phone check can confirm that a number fits its country's numbering plan, return it in E.164, and with a live carrier lookup, return the current carrier and line type. It cannot tell you that the handset is on, that the person on your list still uses the number, or that a carrier will accept your message. Treat it as a way to remove errors before sending, not as a delivery guarantee.
SimpleVerifier's phone number validator does single checks. On the Pro plan, $29.99 a month, bulk uploads and the API return E.164 format, country and the numbering-plan type. The Email + Phone plan, $49.99 a month, adds 5,000 live carrier lookups a month with the real line type (mobile, landline or VoIP) and carrier name, including US numbers. See pricing. If you are comparing lookup providers, our Twilio Lookup alternatives page lists the options.
The short version
Group Twilio errors before acting. 21211, 21614 and 30006 are list problems: fix the format, and look up line type to remove landlines before the send. 21610 is consent: suppress until the person opts back in. 30003, 30005 and 30008 can be temporary: retry once, then suppress numbers that keep failing. 30007, 30034 and most 30004s are about your sender, registration and content, and no list cleaning will fix them.
Common questions
What does Twilio error 30006 mean?
Twilio titles it 'Landline or unreachable carrier': the destination number cannot receive your message. The most common cause is a landline. Twilio's advice is to check line type before sending and not to resend the same SMS to a number identified as a landline.
What is the difference between Twilio errors 30003 and 30005?
30003 is 'Unreachable destination handset': the phone is off, out of coverage, roaming or cannot take SMS at the moment. 30005 is 'Unknown destination handset': the number is unknown to the carrier and may no longer exist. 30003 is often temporary; repeated 30005 errors suggest the number is gone.
How do I stop 30007 message filtered errors?
30007 means Twilio or a carrier filtered the message as spam or against policy. Check that your use case complies with Twilio's Messaging Policy and Acceptable Use Policy, that your sender is registered where required, and that your content matches what recipients agreed to receive. A cleaner list helps engagement but does not lift a content or registration block.
What is the difference between failed and undelivered in Twilio?
Failed means the message never left Twilio, for reasons such as queue overflow or account problems. Undelivered means Twilio handed it to a carrier and received a receipt saying it was not delivered. Both include an error code.
Can phone validation guarantee my SMS will be delivered?
No. Validation confirms the number fits its country's numbering plan, normalises it, and with a live lookup returns the line type and carrier. It cannot confirm that the handset is on, that the person still uses the number, or that carriers will accept your content.
Verify unlimited addresses for $29.99/month
Real SMTP mailbox checks. No credits, no per-email fees.
Get Started