Skip to main content

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 422 with code TCPA_STATE_DIALING_WINDOW_BLOCKED.
  • The error details name the resolved recipient state (e.g. FL) and, for the cataloged overlay states, a citation (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.
  1. 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_now and next_allowed_at answer 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.
  2. Read your tenant posture. Pull GET /api/v1/settings/general and look at the quiet_hours block — which channels you enabled on the org gate, and the hours you’ve set. A held send reports next_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.
  3. 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.
  4. Choose a compliant send window. Inside the recipient’s intersected window, the send admits. For a state_blocked_day reason (a Florida Sunday, for example) no hour on that day survives — reschedule the day, not the hour; the error’s next_allowed_at already points past the ban.
  5. 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.