Skip to main content

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 500to500 to 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_policy and 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_BLOCKED is 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.
The transactional lane is part of this surface too, and it is a scope predicate, not a toggle: the statute restricts telephone solicitations, so a call positively attributed to the transactional lane (a returned call, an account or delivery notification, a live agent dialling one number by hand) is outside the window’s scope entirely. Section 5 and 6 cover what that does and does not let you do.

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 as marketing 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 / endHour values. 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 500−to−500-to-1,500-per-call floor.
  • Bypass the guard with a skipTcpa flag 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 marketing declaration but deliberately ignores a transactional claim, 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 deny timezone policy, broader blocks. See quiet-hours configuration and preview the combined verdict with quiet-hours preview.
The one-sentence summary: stricter than the federal floor is always available; looser is not offered at any price.

See also