Every list, every send, every dial is screened. Stay on the right side of TCPA and carrier rules without thinking about it — the platform is built that way, not patched for it later.
Compliance isn't a checkbox bolted on top. Every send is built around it.
STOP opt-out handling is synchronous in the webhook pipeline — the suppression record is created inline before the status callback completes. Not a background job, not eventual consistency. The moment a contact replies STOP, the platform-wide suppression engages.
DNC checks run inline before every broadcast send. A number hitting DNC is skipped, never queued to the carrier. The platform protects itself before the regulator can.
The master suppression list is a global E.164 cross-account blocklist. If one user's contact says STOP, that number is blocked across every account on the platform — for every account, for every send.
The audit event log is append-only. No update or delete paths exist in the codebase. The audit trail is immutable by design — which is what regulators and lawyers actually want.
Auto-pause triggers when stop rates exceed a configurable threshold. The platform pulls the cord on a bad campaign before carriers do.
Every list, every send, every dial is screened against the registry, the carrier, and your own suppression list — automatically.
Third-party DNC lookup via Apeiron, plus local caching, plus your master suppression list — all checked before any contact goes out.
STOP, UNSUBSCRIBE, CANCEL, END, QUIT, OPT OUT, REMOVE ME — synchronous suppression in the webhook handler. Auto-confirmation reply sent.
Templates run through a deterministic compliance engine before they can ship. Critical violations (loan, cash advance, guaranteed, click here) block the send entirely.
Eleven carrier error codes are handled automatically — bad numbers suppress, spam-flagged DIDs retire, A2P caps alert admins. See the table below.
Bulk-import existing DNC and opt-out records via API at onboarding. Merges into the master suppression list with source attribution.
STOP handling, DNC checks, and opt-out footers are first-class platform behaviors — not bolted on. Every screening event is logged immutably and exportable for legal review.
TCPA stacks per-violation: $500 minimum, $1,500 if a court finds the violation was knowing or willful. A 10,000-contact list that's 0.5% non-compliant is 50 violations. Slide to see your exposure.
Pull a compliance report for any send, in any window, in three clicks. Each row shows what was checked, when, and against which registry — ready for legal, ready for court.
Every Twilio status callback is inspected. Bad numbers get suppressed, spam-flagged DIDs get retired, A2P daily caps trigger admin alerts — all without a human touching it.
| Code | Meaning | Platform response |
|---|---|---|
| 30003 | Unreachable destination | Suppress after 3+ fails from 2+ unique senders |
| 30004 | Carrier spam flag | DID flagged for replacement after 3 hits in 24h |
| 30005 | Unknown handset | Auto-suppress immediately |
| 30006 | Landline / unreachable | Auto-suppress immediately |
| 30007 | Carrier violation | Logged · flagged in template compliance |
| 30008 | Unknown error | Logged for analysis |
| 21610 | Twilio opt-out (STOP synced) | Synced to UserInboxBlock for all agents |
| 14107 | A2P daily cap reached | Redis flag · admin notified |
| 30034 | A2P throughput exceeded | Redis flag · admin notified |
| 30023 | A2P send-rate limit | Redis flag · admin notified |
The table is the shorthand. What follows is what each code actually means in production — drawn from real failure distributions, not vendor docs.
Carrier-side content filtering. The "we blocked it but won't tell you why." Often triggered by message velocity or pattern detection.
35.4% of one production org's failures in May 2026 — the single biggest failure category.
The most common "bad number" signal. 28.9% of May failures.
Platform behavior: tracked in PhoneFailureHistory. Suppressed only after 3 fails from 2+ distinct senders. Weekly rollback every Monday 3 AM ET resets suppression and gives numbers a second chance.
The carrier's spam filter explicitly flagged this message. Different from 30000 — this is a targeted accusation, not a generic filter. Rare but serious.
Platform behavior: per-DID tracking. When a sending number accumulates enough 30004s in a window, it's flagged for replacement. The DID gets swapped out, not the message.
Never been assigned by a carrier, or was ported away and the routing table hasn't caught up.
Platform behavior: permanent auto-suppression on first failure. One strike.
Number is a landline, VoIP that doesn't accept SMS, or a number type that can't receive text messages.
Platform behavior: same as 30005 — permanent auto-suppression on first failure.
Carrier-level content policy violation. The carrier inspected the message content and rejected it — not a rate issue, a content issue. Often triggered by financial terms, urgency language, or patterns that look like spam.
20.1% of May failures. The signal that your message template needs work, not your sending infrastructure.
Twilio received an error from the carrier but couldn't categorize it. A black box. Counted as undeliverable, no auto-suppression (too ambiguous to act on).
Recipient previously replied STOP and is on the carrier opt-out list. You're attempting to message someone who explicitly unsubscribed.
Should never happen if suppression is working — indicates a gap between the carrier's opt-out list and the platform's MasterSuppression table.
Problem with the carrier-side messaging service configuration, not the recipient. Misconfigured sender pool or compliance settings. Operational alert — check sender configuration.
Toll-free number hasn't completed verification, or verification was rejected. Carriers block TFN traffic until verification completes.
Account-level issue — suspended, out of funds, or compliance hold. Nothing wrong with the message or recipient itself.
Top three failure codes (30000 + 30003 + 30007) account for 84.4% of all failures in production data. Content filtering alone (30000 + 30007) accounts for 55.5% — more than unreachable numbers. Bad content causes more failures than bad numbers.
A single 30003 doesn't mean the number is dead. Carriers route the same handset differently on different days. So Fivra waits for evidence: 3 unreachable returns from at least 2 unique sender DIDs before account-wide suppression kicks in.
Every Monday, suppressed numbers roll back into the send pool for one supervised retry. If the next attempt also fails 30003, suppression sticks. If it succeeds, the number is cleared — no permanent damage from a transient carrier hiccup.
High-volume SMS without genuine engagement is exactly what carriers filter for. Call Quota requires selected agents to place real calls before SMS and broadcast tools unlock — keeping message volume anchored to live conversations, not blast-only behavior.
Every number is checked against a third-party DNC lookup service (Apeiron). Results are cached locally for performance and refreshed on a rolling basis. Each screening event is logged with its source and timestamp for audit review.
Your master suppression list catches the change on the next lookup refresh. Future sends to that contact are blocked automatically. Your audit log shows the exact lookup state at the time of every prior send, so you can defend any historical message that was provably clear when it was sent.
Yes. Every screening event is exportable as CSV or JSON with timestamps, source, and result code. The underlying log is append-only — entries cannot be edited or deleted, which is enforced at the application layer.
An internal rule engine scores templates before they ship. It flags scam phrases, excessive all-caps (>60%), shortened or IP-based URLs, leet-speak obfuscation, and missing opt-out language. Templates over a 60-point threshold get blocked. Separately, if Twilio returns a carrier spam flag (error 30004) on a live send, the affected DID is automatically replaced after 3+ hits in 24 hours.
Synchronous suppression in the webhook handler — STOP, UNSUBSCRIBE, CANCEL, END, QUIT, OPT OUT, REMOVE ME all trigger immediate account-wide blocking. The contact is added to the master suppression list, an auto-confirmation reply goes out, and no future broadcast or dial can reach that number.
Audit trails, registry timestamps, suppression logs — everything stored, exportable, ready for legal.