Skip to main content

Send-gate decision fork

A send that never dispatches was stopped by exactly one gate. This page is the routing index: read the error code, pick the gate, open the listed dashboard or admin surface, then follow the per-gate fix page. It is not the gate reference — each gate’s full behavior lives on its own page; this page stops at the fork. For the per-router walkthrough that pairs HTTP status + code + message text, see Compliance send-gate error codes. For gates that need a toggle switch enabled, see Send Gates.

Sequence of checks

Read top-down. Lower-gate errors are masks — a SENDER_ID_NOT_REGISTERED on an un-configured consent org still returns SENDER_ID_NOT_REGISTERED. Re-probe after each fix; the next gate’s error will surface.
  1. Consent — affirmative opt-in gate, when tenant enables it.
  2. Country rules / country allowlist — per-org destination pin.
  3. DNC scrub — opt-in Do-Not-Call register check.
  4. RND scrub — FCC Reassigned Numbers database check, opt-in.
  5. RMD registration — US Robocall Mitigation Database filing (voice).
  6. Known-litigator — TCPA professional-plaintiff provenance check, opt-in.
  7. Sender-ID registration — alphanumeric from registered for the destination (SMS, MMS, Viber).
  8. Country allowlist — tenant-pinned destinations.
  9. Quiet hours — federal + tenant dialing-window blocks.
  10. TFV / 10DLC — US toll-free verification or A2P campaign posture.
  11. Fraud shield — account-level signals on the same send.
  12. Spend cap — per-number, per-subaccount, per-org wallet ceiling.
Voice-specific blocks (emergency codes, DNO, per-country rate window) fire in the same pre-dispatch path and are listed in the table below alongside the message gates. Consent is a per-tenant toggle; when it is off, the fork starts at country rules.

The fork table

Sort on error.code from the API envelope, then open the surface column’s first link. Codes that match more than one gate are listed in one row each — match the letter that fires. When no row matches but the response code is 503 / 500 with COMPLIANCE_CHECK_UNAVAILABLE or SENDER_ID_CHECK_UNAVAILABLE, a gate failed closed on a transient read — retry; if the error persists contact support with the request ID. That fail-closed fallback is the only path where retry is the correct first move.

The forks that mislead

SENDER_ID_NOT_REGISTERED vs SENDER_ID_NOT_APPROVED

Both anchor on the same surface (Channels → Senders). The first means no registration row exists for this from at all — file one or change the sender. The second means a row exists but its status is not approved — on a phone-number-shaped sender (E.164, short code, numeric) this fork never fires; phone numbers skip the alphanumeric gate. Fix by submitting approval evidence or waiting out the carrier, per Sender-ID registration.

TFV vs 10DLC — which US-registration applies

US SMS forces a route choice based on the sender’s shape, not the channel:
  • Toll-free sender (800/833/844/855/866/877/888 prefix) → the TFV gate — file Toll-Free Verification on that number. 10DLC is not the fix here.
  • Ten-digit local long-code sender → the 10DLC gate — register a TCR brand + campaign. TFV is not the fix here.
  • Alphanumeric sender → the sender-ID gate above; neither TFV nor 10DLC applies.
  • Short code → registered upstream; both routes skip.
A TFV-lint error on a toll-free sender and a 10DLC-registration error on a long-code both read as “US registration blocked” until you check the sender’s shape first.

Known-litigator vs DNC vs RND

These three share the contact-record surface and block a send whose recipient is OK to receive in plain English, but their provenance is different:
  • DNC is about whether the recipient opted out. The contact’s suppression or opt-out flag blocks the send. The fix is to suppress the contact or, where lawful, re-collect consent.
  • RND is about whether the person you consented is still on this number. The FCC Reassigned Numbers check looks at the consent_date you pass and compares that to the number’s disconnect history. A blocked send means the number was reassigned after consent — your consent evidence no longer attaches.
  • TCPA known-litigator is about who this recipient is. The platform’s professional-plaintiff list blocks a send to a recipient flagged as a serial TCPA filer. The recipient is not owed outreach; enabling the gate is opt-in at the org level.
All three appear under contact compliance; only the gate name separates them.

Where to look before you re-try

Always include the request ID from the failed-send response in a support follow-up — the internal gate log joins on it.