> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# US State Calling Windows: Mini-TCPA Overlays

> How Orbit layers per-state mini-TCPA dialing windows and Sunday bans on top of the federal TCPA 8 AM–9 PM window, and how to trace a block to its statute.

# US State Calling Windows

The federal TCPA sets a dialing window of 8 AM–9 PM in the recipient's
local time (47 U.S.C. § 227(b)(1)(B), implemented by 47 CFR
§ 64.1200(c)(1)). Several US states run "mini-TCPA" statutes with
**stricter** hours, day-of-week bans (usually Sunday), or both. Federal
law expressly does not preempt stricter state law (47 U.S.C. § 227(e)),
so the binding outbound rule is always the most restrictive of the two
windows — Orbit computes that intersection for every US (+1) recipient.

This page documents which states carry an overlay, how a recipient is
mapped to a state, how the federal + state windows intersect, and where
the enforcement surfaces. Everything here describes controls **you own
as the tenant** — the platform does not impose a global block beyond the
one federal-only asymmetry documented below. This page is not legal
advice; confirm your obligations with counsel.

## Which states carry an overlay

Orbit maintains an overlay table for the seven states whose statutes set
stricter hours than the federal 8 AM–9 PM window or restrict
day-of-week dialing. States not in this table fall through to the
federal window unchanged.

All windows are recipient-local; the end hour is **exclusive** (8 AM–8 PM
means the last permitted dial starts at 7:59 PM).

| State              | Window                                                            | Blocked days  | Statute                      | Resulting overlap with federal                             |
| ------------------ | ----------------------------------------------------------------- | ------------- | ---------------------------- | ---------------------------------------------------------- |
| Florida (FL)       | 8 AM–8 PM                                                         | Sunday banned | Fla. Stat. § 501.059 (FTSA)  | Shortens the federal end to 8 PM; no Sunday dialing at all |
| Oklahoma (OK)      | 8 AM–8 PM                                                         | —             | Okla. Stat. tit. 15 § 775C.2 | Shortens the federal end to 8 PM                           |
| Mississippi (MS)   | 8 AM–7 PM (conservative rounding of the statutory 7:30 PM cutoff) | Sunday banned | Miss. Code § 77-3-707        | Shortens the federal end to 7 PM; no Sunday dialing        |
| Louisiana (LA)     | 8 AM–8 PM                                                         | Sunday banned | La. R.S. 45:844.13           | Shortens the federal end to 8 PM; no Sunday dialing        |
| Alabama (AL)       | 8 AM–8 PM                                                         | Sunday banned | Ala. Code § 8-19A-7          | Shortens the federal end to 8 PM; no Sunday dialing        |
| Arkansas (AR)      | 8 AM–9 PM (matches federal)                                       | Sunday banned | Ark. Code § 4-99-404         | Federal hours unchanged; no Sunday dialing                 |
| West Virginia (WV) | 8 AM–9 PM (matches federal)                                       | Sunday banned | W. Va. Code § 46A-6F-401     | Federal hours unchanged; no Sunday dialing                 |

<Note>
  Mississippi's statute sets a 7:30 PM end. Orbit encodes this
  conservatively at the hour boundary — the last permitted dial starts
  at 6:59 PM — because the window model resolves to whole hours. The
  full 30-minute cutoff is preserved in the statute citation for legal
  traceability.
</Note>

The intersection is always the most-restrictive-of-the-two:

* **Start hour** — the later of the federal and state starts (currently
  8 AM everywhere).
* **End hour** — the earlier of the federal and state ends.
* **Blocked days** — the union of all day-of-week bans (only states set
  these; federal law has none).

When a state-based block fires, the error details carry the specific
statute citation (e.g. `Fla. Stat. § 501.059`) so you can trace the
decision back to the source statute without reading platform code.

## How the recipient's state is resolved

Orbit maps a US (+1) number to a USPS state code through its NANP area
code. The platform's shared phone library extracts the area code from
the E.164 number; the overlay engine then looks the area code up in a
NANP-area-code → state table that covers every area code in the seven
overlay states (and a representative sample of overlay-free states).

The resolver deliberately keeps single-state assignments only. When a
recipient lands in a state with no overlay, the federal 8 AM–9 PM window
applies unchanged; the resolved state code is still attached to the
decision for telemetry and audit filtering.

A recipient falls through to the federal window when:

* the number is **not** a +1 NANP number (TCPA jurisdiction is
  US-only),
* the area code maps to no state in the table — Canadian and Caribbean
  NANP area codes, and US area codes not yet mapped,
