The window that is enforced
08:00 until 21:00, every day of the week, in the recipient’s local time. That is the federal window, and it is what the platform applies to everymarketing message before it goes out.
Two properties are worth knowing before you meet them:
The check happens when the message is about to leave, not when the task starts. Outbound work is paced, so a message can be queued at 20:55 and reach the front of the queue at 21:10. Checking at the start of the task would have blessed that send half an hour before it happened; checking where the queue delay ends is the only place the answer is still true.
A held message does not hold the queue behind it. It steps out of line into a held state with a computed release time, and the next message is sent immediately — including a transactional one, and including one addressed to a recipient three time zones away for whom it is the middle of the afternoon. One recipient’s clock never becomes everybody’s.
Working out where the recipient is
A window in the recipient’s local time needs a time zone, and a text message does not carry one. So the send task declares which parts of your record say where the recipient is, and the platform asks them in order, using the first one that answers:
Each one is an expression evaluated against the flow’s context, exactly like a task parameter. Supply as many or as few as your records actually carry — each is optional, and an unanswerable one simply falls through to the next.
Only the answer travels onward. The ZIP and the state stay on the record; what is carried alongside the queued message is a time-zone name and nothing else.
When a state spans two time zones
Fourteen US states span more than one zone — Florida, Texas, Michigan, Indiana, Kentucky, Alaska and eight others. A recipient resolved by state alone in one of those cannot be placed in a single zone, so they are treated as unknown and take the conservative window below. It is always the later answer, never the earlier one. Both of the other two sources are unaffected: a record carrying a time zone, or a ZIP code, resolves such a recipient precisely. If your leads are in split states and you want the full window, carry one of those.When nothing resolves
An unknown location does not mean “send anyway” and it does not mean “fail”. It means send only during hours that are legal in every US time zone — the overlap of 08:00–21:00 across Hawaii at one end and the east coast at the other:
The band is bounded at the opening end by Hawaii’s 08:00 — which is 18:00 UTC all year, since Hawaii does not observe daylight saving — and at the closing end by 21:00 on the east coast. It is computed from real time-zone rules on the day, not from a stored offset, so it is correct across both daylight-saving transitions rather than an hour wrong for a fortnight twice a year.
Marketing and transactional
Each send task declares what kind of message it sends, and that is what decides whether the window applies:marketing is the default deliberately: it is the protected value, so it has to be the one a task gets by saying nothing about the field. The other ordering fails invisibly — nothing errors, nothing looks wrong, and the first signal is a complaint.
Declaring
transactional requires an administrator. A non-admin save is refused with a 422 naming the step and the field. The declaration is recorded on the flow, so who switched off a legal protection and on which step is answerable afterwards.The vocabulary is exactly those two values. There is no account-level switch and no per-run override — a single toggle that could turn the protection off everywhere is precisely what this design rejects.A held message
A message held for quiet hours is a first-class, visible state, not a silent pause. On the run.GET /flows/executions/{execution_id} carries a quiet_hours_hold object while the message is held:
status says whether the run is parked, and quiet_hours_hold says whether a message is waiting on a clock. The presence of the object is the whole signal — null (the overwhelmingly common case) means no legal-hours hold is in force, which is not the same as “not parked”.
Two details when you read it:
zoneis the time zone the window was evaluated in.nullmeans the recipient’s location was unknown and the conservative window above is in force. It never means UTC.- The object is populated by the detail route only. The executions list leaves it out, the same way it leaves out per-step detail.
Neither is terminal, so a hold never closes an open stream — a detail view can sit on a run held overnight and pick the story back up in the morning.
A held message keeps its place in line. When the window opens it returns to the queue in the position it left, ahead of everything queued behind it while it waited. Nothing is re-sent and nothing is dropped.
A release can lag the window opening by a few minutes. Holds are released as part of the ordinary dispatch cycle rather than by a clock ticking alongside it, so on an account with other work in flight a release is picked up promptly, and on an otherwise idle account it can wait up to about five minutes. This is the same behaviour a scheduled pause resume has, for the same reason.
Stricter state rules
Several US states impose windows narrower than the federal one, and the platform maintains a dated table of them. The table is current as of 2026-09-03. These rules change, so the date is published with it rather than left implicit — a table with no as-of date is one nobody can tell is stale. A state that is absent from the table uses the federal window rather than falling into a gap.Holiday restrictions are not covered. Six states in the table above — AL, LA, MS, PA, RI and UT — additionally restrict calling on certain public holidays. Those restrictions are not enforced by the platform and are not represented in the table. If they apply to you, handle them in your own scheduling.Nebraska is deliberately absent. The available sources contradict each other about what its rule is and whom it applies to, and a compliance table is the wrong place to record a guess — so Nebraska takes the federal window until a citable answer exists.
Next steps
SMS
The two send steps, both sender forms, and what a send reports.
Dispatch pacing
Why a message waits for reasons other than the clock, and what a pause holds.
Execution models
Confine a task to your own recurring local-time window, per record.
Execution streaming
Watch a run hold and release live, without polling.