> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Send-gate decision fork — which check rejected your send

> The fork tree for every pre-send gate: match the error code to the gate that fired, find the dashboard surface to open first, and follow the link to that gate's fix page. Covers consent, country rules, DNC, RND, RMD, known-litigator, sender-ID registration, country allowlist, quiet hours, TFV/10DLC, fraud shield, and spend caps.

# 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](/compliance/troubleshooting-compliance-error-codes).
For gates that need a toggle switch enabled, see
[Send Gates](/compliance/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.

<Note>
  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.
</Note>

***

## 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.

| Code                                                                                                                                                                                | Gate                                       | Opened at                                                           | Fix page                                                                   |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `MESSAGING_CONSENT_REQUIRED`                                                                                                                                                        | Consent (affirmative opt-in)               | Contact profile → Consent                                           | [Consent management](/compliance/consent-management)                       |
| `COUNTRY_NOT_ALLOWED`                                                                                                                                                               | Country allowlist (tenant-pinned)          | Fraud shield settings → Allowed countries                           | [Fraud caps](/compliance/fraud-caps)                                       |
| `DNC_CONTACT` / `DNC_NUMBER`                                                                                                                                                        | DNC scrub                                  | Contact profile → opt-out state                                     | [DNC scrub](/compliance/dnc-scrub)                                         |
| `DNC_SYNC_NOT_ENABLED`                                                                                                                                                              | DNC pre-flight (no federal feed)           | Compliance settings → DNC toggle                                    | [DNC check gated](/troubleshooting/dnc-check-gated)                        |
| `RND_SCRUB_NOT_ENABLED` / `RND_REASSIGNED`                                                                                                                                          | RND scrub                                  | Compliance settings → RND toggle                                    | [RND scrub](/compliance/rnd-scrub)                                         |
| `RMD_NOT_REGISTERED` / `RMD_NOT_ACTIVE`                                                                                                                                             | RMD filing                                 | Organization → Robocall Mitigation filing                           | [RMD registration](/compliance/rmd-registration)                           |
| `MESSAGING_TCPA_KNOWN_LITIGATOR`                                                                                                                                                    | TCPA known-litigator                       | Admin → TCPA litigators list, or contact's `is_tcpa_litigator` flag | [Known-litigator](/compliance/tcpa-known-litigator)                        |
| `SENDER_ID_NOT_REGISTERED`                                                                                                                                                          | Sender-ID registration (no entry)          | Channels → Senders                                                  | [Sender-ID registration](/compliance/sender-id-registration)               |
| `SENDER_ID_NOT_APPROVED`                                                                                                                                                            | Sender-ID registration (not approved)      | Channels → Senders (status other than `approved`)                   | [Sender-ID registration](/compliance/sender-id-registration)               |
| `NO_SENDER_CONFIGURED` / `SENDER_REQUIRED`                                                                                                                                          | Sender identity (none usable)              | Channels → Senders                                                  | [Sender-ID registration](/compliance/sender-id-registration)               |
| `QUIET_HOURS_BLOCKED` / `TCPA_QUIET_HOURS` / `TCPA_FEDERAL_DIALING_WINDOW_BLOCKED` / `TCPA_STATE_DIALING_WINDOW_BLOCKED` / `TCPA_TIMEZONE_UNKNOWN` / `QUIET_HOURS_TIMEZONE_UNKNOWN` | Quiet hours (federal + tenant)             | Compliance → quiet-hours preview for the recipient                  | [Quiet-hours preview](/compliance/quiet-hours-preview)                     |
| `TEN_DLC_NOT_REGISTERED`                                                                                                                                                            | 10DLC posture (US A2P)                     | Numbers → US A2P registration                                       | [10DLC registration](/guides/10dlc-registration)                           |
| `TFV_LINT_BLOCKED` / TFV posture missing                                                                                                                                            | Toll-Free Verification (TFV)               | Numbers → Toll-free verification                                    | [Toll-free verification](/guides/toll-free-verification)                   |
| `POLICY_VIOLATION` / `POLICY_SCAN_MODE_LOOKUP_FAILED`                                                                                                                               | Fraud/policy scanner                       | Compliance → policy scanner                                         | [Policy scanner](/compliance/policy-scanner)                               |
| `SPEND_CAP_EXCEEDED`                                                                                                                                                                | Spend cap (per-number, subaccount, or org) | Billing → spend caps                                                | [Fraud caps](/compliance/fraud-caps)                                       |
| `HIPAA_BAA_REQUIRED` / `HIPAA_BAA_GATE_DB_FAIL`                                                                                                                                     | HIPAA BAA gate                             | Organization → HIPAA mode                                           | [HIPAA](/compliance/hipaa)                                                 |
| `EMERGENCY_CALLING_NOT_SUPPORTED`                                                                                                                                                   | Voice destination (emergency short code)   | Destination dial string                                             | [Emergency calling](/voice/emergency-calling)                              |
| `VOICE_DNO_BLOCKED`                                                                                                                                                                 | Voice caller-ID (Do-Not-Originate)         | Organization → DNO override                                         | [Do-Not-Originate](/compliance/do-not-originate)                           |
| `VOICE_COUNTRY_RATE_LIMITED`                                                                                                                                                        | Voice destination (per-country rate)       | Voice traffic view for the country                                  | [Voice destination auto-blocks](/compliance/voice-destination-auto-blocks) |

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](/compliance/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](/guides/toll-free-verification) gate — file Toll-Free
  Verification on that number. 10DLC is not the fix here.
* Ten-digit local long-code sender → the [10DLC](/guides/10dlc-registration)
  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

| Surface                                             | Use                                                                                        |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Dashboard → message detail                          | Carries the structured gate reason; expand the `details` payload                           |
| Contact profile → Consent / suppressions            | Consent, DNC, double-opt-in, preference-center state                                       |
| Channels → Senders                                  | Sender-ID row status; the fix for both sender-ID codes lives here                          |
| Numbers → US A2P registration                       | 10DLC brand/campaign status                                                                |
| Numbers → Toll-free verification                    | TFV filing state                                                                           |
| Billing → spend caps                                | Per-number, subaccount, and org ceilings                                                   |
| Organization → Compliance                           | HIPAA mode, DNC/RND/RMD/litigator toggles, emergency stop                                  |
| Fraud shield → alerts (`/compliance/fraud-reviews`) | Account-level signals that may pre-empt a send — IRSF/toll-fraud, SIM swap, spend velocity |
| `GET /compliance/quiet-hours/preview`               | The federal + tenant dialing-window verdict for a recipient before the next send           |

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

***

## Related readings

* [Compliance send-gate error codes](/compliance/troubleshooting-compliance-error-codes) — per-router walkthroughs with re-check curls.
* [Send Gates](/compliance/send-gates) — full per-gate behavior and endpoint surface.
* [Tenant's posture before the first send](/compliance/tenant-posture-first-run) — the opt-in choices in configuration order.
* [Compliance Posture FAQ](/compliance/posture-faq) — "I enabled the toggle — why is nothing blocked yet?" and the fail-open vs fail-closed summary for every gate.
