The sole platform-global compliance guard
Every compliance control you configure on this platform is yours. Quiet hours, DNC and consent checks, country blocks, frequency caps: you enable them, you tune them, you switch them off, and the platform follows. They default open, and when an input cannot be resolved they fail open, because the cost of a misconfiguration is yours to price. Exactly one control is different. The US federal TCPA voice dialing window, 8:00 AM to 9:00 PM recipient-local time, is always on for every tenant, accepts no setting from your account, and refuses the dial when it cannot prove the call is lawful. This page is the canonical statement of that rule: what it is, why it alone is global, what its refusals look like, and the definitive list of what you can and cannot do about it.1. The carve-out invariant
The platform’s compliance posture is tenant-owned. Orbit is the conduit and the platform; it does not own, mandate, or globally gate your regulatory compliance. Every control is tenant-configurable, defaults off or open, and fails open on unresolvable input. The single exception is the federal voice dialing window (47 U.S.C. § 227(b)(1)(B), 47 CFR § 64.1200(c)(1)). Restated as a rule:Your tenant quiet-hours and every other compliance control are yours. The federal voice dialing window is the platform’s sole guard that no tenant can toggle.The reason is statutory, not philosophical. The federal penalty is 1,500 per call, assessed against whichever platform originated the call, regardless of which tenant config value caused it. For every other gate, the risk of your misconfiguration is yours, so the control is yours. For the federal window the penalty is not yours to waive, so the control is not yours to disable. That asymmetry is the whole doctrine: ownership follows liability. The guard is implemented once, in the shared compliance package at
packages/compliance/src/voice-guard.ts, so every voice dispatch path
consults the same verdict logic and the posture cannot drift between
paths. Its non-toggleability and fail-closed behavior are held by a
paired pin, packages/compliance/src/__tests__/voice-guard-invariant-68-carve-out.test.ts,
which fails if the guard ever learns a bypass or starts failing open.
This page is the operator-facing statement of the same contract.
2. What the guard means in operator terms
Three properties distinguish it from everything else in your send path:- Always on. It applies to automated voice dispatches to +1 recipients on every account, on every plan, with no setting that names it. There is no screen, API field, or support-runbook step that changes it.
- Fail-closed. When the recipient’s timezone cannot be resolved,
the dial is blocked, not allowed. This is the opposite of your own
gates: at your quiet-hours gate an unresolvable timezone follows
your
unknown_timezone_policyand defaults to allow, because a configuration hiccup should not black-hole your outbound. At the federal guard, unresolvable means the platform cannot prove the call is inside the window, and at a $500-per-call penalty floor, guessing is not an option. The dial blocks even at a nominal 2 PM. - The only refusal you cannot toggle off. Every other “no” in
your send path traces to something you configured, or chose not to
configure. A
422 TCPA_FEDERAL_DIALING_WINDOW_BLOCKEDis the one refusal with no setting behind it. You can always layer stricter controls on top of the federal floor. You can never loosen the floor.
3. The surrounding carve-out surface
The carve-out is narrow on purpose. What routes through the federal guard, and what routes through controls you own:
Two clarifications on the edges of that table:
- Any voice, any automated lane, one guard. The check does not consult your organization settings at all; its only inputs are the recipient number, the resolved timezone, the lane attribution, and the send instant. A campaign path and an AI-voice path that dial the same recipient at the same instant get the same verdict.
- State mini-TCPA overlays are a third, statutory layer. They narrow the federal window (Florida closes at 8 PM and bans Sunday dialing) but never reopen a federally closed hour. They are law, not a tenant toggle; the intersection mechanics live on US calling windows.
4. The four operator failure modes
Four refusals account for nearly every encounter with the guard. Each has its own correction path, and each is documented in depth on a companion page.timezone_unresolved
A +1 recipient whose timezone cannot be derived, typically a
non-NANP E.164 that leaked into a US list, or an unmapped Canadian or
Caribbean area code. The dial blocks with timezone, local_hour,
and next_allowed_at all null, and every retry fails closed
identically until the contact record is corrected. Fix the
recipient’s timezone, or remove the record from the list; scheduling
does not help, because there is no resolvable window to schedule
into. Walkthrough:
Blocked calls in the TCPA window.
Pre-flight a list before dispatch with
quiet-hours preview.
outside_federal_window
A resolved timezone, evaluated before 8 AM or at/after 9 PM
recipient-local. The refusal carries next_allowed_at, the UTC
instant of the next 8 AM in the recipient’s timezone, computed
DST-safely. Schedule against that instant instead of retry-looping;
a campaign launch holds to the smallest next_allowed_at across its
recipients. Same walkthrough and preview tooling as above.
Transactional-lane miss
A call that is genuinely transactional but evaluates against the window anyway, because the lane attribution did not resolve. An absent or unknown lane is read asmarketing by design: inferring a
statutory exemption from a dispatcher’s silence is exactly how a
campaign path would quietly lose its gate. The attribution is derived
from provenance (who placed the call, whether campaign or
artificial-voice markers are present), never from an assertion you
type into a request. If a legitimate returned-call flow is being held
outside the window, the fix is to route it through the dispatcher
whose provenance the resolver recognizes, not to seek an exemption
flag. Explained on
Voice lanes and classification;
the attribution rules themselves are on
voice traffic lane resolution.
Voice-lane misclassification
An AI-voice agent leg, a TTS broadcast, or an unattended dial (answering machine detection requested) is an “artificial or prerecorded voice” in the statute’s words, and the platform classifies it as marketing however the campaign is labelled. If your AI-voice program is blocked outside the window, that is the classifier applying the law, not a defect to route around. The classification signals and their statutory basis: Voice lanes and classification.5. What tenants cannot do
The definitive list, with the statutory reason for each item:- Override the federal window with
startHour/endHourvalues. The 8-to-9 window is set by 47 CFR § 64.1200(c)(1). A tenant-widened window would mean the platform originating calls federal law prohibits, and the per-call penalty attaches regardless of whose setting widened it. Your own quiet-hours can narrow your outbound inside the federal window; nothing you set can widen it. - Fail open on timezone-unresolved recipients. An unprovable call is not an excused call under § 227(b)(1)(B). Fail-open here would mean “TCPA enforcement stops whenever the timezone lookup fails,” which is not a posture the platform can sign for at a 1,500-per-call floor.
- Bypass the guard with a
skipTcpaflag or any metadata key. Consent and contractual arrangements do not lift the dialing window for solicitation calls; the prior-express-consent carve-out is read by non-voice channels only. A bypass key would let any SDK consumer waive federal law by typing one string, so this class of flag was removed from the voice path and is not offered in any form. There is no metadata key, header, or plan tier that buys one.
6. What tenants can do
- Claim the transactional lane the honest way. Route returned
calls, account and delivery notifications, and hand-placed
softphone dials through the direct-dial paths whose provenance the
resolver reads. The resolver derives the lane; note that it honors
a caller’s
marketingdeclaration but deliberately ignores atransactionalclaim, because metadata is caller-supplied and unauthenticated. Where it lives: voice traffic lane resolution and Voice lanes and classification. - Supply origination metadata that adds governance. Campaign, journey, broadcast, flow, and artificial-voice markers in call metadata feed the resolver and can only move a call into the governed lane, never out of it. If you want a flow treated as marketing, the metadata guarantees it; the reverse direction does not exist.
- Configure recording consent. Call-recording disclosure and consent are tenant-owned controls, separate from the dialing window entirely. Set them up on recording consent and the AI-voice consent guard, with the operational runbook in DPA, BAA, and recording consent.
- Tighten everything else, anywhere. Your quiet-hours windows,
country rules, and suppression lists can always be stricter than
the federal floor: narrower hours, a
denytimezone policy, broader blocks. See quiet-hours configuration and preview the combined verdict with quiet-hours preview.
See also
- TCPA federal voice guard — the companion concept page on the guard’s fail-closed design
- Voice Guard decision check — the verdict chain, error body, and worked captures
- Send gates — the full gate stack this guard sits above
- Outbound send gating — how tenant-owned controls chain at send time