Twilio error 30007 means your message was filtered: blocked by Twilio's spam filtering or by a wireless carrier. Twilio error 30008 means a carrier or downstream provider returned a generic delivery failure without enough detail to classify it. Both show up as failed or undelivered messages in your Messaging logs, but they have different causes and different fixes. This guide explains each error, how to tell them apart from related codes, and what to change so your texts get through. MyTCRPlus is an independent 10DLC compliance diagnostic platform: it is not a CSP, does not send SMS, and is not affiliated with Twilio or The Campaign Registry.
Short answer: For 30007, treat it as a content or compliance problem: confirm the sending number is on an approved 10DLC Campaign, make the message match the registered use case, remove URL shorteners and spam-like wording, and check consent. For 30008, check the individual recipient first (handset off, roaming, carrier path), retry later, and only investigate content if the failures cluster on one carrier or message template.
What Error 30007 Means
Twilio describes 30007 as "Carrier error 30007: Message filtered". The message was blocked either by Twilio's filtering, for violating its Messaging Policy or Acceptable Use Policy, or by a wireless carrier's filter for violating carrier rules. Twilio lists two possible causes: the message was identified as spam or unwanted messaging by Twilio's filtering system, or a wireless carrier flagged it as objectionable and blocked it. See Twilio's error 30007 reference.
For US A2P traffic, carrier filters look at the sender's registration status, the content, links, volume patterns and complaint signals. 30007 is the error you see when that filtering decides against your message.
What Error 30008 Means
Twilio describes 30008 as "Carrier error 30008: Unknown error": a generic delivery failure from a carrier or downstream provider with not enough detail to classify it more specifically. Twilio lists causes such as the handset being off or unable to receive SMS at delivery time, the device roaming or off network, an issue isolated to a specific handset or carrier path, the destination network not accepting the sender (especially alphanumeric sender IDs abroad), and message length, concatenation or encoding problems. See Twilio's error 30008 reference.
30007 vs 30008 vs Related Codes
| Code | Twilio name | What it usually points to | First check |
|---|---|---|---|
| 30003 | Unreachable destination handset | Phone off, out of coverage, or unable to receive | Retry later; check the number |
| 30004 | Message blocked | Recipient blocked the sender or replied STOP | Check opt-out records; do not resend |
| 30005 | Unknown destination handset | Number does not exist or is no longer active | Clean the list |
| 30006 | Landline or unreachable carrier | Number cannot receive SMS | Validate number type before sending |
| 30007 | Message filtered | Content, registration or compliance filtering | Registration status and content |
| 30008 | Unknown error | Generic carrier failure | Recipient-specific causes, then patterns |
| 30034 | Message from an unregistered number | Sending US A2P traffic from a 10DLC number not on an approved Campaign | Register or attach the number to a Campaign |
If you see 30034 alongside 30007, fix registration first; see unregistered traffic blocking.
Common Causes of 30007 for 10DLC Senders
- Number not on an approved Campaign. The number is unregistered, the Campaign is still pending, or it was attached to the wrong Messaging Service.
- Content outside the registered use case. Promotions sent on a customer care Campaign, or new message types never declared in samples.
- Public URL shorteners. bit.ly-style links are strongly associated with spam. Use full links on your own domain. See URL shortener restrictions.
- Restricted content. SHAFT categories, cannabis, high-risk lending, or lead generation without the right Campaign type and age gating.
- Spam-like wording. All caps, excessive punctuation, "FREE!!!", urgency pressure, or text that mimics bank or delivery-scam patterns.
- No sender identification. Messages that never name the business look like phishing.
- Undeclared phone numbers or links. Numbers or domains in messages that were not declared in the Campaign.
- Complaints and opt-outs. High STOP rates and spam reports raise filtering risk.
- Volume spikes. Sudden bursts well above your normal pattern, or traffic spread across many numbers to avoid limits (snowshoeing).
How to Fix Error 30007
- Confirm registration. In the Twilio Console, check that the sending number belongs to a Messaging Service with an approved A2P 10DLC Campaign. If not, register or attach it. See Twilio 10DLC registration.
- Compare the failed message with your Campaign. Does it match the use case and samples you registered? If you started sending a new type of message, update the Campaign or register a new one.
- Rewrite the content. Name the business at the start, remove shorteners and spam triggers, and keep opt-out text on marketing messages. Run it through the SMS Message Validator.
- Check consent. Make sure every recipient opted in to this kind of message. Remove purchased or scraped numbers.
- Slow down. Send at a steady rate within your Campaign's limits instead of large bursts.
- Test with a small batch of known, opted-in handsets on different carriers before resuming full volume.
- Escalate with evidence. If filtering continues on compliant content, open a ticket with Twilio including message SIDs, the Campaign ID and sample content.
How to Fix Error 30008
- Look at the pattern. Is the failure isolated to a few numbers, one carrier, one template, or one time window?
- Isolated numbers. The handset may be off, roaming or full. Retry later with a sensible backoff, and stop after repeated failures.
- One carrier. If failures concentrate on one carrier, compare against 30007 behavior: carrier-side filtering can surface as generic errors. Review content and registration as for 30007.
- One template. Check length, encoding and special characters. Emoji and non-GSM characters switch encoding to UCS-2 and shorten the segment size, which increases concatenation. Simplify and retest.
- Validate numbers. Use a lookup to confirm the number is mobile and active before sending.
- Escalate with message SIDs if the failures persist on valid, reachable handsets.
Prevent Filtering Before It Starts
- Register the Brand and Campaign accurately and keep content inside the declared use case. See 10DLC registration for small businesses.
- Keep opt-in records for every recipient; see SMS consent documentation.
- Send an opt-in confirmation, honor STOP immediately, and answer HELP.
- Use branded full links on your domain.
- Monitor delivery rates by carrier and template every week; a drop is your early warning.
- Read carrier filtering algorithms for how AT&T, T-Mobile and Verizon evaluate traffic.
Example: Rewriting a Filtered Message
Filtered:
FLASH SALE!!! 50% OFF everything TODAY ONLY → bit.ly/x7Yz
Rewritten:
Oak Outfitters: Our fall sale is on, 50% off jackets through Sunday. Shop: oakoutfitters.com/fall Reply STOP to opt out.
The rewrite names the brand, removes all caps and the shortener, uses a full branded link and includes opt-out text. It still needs to be sent on a Campaign registered for marketing.
Monitoring Delivery: Metrics to Watch
| Metric | Healthy signal | Warning signal |
|---|---|---|
| Delivery rate | Stable week to week | Sudden drop on one carrier |
| 30007 share of failures | Rare | Rising after a content or volume change |
| 30008 share | Scattered across recipients | Concentrated on one carrier or template |
| Opt-out rate | Low and steady | Spikes after a campaign |
| Reply rate | Normal for your program | Near zero on content that used to perform |
Track these per Campaign and per message template so you can trace a filtering spike back to the change that caused it. See TCR health checks for a fuller monitoring routine.
When It Is Not a Twilio Problem
Every CSP surfaces carrier filtering in its own way. If you send through another provider, the same causes apply under different codes. The CPaaS guides cover provider-specific registration: CPaaS guides.
Diagnosing Failures in the Twilio Console
- Open Monitor > Logs > Messaging and filter by status "Undelivered" or "Failed" and by error code.
- Group failures by sending number, Messaging Service, destination carrier and message body. A failure that follows the body points to content; one that follows the sending number points to registration; one spread thinly across recipients points to handset-level causes.
- Open a single message and read the delivery events. Note the message SID for any ticket you raise.
- Check the Messaging Service. Confirm which A2P Campaign the number belongs to and whether the Campaign status is approved.
- Check the time window. Filtering that starts right after a new campaign launch, a template change or a volume increase is almost always caused by that change.
- Use status callbacks in your application so failures are logged with the error code automatically and you can alert on rising rates.
Message Encoding and Segments
SMS messages are split into segments. Messages using only GSM-7 characters fit 160 characters in a single segment (153 per segment when concatenated). A single emoji or other non-GSM character switches the whole message to UCS-2 encoding, which fits 70 characters in a single segment (67 per segment when concatenated). Longer, multi-segment messages cost more and give carriers more parts that can fail to reassemble. When 30008 errors cluster on one template, remove emoji and smart quotes, shorten the text, and retest.
Worked Examples
Example 1: Clinic reminders filtered after a change. A clinic's reminders delivered normally for months. After the team added a shortened link to an intake form, failures with 30007 rose on one carrier. Replacing the shortener with a full link on the clinic's domain and declaring that link in the Campaign samples restored delivery.
Example 2: Retailer marketing on a care Campaign. A retailer registered a customer care Campaign for order updates and later started sending weekly promotions from the same numbers. Promotions failed with 30007 while order updates still delivered. Registering a separate marketing Campaign, attaching dedicated numbers and collecting marketing consent at checkout fixed the split.
Example 3: Scattered 30008 on a large list. A service company saw a small, steady share of 30008 failures spread across many recipients and carriers, with no content pattern. Number validation showed many were inactive or unreachable. Cleaning the list and adding retry limits brought failures down without any content change.
Error Codes and Your Customers
If you send on behalf of clients (an agency, platform or ISV), share failure data with them by error code, not as a single "failed" count. Clients can fix content and consent issues behind 30007 themselves once they see which templates are filtered, while 30008 failures on scattered numbers usually call for list hygiene rather than rewrites. Give each client a short guide to the codes above and a monthly delivery report by carrier. Pair it with the rejection code directory for registration-stage errors, so registration problems and delivery problems are not confused.
FAQ
What does Twilio error 30007 mean?
The message was filtered (blocked) by Twilio's spam filtering or by a wireless carrier, usually for content, registration or policy reasons.
What does Twilio error 30008 mean?
A carrier returned a generic delivery failure without a specific reason. Causes range from an unreachable handset to carrier-path or encoding problems.
Can I fix 30007 by sending from more numbers?
No. Spreading traffic across numbers to avoid filters is snowshoeing, which carriers prohibit. Fix registration and content instead.
Why are my texts not delivering after 10DLC approval?
Content may not match the registered use case, links may be shortened, recipients may have opted out, or volume may have spiked. Check failures by code and carrier.
Is 30007 the same as 30034?
No. 30034 means the 10DLC number is not registered to an approved Campaign. 30007 means a message was filtered, which can happen even on registered numbers.
Should I retry messages that failed with 30007?
Not unchanged. Fix the cause first; resending the same filtered content usually fails again and can worsen filtering.
Does a high trust score prevent 30007?
No. A higher score can raise throughput limits, but content and consent problems are still filtered.
Disclaimer
Informational only. Error definitions summarize Twilio's public documentation, which can change; check the current Twilio error dictionary. MyTCRPlus is not affiliated with Twilio, carriers or The Campaign Registry.