Pre-Send Policy Scanner & DLP
Every outbound message (SMS, MMS, WhatsApp, email, RCS, and IM channels) runs through a policy scanner before it dispatches to the carrier. The scanner returns a verdict ofpass, warn, or block, and your organization’s scan
mode decides what happens next: block the send, let it through and record the
finding, or skip the scan entirely.
All endpoints below are rooted at https://api.orbit.devotel.io.
The policy scanner is a tenant-owned control. You set the mode for your
own organization; it defaults to
warn (scan everything, block nothing).
Orbit never uses it to gate your traffic globally. This page is not legal
advice — confirm your TCPA / GDPR / PCI obligations with counsel.What the scanner checks
Each rule applies to specific channels, so a channel with no applicable rules returns a cleanpass with zero violations.
Verdicts and the enforcement mode
The scanner collapses all matched rules into one verdict:pass— no violations. The send proceeds.warn— at least one advisory rule fired. The send proceeds and the violations are recorded on the message metadata and returned in theX-Policy-Violationsresponse header.block— at least one blocking rule fired (SHAFT content, a spam score ≥ 80, DLP, or an unregistered-sender country gate), or TCPA quiet-hours promoted to enforceable while the org is instrictmode on the SMS marketing lane.
New organizations read back
warn until an owner sets a mode explicitly.
Set the scan mode
Read the current mode (any workspace member):200
Error taxonomy on the send path
Three distinct failure surfaces come out of the scanner, so you can tell a real content block from a scanner outage:
A violation response looks like this:
400/422
enforce, block, or warn),
an operator-facing message, and a suggestion. Hate-speech violations
deliberately never echo the matched slur back.
DLP — sensitive-data scanning
The DLP rule runs on every channel because a card number is equally sensitive on SMS, WhatsApp, email, or RCS. It detects:- Credit card / PAN — validated with the Luhn checksum and a card-network prefix/length check (Visa, Mastercard, Amex, Diners, Discover, JCB, UnionPay). A random grouped number — a phone list, an order id — is rejected on the checksum, so false positives are rare.
- US Social Security number — requires an explicit dash or space separator and passes the SSA’s area/group/serial validity rules.
- IBAN — validated with the ISO 7064 mod-97 checksum and the per-country registry length. Space-grouped IBANs are handled.
- Passport — opt-in only. A bare 6–9 character token is too ambiguous to
block by default, so detection additionally requires a
passport-context keyword next to the token. Ask support if you want this enabled for your organization.
[REDACTED_CARD], [REDACTED_SSN], [REDACTED_IBAN], [REDACTED_PASSPORT])
before dispatch.
DLP is on by default at severity block on the universal PCI/PII floor
(cards, SSN, IBAN). Contact support to tune it (flag-only warn, auto-redact
redact, narrow the categories, or opt into passport detection).
Compose-time live linter
You don’t have to wait for a send to find a violation.POST /messages/lint
runs the same scanner against a draft body and returns the same verdict,
violations, spam score, and matched spam rules — without sending anything.
The dashboard compose dialog calls it debounced as you type so inline warnings
appear before you send.
200
sms, whatsapp, email, and rcs channels plus optional
to, subject, from_name, recipient_country, and scheduled_at hints,
so the linter sees the same context the send-path scan would. You can also
pass ai: true (and optional brand_name / industry) to augment the
keyword scan with an AI brand-safety pass for impersonation and phishing
patterns; it fails open on an AI outage.
/messages/lint is read-only and intentionally rate-limited generously
(120 requests per minute per organization) to support live-as-you-type
debounce patterns.Tenancy posture
The policy scanner is your control, on your traffic. An owner in your organization picks the mode, and the read endpoint is open to any member so your compliance panel can display it. Orbit doesn’t gate outbound on the scanner globally, and no platform-wide default is forced on you beyond thewarn starting point. The changes you make are written to your own audit log
(settings.policy_scan_mode_updated).
Related pages
- Settings API reference — compliance — the full
/settings/compliance/*surface - Error codes —
POLICY_VIOLATION,POLICY_SCAN_MODE_LOOKUP_FAILED - Send gates — BAA, quiet hours, DNC, RND gates that run alongside the scanner
- Opt-outs & suppression — how opt-out keywords set suppression