TCPA Known-Litigator Gate
US carriers and industry services (Numeracle, Blacklist Alliance, DNC.com) maintain lists of professional plaintiffs — recipients who file TCPA complaints against senders as a business. A single non-consented A2P SMS to one of them costs 1,500 per message under 47 U.S.C. § 227(b)(3). Orbit’s known-litigator gate blocks those sends before they dispatch. The gate is scoped by design to US (+1, NANP) SMS and MMS traffic — the TCPA is a US statute, and SMS/MMS are the channels that trigger it. Voice traffic carries its own TCPA dialing-window guard; see Send Gates.How the check resolves
Every send on an enabled organization resolves the recipient against a layered chain, cheapest first:- Contact pre-flag — if a bulk import already stamped the contact’s
is_tcpa_litigatorflag, the lookup is skipped entirely and the send resolves flagged without touching the network or the cache. One computation per import, not per send. - Redis cache — a cached verdict from an earlier lookup.
- Numeracle live lookup — used when the operator configured the Numeracle key (Orbit’s hosted SaaS sets it for you).
- Static seed — the platform-bundled litigator list, used as the last-resort source when the live lookup is unavailable.
source back through the audit trail and the
admin lookup surface, so you can tell a cached hit from a live one.
Admin-set manual overrides live in the same cache layer, so a
force-flag or force-clear persists across lookups. See
Admin manual overrides below.
Enable the gate
The gate is off by default. It ships off for non-US operators: a US TCPA check on traffic that never touches +1 recipients adds lookup latency and audit noise for no benefit. Turn it on per organization by settingtcpa_check_enabled in your general settings:
true, every send skips the chain entirely. Setting
false (or never setting the key) means off. The dashboard compliance
settings expose the same toggle.
Voice calls are not gated by this check. The scope is
sms and mms
sends to +1 destinations. To extend litigator screening to outbound
voice, use the admin manual-override surface below or screen
recipients before a campaign with the admin lookup.What a blocked send looks like
A blocked send throws403 TCPA_KNOWN_LITIGATOR_BLOCKED (the code the
class is named once it lands — the legacy listing name
MESSAGING_TCPA_KNOWN_LITIGATOR was replaced). The response body:
details.source tells you which layer flagged the recipient
(contact_flag, cache, numeracle, seed, or manual_override).
When the gate has a confidence score from Numeracle, it passes through
in details.score (0–100, higher is riskier).
Non-US destinations
Non-+1 recipients that match the list get a soft warn rather than
a hard block: the send proceeds, a Sentry breadcrumb and an audit entry
of messages.tcpa_litigator_soft_warn record the flag, and you can
review it post-hoc. The TCPA’s hard-block scope is NANP only.
Consented bypass
If the recipient has anopted_in consent record for the same channel,
the gate allows the send — but writes an audit entry
(messages.tcpa_litigator_consented_bypass) plus a Sentry breadcrumb so
your compliance team can review the decision post-hoc. The audit entry
carries the recipient (redacted), the channel, the flag source, and the
score.
Blocked sends write messages.tcpa_litigator_blocked entries instead.
Query either class from the Admin console or your SIEM sink.
Failure mode: fail-open
An outage in the Redis cache, the database probe, or the Numeracle API does not block your sends. The chain catches the fault, logs a warning, captures it in Sentry, and treats the recipient as un-flagged — the send goes through. This is deliberate: a TCPA preflight outage must never black-hole all outbound messaging. If you would rather fail closed (e.g. during a live complaint), turn the toggle off and rely on the admin manual-override surface — force- flag the affected numbers so they block without depending on upstream lookup availability.Admin manual overrides
Platform staff manage the list itself through the super-admin surface (/dashboard/tcpa-litigators):
GET /admin/compliance/tcpa-litigators/seed— the static seed envelope (source, entry count, last-updated).GET /admin/compliance/tcpa-litigators/lookup?phone=…— run the live chain against one phone to debug a complaint.POST /admin/compliance/tcpa-litigators/override— force-flag or force-clear a number (persists across lookups until removed).DELETE /admin/compliance/tcpa-litigators/override/:phone— drop an override.GET /admin/compliance/tcpa-litigators/overrides— list active overrides with provenance (who set it, when, why).POST /admin/compliance/tcpa-litigators/diff+/merge— bulk-import a CSV of flags.GET /admin/compliance/tcpa-litigators/match-stats— hourly blocked / consented-bypass / soft-warn counts for the sparkline.
Related
- Send Gates — quiet hours, DNC, RND, RMD, and the emergency stop run alongside this gate at send time.
- DNC Scrubbing — the Do-Not-Call pre-flight against your own lists and the national registries.
- Consent Management — the consent records the bypass reads.
- Error Codes — the
TCPA_KNOWN_LITIGATOR_BLOCKEDrow with the full payload shape.