Troubleshooting: state mini-TCPA blocked voice calls
422 TCPA_STATE_DIALING_WINDOW_BLOCKED is the third member of the
dialing-window family, and it behaves differently from the other two
you’ll see on US voice: the block comes from a state mini-TCPA
overlay — a specific recipient state’s statute — not from the plain
federal 8 AM–9 PM window and not from a window you set yourself. The
error details carry the the state that resolved and, where the catalog
carries one, the statute citation, so you always know which overlay
fired.
The triage hub at
Diagnose dialing-window blocked calls
covers the tenant gate code (TCPA_DIALING_WINDOW_BLOCKED) and the
federal window code (TCPA_FEDERAL_DIALING_WINDOW_BLOCKED). This page
works the state variant end-to-end.
Symptom
- An outbound US voice send returns
422with codeTCPA_STATE_DIALING_WINDOW_BLOCKED. - The error
detailsname the resolved recipientstate(e.g.FL) and, for the cataloged overlay states, acitation(e.g.Fla. Stat. § 501.059) — the statute the block traces back to. - Typical triggers: a Florida recipient on a Sunday (FL bans Sunday dialing at any hour), a Mississippi recipient after 7 PM recipient-local (MS ends three hours before the federal window), or a recipient in any overlay state after its tightened end hour (8 PM in FL/OK/LA/AL).
How state overlays work
The federal TCPA dialing window is 8 AM–9 PM recipient-local. Seven US states layer “mini-TCPA” statutes on top with stricter hours, day-of-week bans, or both, and federal law expressly permits stricter state rules — so the binding window for any US recipient is the intersection of the federal window and whatever its state’s overlay says: the earlier end hour, the union of all banned weekdays. The overlay can tighten the window; it can never widen it.
The full derivation — the resolution chain from area code to state, the
conservative rounding of Mississippi’s 7:30 PM statute, and the
statutes behind each row — lives at
US state calling windows. Read it
before you schedule; don’t re-derive the table from the error.
Ad-hoc 1:1 voice outside a window dispatches through with an advisory
log by default and only gets held when you’ve enabled the voice
channel on your quiet-hours gate — so where this variant surfaces as a
422 is usually a send path you deliberately gated (campaign or
automated voice on the org quiet-hours configuration, or an old
enforced integration). Scheduled US campaign traffic follows your
configured quiet-hours posture; where a send is held, the platform
defers the contact and re-attempts inside the window rather than
returning a hard error.
Where to check and fix
The only lever in a dialing-window block is timing: pick a schedule the intersected federal + overlay window admits, and these surfaces tell you what posture you’ll clear.-
Preview before you schedule. Run the read-only check against a
sample of the list — one preview per distinct area code covers every
recipient that shares its resolution:
allowed_nowandnext_allowed_atanswer the whole question; for overlay states the preview evaluates the intersected federal + state window. Sample your list by area code before the campaign launches instead of learning the overlay from blocked attempts. -
Read your tenant posture. Pull
GET /api/v1/settings/generaland look at thequiet_hoursblock — which channels you enabled on the org gate, and the hours you’ve set. A held send reportsnext_allowed_at; schedule at that timestamp instead of retrying. Your own gate can only ever add restrictions on top of the intersected window — nothing you set relaxes it. - Compliance posture map. Your tenant compliance posture is the one-page map of which controls are yours to switch, what defaults open, and where each switch lives. Use it to confirm which layer (your gate or the intersected window) is actually holding the send.
-
Choose a compliant send window. Inside the recipient’s
intersected window, the send admits. For a
state_blocked_dayreason (a Florida Sunday, for example) no hour on that day survives — reschedule the day, not the hour; the error’snext_allowed_atalready points past the ban. - When self-serve resolves nothing, escalate per the capture checklist on the main dialing-window troubleshooting page — full error body, recipient E.164 + area code, call path, org ID, and the preview response for the same number.
The three codes, mapped to their posture control
Every 422 in this family routes back to one of three levels. The whole map — tenant-owned controls only, no platform mandate here:TCPA_TIMEZONE_UNKNOWN sits alongside these: the resolver failed
before any window math, and the failure posture comes from your
unknown_timezone_policy on the tenant gate (skip passes, deny
blocks, enforce_utc evaluates against UTC). Fix it as data, not
policy — pass a timezone_override hint or repair the area code.
Related
- Diagnose dialing-window blocked calls — the hub page for the tenant gate and the federal variant; escalate from here when self-serve above resolves nothing.
- US state calling windows — the
overlay derivation, the resolution chain, and the statutes every
citationpoints back to. - Quiet hours configuration — the
tenant gate knobs that decide whether you ever see a 422 here at
all, and the
unknown_timezone_policyposture. - Your tenant compliance posture — the full toggle map across every compliance surface you own.
- Error codes reference — the full TCPA entry set this family of codes works from.