Configure Your Tenant’s Compliance Posture Before the First Send
The Compliance section documents each send-time gate on its own page — quiet hours, DNC, RND, suppression, the preference center, the emergency stop. This guide is the runbook across all of them: the order a new tenant configures the gates in before its first send, the dashboard path and API endpoint for each write, the default every control ships with, and what leaving a gate off actually permits. It extends the posture map — that page inventories every toggle; this one walks you through flipping them.The one thing to know before you start
Every gate below ships off or empty. A new tenant’s sends are not held by quiet hours, not scrubbed against DNC or RND, and no preference center or suppression entries exist until you create them. The posture is additive: you tighten from an open default, one control at a time. Orbit enforces what you configure — it never mandates a posture for you, and only the short list of platform rails in what is not tenant-toggleable blocks traffic you didn’t hold yourself. Work the steps in order. Each later step reads the surfaces the earlier ones populate.Step 1 — Record the consent baseline
Consent is the layer the send-time gates read first: an explicit consent record is what the quiet-hours consent carve-out checks, what the DNC check reports as a source, and what your compliance-health score counts. Record consent per channel before the first send:- API:
POST /api/v1/compliance/consent— see Consent Management. - Dashboard: consent records are also writable from the contact profile.
- Default: no consent records exist. Nothing is blocked by this, but nothing has cover either — consent coverage is 30% of the compliance-health score, and a recipient without a consent record won’t pass the quiet-hours carve-out in step 3.
(contact, channel) pair with the
capture source (the 10DLC campaign reviewers ask for that provenance).
For GDPR traffic, fill lawful_basis on the same write. Keep the
proof: GET /api/v1/compliance/consent/export downloads the
tenant-wide proof-of-record for an audit
(Export Consent & Suppression Records).
Step 2 — Wire the opt-out paths
Consent you capture must be cheap to withdraw. Two configuration surfaces cover it, and both feed the same suppression layer every send reads:- Import your legacy suppression list before the first send if
you are migrating from another platform —
POST /api/v1/compliance/suppression-list/importaccepts a CSV upload. Phone and WhatsApp rows default to scopeall, which gates voice and dialer traffic too; email rows default to scopeemail. Details in Opt-Out & Suppression Lists. - Configure a preference center —
POST /api/v1/compliance/preference-center, then mint per-contact signed links withPOST …/preference-center/linkand publish them in your footer or welcome flow. A contact who opts out through the link lands on the same suppression list a STOP keyword or a Consent API opt-out would — structured now instead of as a support ticket later. Details in Send Gates → Preference center.
- Defaults: the suppression list is empty until STOP keywords, opt-outs, or imports populate it — and suppression is the one gate that is fail-closed for entries that exist: a suppressed address is dropped before dispatch regardless of how the entry got there. The preference center has no public page until you create it over the API.
- Leaving it off: your first campaign starts honoring keywords the moment it runs, but it starts with zero entries — every legacy opt-out you failed to import becomes a complaint or a carrier rejection instead of a suppressed send.
Step 3 — Set quiet hours per channel
Two knobs, both off by default:- The per-channel org gate. Each channel’s quiet-hours toggle
ships off — a new tenant’s SMS, WhatsApp, and voice sends are not
held by any window until you enable the channel. Enable it per
channel by writing the
quiet_hoursblock throughPUT /api/v1/settings/generalwithsettings.quiet_hours.<channel>.enabled(thevoicechannel can additionally be flipped from Settings → Voice in the dashboard). Windows default to 08:00–21:00 recipient-local for SMS/voice and 09:00–21:00 for WhatsApp/Meta channels once enabled; set your ownstart_hour/end_hourto override. - The campaign fallback window. Drip and journey sends that
carry no window of their own inherit the platform default
21:00–09:00 until you write
PUT /api/v1/campaigns/quiet-hours/settings— or set Settings → Campaign limits → Default quiet hours in the dashboard.
consent_overrides_quiet_hours flag defaults to true: a
recipient with an explicit consent record from step 1 stays reachable
inside the window. Set it to false only if you want consented
recipients held too.
- Leaving them off: sends dispatch at any hour. For US traffic that is a TCPA exposure on every message outside 08:00–21:00 recipient-local — the per-channel gate is the control that holds them, and it is off until you flip it.
- Verify before rollout:
GET /api/v1/compliance/quiet-hours/previewanswers “would this send, to this recipient, be held right now — and until when?” without sending.
Step 4 — Read the country rules before you launch in a market
Before the first send to a new country, read what that market requires:GET /api/v1/compliance/country-rules?channel=sms®ion=EU— per country and channel: allowed sender types, whether Sender-ID registration isnone/recommended/required, STOP-keyword requirements, two-way support, DLR support, and default throughput.
registration: required, complete
Sender-ID registration before
the first send, because that surface is fail-closed — A2P SMS to a
country requiring registration is blocked until the entry is
approved. Full walkthrough in
Country Compliance Requirements.
Step 5 — Acknowledge and enable the DNC and RND pre-flight checks
Two pre-send screening endpoints, both off by default, both behind a per-organization opt-in that is an acknowledgment, not just a flag. DNC pre-flight.GET /api/v1/compliance/dnc/check reports whether
a number is on any Do-Not-Call source your send path enforces — your
contact DNC flag, the platform DNC list, your suppression list, or a
consent opt-out. Enable it in Settings → Compliance (the DNC
pre-flight card) with the acknowledgment checked, or by writing
settings.dnc_sync_enabled: true through
PUT /api/v1/settings/general.
- Default: off — the endpoint returns
403 DNC_SYNC_NOT_ENABLEDuntil you opt in. - Why the acknowledgment exists: until a federal register snapshot
is synced to the platform, a number that appears only on the FTC
list reads back as
on_dnc: false. The toggle confirms you understand the check is your own list plus whatever registries have synced, not a guaranteed national scrub. Readfederal_feeds_syncedon every response to see which state you’re in. - Leaving it off: no pre-flight check at all; your send-path suppression from step 2 still drops your own opt-outs, but nothing screens against a registry before you dial.
GET /api/v1/compliance/rnd/check
queries the FCC Reassigned Numbers Database for the
(phone, consent_date) pair — the § 227 safe harbor. Enable with
PUT /api/v1/compliance/rnd/settings ({"enabled": true}) or from
Settings → Compliance.
- Default: off — the endpoint returns
403 RND_SCRUB_NOT_ENABLED. - Fail-closed enable: turning it on before the FCC feed is
connected is refused with
409 RND_FEED_NOT_CONFIGURED— Orbit will not let you flip a switch that screens against nothing. Until the feed is synced every verdict degrades tono_dataand no safe harbor applies.
Step 6 — Know where the emergency stop is
The org-wide kill switch, inactive by default and not toggleable in advance — you just need to know it exists before you need it:POST /api/v1/compliance/emergency-stop/activatewith areason(owner/admin key) halts all outbound SMS, MMS, voice, and dialer traffic in one call.GET …/emergency-stopreports the state;POST …/deactivatelifts it.
End to end: a US SMS marketer’s first-run posture
A concrete run of the six steps for a tenant sending A2P marketing SMS to US recipients under TCPA. Each step states what you do; the ratchet note is what breaks if you skip it.-
Capture consent at opt-in and record it the moment a recipient
grants it, before the first campaign:
-
Import the legacy opt-out list — one CSV before the first
send, so inherited opt-outs are suppressed from day one:
Then set an ongoing export cadence for your own records:
GET /compliance/suppression-list/export?format=csvon whatever schedule your counsel wants — weekly is common (Opt-Out & Suppression Lists). -
Complete 10DLC brand and campaign registration
(10DLC guide) — US long-code traffic
without it degrades regardless of the gates above, and
country-rulesreports registration as required forUS/sms(step 4 in reverse: this is what the check tells you to do). -
Enable the SMS quiet-hours gate — 08:00–21:00 recipient-local
is the platform window; keep
consent_overrides_quiet_hourstrue so consented recipients stay reachable:Thequiet_hourskey is replaced wholesale on this write — put the full tree in the body, not just the channel you are changing (Quiet hours configuration). Then verify withGET /compliance/quiet-hours/previewbefore the first campaign. -
Enable DNC pre-flight and run
GET /compliance/dnc/checkagainst campaign lists before each send (once per number; cache the result per campaign batch):In the dashboard the same change is Settings → Compliance → DNC pre-flight, with the acknowledgment checked. - Wire the preference center and publish signed links in your message footer flow, so opt-outs arrive structured — and confirm your owner/admin key can call the emergency stop.
The posture checklist
One row per control, in configuration order. “Consequence if left” is the send-time reality of the default, not a mandate — all of this is yours to set.
Two reminders that don’t fit in a cell: suppression entries are
fail-closed once they exist (row 2 is a one-way improvement), and
campaign/dialer voice to US recipients is hard-blocked outside
the federal window with no tenant toggle — see
State Calling Windows.
Verify the posture you just built
After the flips, read the two signal surfaces — they report what the send path will actually do:GET /compliance/health(plus/health/numbersand/health/campaigns) — the 0–100 score per organization, sender, and campaign, with ranked warnings. Consent coverage from step 1 shows up here. Compliance Health Scores.GET /compliance/quiet-hours/preview— the dry-run for step 3 and step 4 of the example. If it says a send would be held until a time, schedule to that time instead of retrying into the window.
From first-run to production go-live
The six steps above harden the send-time gates. Before you move a regulated channel to production, that hardening joins five heavier surfaces that also have a tenant-owned control. Name each one before you launch:- Identity first. Upload KYC documents and build at least one
compliance profile before numbers, registrations, or scrub toggles
— everything downstream references it. Control:
POST /api/v1/compliance/kyc/documents, referenced by document ID. KYC Documents & the Compliance-Profile Lifecycle. - Consent at opt-in. Record consent the moment each recipient
grants it, per channel — step 1 of the runbook above. Control:
POST /api/v1/compliance/consent. Consent Management. - Registry pre-flight (voice/dialer). Opt into the DNC check,
and add RND for US voice when you need the § 227 safe harbor —
steps 5 and 5a. Controls:
GET /compliance/dnc/check,PUT /compliance/rnd/settings. DNC Scrubbing. - Export your proof. Before the first campaign, set the cadence
that downloads consent proof and the suppression ledger — the
audit file a TCPA or GDPR inquiry asks for. Controls:
GET /compliance/consent/exportandGET /compliance/suppression-list/export?format=csv. Export Consent & Suppression Records. - Market rules. Read
GET /compliance/country-rulesper market (step 4), finish every registration it flags asrequired, then close with the checklist above. Controls: the read-only country-rules endpoint plusPOST /compliance/sender-id-registrations. Country Compliance Requirements.
GET /compliance/health and GET /compliance/quiet-hours/preview
report what the send path will actually do before real traffic runs
on it.
Common “gated surface” causes
Operators most often land on Troubleshoot a Pending Number or Sender ID, but the gating surfaces below trigger on un-set controls, not pending approvals. Map the symptom to the control you skipped:Sample rollout order (US voice + SMS + WhatsApp)
One ordering that moves the controls above, not a mandate. Work it in the sequence here; a wrong order usually means re-doing a toggle after the identity or registration surface it references lands.- KYC documents + compliance profile — the identity surface every later step references. KYC Documents.
- Consent capture and suppression import — the records everything else reads. Consent Management, Opt-Out & Suppression.
- DNC (and RND for US voice) pre-flight — opt in before dialing lists exist. DNC Scrubbing.
- Sender-ID registrations and the registration gates — flip the channels’ quiet-hours and preference-center writes only after traffic can flow. Sender-ID Registration.
- country-rules per market at expansion time — re-run this before each new country or channel. Country Requirements.
- Close with the FAQ’s mental model — what defaults open, what fails open versus closed, and where the hard rails you can’t unset live. Compliance Posture FAQ.
Where the hard rail ends
The gates above are tenant-owned and default open. One is not: campaign and dialer voice to US recipients hard-blocks outside the federal 8 AM–9 PM recipient-local window, on the platform default 21:00–09:00 window for drip sends, with state overlays on top. That is the one422 you cannot unset — every other gate on this page yields to a
tenant toggle. Full mechanics in
TCPA federal voice guard —
the posture checklist above covers the gates you own.
Related references
- Posture overview — the full toggle map this runbook walks through, including what is not tenant-toggleable.
- Send Gates — per-gate request/response reference for every endpoint above.
- Quiet hours configuration — both quiet-hours knobs, carve-outs, and the voice exception.
- DNC Scrubbing — the scrub chain and the fail-open caveat behind the DNC acknowledgment.
- Export Consent & Suppression Records — the audit-proof downloads for consent and the suppression ledger.
- Country Compliance Requirements — per-country sender rules and required documents.
- Troubleshoot a Pending Number or Sender ID — approval-side gating for numbers and sender IDs.
- Compliance Posture FAQ — the mental model for defaults-open gates and approvals with external lead time.
- Opt-Out & Suppression Lists — scopes, STOP keywords, and CSV import format.
- Assembling a GDPR Posture End to End — the sibling runbook for EU traffic.
- Go-live checklist — the non-compliance pre-launch list this posture slots into.