* the area code resolves to a state with no overlay (the common case —
  TX, CA, NY, IL, etc.).

In every fall-through case the federal window applies. A fall-through is
**not** a failed lookup, so it does not trip the timezone-unresolved
fail-closed behaviour described below.

## Where the block is enforced — two paths

The state overlay rides on top of the same recipient-local evaluation
the platform runs for every US voice call, but the enforcement between
the two voice paths differs — one tenant knob and one documented
platform asymmetry:

### 1. Ad-hoc voice: tenant-owned opt-in gate

For 1:1 dashboard/softphone dials, the recipient-local-window decision
(including the state overlay) is **advisory-only by default** — the call
dispatches and the decision is logged for operator visibility. Dialing
windows are tenant policy, and you own where they are enforced.

Flip `quiet_hours.voice.enabled = true` in your organization settings —
see the
[quiet hours guide](/guides/quiet-hours-configuration) — and the same
evaluation becomes a hard hold. A blocked call returns
`422 TCPA_DIALING_WINDOW_BLOCKED` (or `TCPA_TIMEZONE_UNKNOWN` when the
recipient's timezone cannot be resolved) with `next_allowed_at` and, for
state-driven blocks, the statute citation in the error details.

The decision's reason codes let you separate state-driven from
federal-driven blocks in the compliance dashboard and audit log:

| Reason                   | Meaning                                                                     |
| ------------------------ | --------------------------------------------------------------------------- |
| `outside_federal_window` | Recipient-local hour fell outside the federal 8 AM–9 PM window              |
| `outside_state_window`   | A state overlay tightened the window and the hour fell outside it           |
| `state_blocked_day`      | The state overlay bans dialing on this weekday (e.g. a Florida Sunday dial) |

### 2. Campaign + dialer voice: always hard-blocked (federal window)

Campaign, dialer, and automated voice origination (predictive /
progressive / preview / agentless modes, scheduled callbacks, and the
Jambonz-side pre-dial gate) is **always hard-blocked outside the federal
8 AM–9 PM window regardless of your tenant settings** — the one
compliance control that is not tenant-toggleable, per the
[send gates reference](/compliance/send-gates). A blocked call returns
`422 TCPA_FEDERAL_DIALING_WINDOW_BLOCKED`. If the recipient's timezone
cannot be resolved, the call fails closed and is blocked (fail-closed) —
an unresolved timezone is never treated as "in window".

This path is the asymmetry you can't opt out of. The tenant opt-in gate
above only ever **adds** restrictions on top of it; nothing on the
tenant side relaxes the federal hard block for automated voice.

## Worked example — a Sunday dial to Florida vs. Texas

Dials evaluated at **Sunday 8:30 PM** recipient-local:

**Miami, FL (area code 305):**

1. The area-code lookup resolves `305` → `FL`.
2. FL carries an overlay: 8 AM–8 PM, Sunday banned (Fla. Stat.
   § 501.059).
3. The intersected window is 8 AM–8 PM with Sunday banned.
4. Sunday → `state_blocked_day` → blocked. The error details carry
   `Fla. Stat. § 501.059` as the citation plus the next allowed time
   (Monday 8 AM).

**Dallas, TX (area code 214):**

1. The area-code lookup resolves `214` → `TX`.
2. TX carries no overlay → the federal 8 AM–9 PM window applies
   unchanged.
3. At 8:30 PM the hour is still inside 8 AM–9 PM → the call is allowed.
   (After 9 PM it would be `outside_federal_window`.)

On the tenant opt-in gate both outcomes are advisory-only until you
enable the `voice` channel; on the campaign/dialer path only the federal
window is hard-blocked by default — so the TX Sunday 8:30 PM dial
dispatches in both paths, while the FL one is blocked on the opt-in gate
and — once enabled — returns the citation-bearing error above for your
campaign tooling to schedule around.

## Verification and re-verification

The overlay table was **last verified against statute text 2026-05-29**.
Each entry cites its statute so your counsel can re-verify before a
commercial campaign — the table is deliberately small (seven states) to
keep that audit cheap. Statutes shift: Florida's FTSA was amended in
2021 and 2023 without relaxing the time-of-day window, and new
mini-TCPA bills land every session. Treat the citations as the audit
trail, not a substitute for jurisdiction-specific legal review.

## Related

* [Send gates](/compliance/send-gates) — the preview endpoint and the
  federal dialer asymmetry documented above
* [Quiet hours configuration](/guides/quiet-hours-configuration) —
  flipping the tenant opt-in gate and the timezone-resolution policy
