execution_type that controls when it runs once its step is reached. There are four models — and because runs are durable, a task can safely wait hours or days without losing progress.
execution_type | Behavior |
|---|---|
immediate | Run right away (default) |
scheduled | Wait for a delay, a fixed time, or the next cron occurrence |
windowed | Run only inside a recurring time window |
signaled | Wait for an external signal, with a timeout |
immediate requires an execution_config — omitting it is a validation error.
Immediate
The default. The task executes as soon as its step starts. You can omitexecution_type entirely.
Scheduled
Delays execution using one of threeschedule_type variants:
schedule_type | Config field | Behavior |
|---|---|---|
delay | delay | Wait a fixed duration (e.g., "30s", "5m", "2h"), then run |
fixed | run_at | Wait until a specific ISO 8601 datetime, then run |
cron | cron | Wait until the next occurrence of a cron expression (evaluated in UTC), then run |
delay variant looks like {"schedule_type": "delay", "delay": "30m"}; a fixed variant looks like {"schedule_type": "fixed", "run_at": "2026-08-01T09:00:00Z"}.
A
cron scheduled task fires once, at the next occurrence within its execution. To run an entire definition on a repeating cadence, use a scheduled job instead.Windowed
Restricts execution to a recurring time window — for example, only calling prospects during business hours. The config takes atimezone, a window with allowed days plus start_time/end_time (24-hour "HH:MM"), and an outside_window policy:
outside_window | Behavior when triggered outside the window |
|---|---|
schedule_next | Wait until the window next opens, then run (default) |
skip | Return a skipped result ({"_skipped": true, "reason": "outside_window"}) immediately |
Signaled
Pauses the task until an external signal arrives — a webhook callback or a polled condition — or a timeout elapses:| Field | Description |
|---|---|
signal_type | webhook (default) or polling |
timeout | How long to wait (e.g., "1h", "24h") |
on_timeout | What to do if no signal arrives: continue (default), abort_step, or abort_execution |
on_timeout_output | With on_timeout: continue, the output the task returns on timeout |
continue— the task resolves withon_timeout_outputand the flow proceeds; downstream expressions can branch on it (e.g., an exit condition checking{{approval.wait_for_approval.output.approved}} == false).abort_step— the task resolves with an error result, subject to itson_failurepolicy.abort_execution— the whole execution fails.