Send Gates
Beyond consent and suppression, several regulatory checks run at send time. Orbit groups them as send gates: each one can hold or drop a message or call before it dispatches. This page covers the gates you configure or query directly. All endpoints below are rooted athttps://api.orbit.devotel.io/api/v1/compliance.
Quiet hours
Quiet-hours rules block messages and calls that would land outside a recipient’s permitted local hours (e.g. the TCPA 8 am–9 pm window). Orbit resolves the recipient’s local time from their phone number’s region.GET /quiet-hours/preview tells you whether a send is allowed right
now, and when the next allowed time is — use it to schedule around the
window.
Quiet-hours gating is opt-in per channel and organization — every
channel ships with the toggle off, so a new tenant’s SMS, WhatsApp, and
other sends are not held by quiet hours until you enable the gate for
that channel. Turn it on per channel from your organization’s
quiet-hours settings in the Orbit dashboard; the listed windows then
apply automatically.
Once enabled, the windows are 08:00–21:00 (recipient-local) for
SMS/voice and 09:00–21:00 for WhatsApp/Meta channels unless you set
your own
start_hour/end_hour. Email, fax, and push are not
quiet-hours gated.
US voice TCPA window: advisory for ad-hoc dials, a hard block for
campaigns. For outbound voice calls to US (+1) recipients, Orbit
evaluates the federal TCPA 8 am–9 pm recipient-local dialing window on
every call — but how it enforces the result depends on the call path:
- Ad-hoc 1:1 dialing from the dashboard is advisory by default. A call outside the window records a structured advisory log but still dispatches. To hold these calls instead, enable the voice quiet-hours toggle for your organization; enabling it applies the 8 am–9 pm window as a hard hold.
- Campaign and dialer voice traffic is always hard-blocked outside
the window, regardless of your tenant settings. A campaign or dialer
call placed outside 8 am–9 pm recipient-local is rejected with
422 TCPA_FEDERAL_DIALING_WINDOW_BLOCKED— there is no per-organization opt-out for automated or bulk voice, and the voice quiet-hours toggle does not relax it. If the recipient’s timezone cannot be resolved, the call fails closed and is also blocked.
GET /quiet-hours/preview to find the next allowed time.DNC — Do Not Call
GET /dnc/check reports whether a number is on a Do-Not-Call list
before you dial or text it.
source indicates which layer flagged the number (your contact
DNC flag, the DNC list, the suppression list, or a consent opt-out).
The gate applies only while no Do-Not-Call feed is synced. In
that state the endpoint is held behind the org setting
dnc_sync_enabled (default off) and returns
403 DNC_SYNC_NOT_ENABLED until you opt in — acknowledging that
Orbit isn’t yet scrubbing against a federal register for you, so a
number only on the FTC list reads back as on_dnc: false.Once Orbit has a federal, state, or TCR snapshot synced, the
dnc_sync_enabled gate is bypassed: the endpoint serves directly
and federal_feeds_synced returns true. Read that field on every
response to confirm whether a federal scrub is actually backing the
result.RND — Reassigned Numbers Database
US phone numbers get reassigned to new people. The FCC’s Reassigned Numbers Database lets you check whether a number was disconnected after the date you obtained consent — a “safe harbor” against texting or calling the wrong person.GET /rnd/check takes the phone and the consent_date
(YYYY-MM-DD):
feed_synced is false this is the only response the endpoint
returns, whatever the phone and consent_date — no disconnect dates are
on record yet, so every verdict degrades to no_data.
status is one of yes, no, or no_data — the FCC database’s verdict
for the (phone, consent_date) pair:
safe_harbor is true only when status is no. last_disconnect_date
is the most-recent permanent-disconnect date on record (null when none),
and feed_synced is false until RND feed ingestion is configured — while
it is false every verdict is no_data.
Gated behind rnd_scrub_enabled (default off); returns
403 RND_SCRUB_NOT_ENABLED while disabled.
Enabling and disabling RND scrubbing
UsePUT /api/v1/compliance/rnd/settings to control the rnd_scrub_enabled flag:
RND_FEED_NOT_CONFIGURED until the FCC Reassigned Numbers Database feed (SomosGov’s reassigned.us feed) is connected to your deployment. Turning the feature on before the feed is ingested would create a compliance control that performs no actual reassigned-number screening — you’d flip the flag, but every /rnd/check lookup would still return no_data. The 409 block prevents this false sense of protection.
Disabling (enabled: false) is always permitted, even if no feed is yet connected.
RMD — Robocall Mitigation Database
US voice originators must file a Robocall Mitigation Database registration describing their STIR/SHAKEN status and mitigation plan. Orbit stores and tracks your filing.GET /rmd— read your registration plus arecertificationblock withrenewal_deadlineandaction_required.POST /rmd— create or update the filing.POST /rmd/submit→ statussubmitted.POST /rmd/certify→ statusactive.POST /rmd/remediation(with areason) → statusremediation_required.POST /rmd/resolve→ back toactive.POST /rmd/withdraw→ statuswithdrawn.
stir_shaken_status is complete, partial, or none. A
mitigation_plan is required unless status is complete. The
lifecycle is draft → submitted → active → remediation_required → active | withdrawn.
Emergency stop
The emergency stop is an org-wide kill switch that immediately halts all outbound SMS, MMS, voice, and dialer traffic — use it during an incident (a misconfigured campaign, a compromised key, a content mistake).GET /emergency-stop returns the current active flag plus
activated_at, activated_by, and reason. Activation and
deactivation require an admin/owner key.
Preference center
The preference center is a public, token-signed page where a contact manages their own channel opt-ins, message frequency, and (if enabled) requests data deletion — without logging in. Updates flow straight into consent, suppression, and the STOP-fence. Configure it once, then generate a per-contact link:POST /preference-center(admin/owner) — set branding, thechannelsoffered, frequency options, and the GDPR-delete toggle.GET /preference-center— read the current config.POST /preference-center/linkwith{ "contactId": "cnt_…" }— mint a signed link (HMAC-SHA256, 30-day TTL) to email or text to the contact.
GET/PUT /compliance/preferences/{token}) to view and update their
preferences. Opting out here records a consent revocation, adds a
suppression entry, and sets the STOP-fence; opting back in reverses
it.
Country rules
GET /country-rules is the read-only regulatory reference behind
these gates — per country and channel it reports the allowed sender
types, whether Sender-ID registration is none / recommended /
required, STOP-keyword requirements, two-way support, DLR support,
and default throughput.
Related references
- Country Compliance Requirements — per-country sender types, registration, and documentation.
- Restricted & Prohibited Industries — which industries and content are restricted or banned.
- Opt-Out & Suppression Lists — the suppression layer DNC and the preference center feed.
- Consent Management — the consent records updated by the preference center.
-
Sender-ID Registration — the
registration
country-rulesreports as required. - API Reference → Compliance — full request/response schemas (regenerated from the live API).