Workflow Control nodes
These nodes control execution flow — branching, looping, delaying, pausing for approval. They form the skeleton around which you build. Most are Pro tier.

Triggers
| Node | Key | Tier | Description |
|---|---|---|---|
| Manual run | workflow.manual | free | Run the workflow manually from the WP admin. The trigger payload contains who started it and when. |
| Scheduled run | workflow.scheduled | free | Run on a recurring schedule (every N minutes/hours/days). Cron-based; respects WordPress cron accuracy. |
| Workflow completed | workflow.on_complete | free | Trigger when the workflow itself finishes (success, partial, failed, or cancelled). Use for cleanup, logging, or chaining workflows. |
Flow control
| Node | Key | Tier | Description |
|---|---|---|---|
| Condition | workflow.router | pro | Branch yes/no by comparing two values with the configured operator (equals, greater than, contains, regex, etc.) |
| Merge branches | workflow.merge | pro | Continue from whichever upstream branch reached this node. Passthrough — no config. |
| Loop items | workflow.loop_items | pro | Iterate over an array. Nodes placed inside the loop execute once per item. Access the current item via {{loop.item}}. Max 1000 iterations. |
| Batch window | workflow.batch_window | pro | Slice a large list into bounded windows (e.g. 50 items per batch). Each window runs as one execution iteration. |
| Try / Catch | workflow.try_catch | pro | Open an error scope: if anything inside try fails, execution routes to catch instead of crashing the workflow. then runs regardless. |
| Retry block | workflow.retry_block | pro | On failure, re-enqueue the enclosed branch with exponential backoff (configurable initial delay, backoff factor, max delay, max attempts). |
| Approval gate | workflow.approval_gate | pro | Pause the workflow until an authorised user approves or rejects. Shows a summary card in WP admin and can send an email to the approver. Has optional auto-approve timeout and cancel-after deadline. |
| Run another workflow | workflow.run_child | pro | Trigger a reusable (function) workflow from this workflow. Pass arguments, receive return value. |
Delay & stop
| Node | Key | Tier | Description |
|---|---|---|---|
| Delay | workflow.delay | pro | Pause the workflow for a configurable number of seconds/minutes/hours/days. Enqueues a resume job. |
| Wait until date | workflow.wait_until | pro | Pause until a specific timestamp. Accepts ISO-8601 or Unix timestamps. |
| Stop workflow | workflow.stop | free | Terminate the current execution intentionally. Use as a dead-end terminal node. |
| Note | workflow.note | free | Add a documentation comment inside the canvas. Rendered as a sticky note. No runtime effect. |
Variables
| Node | Key | Tier | Description |
|---|---|---|---|
| Set variable | workflow.set_variable | free | Write a value into a flow-scoped variable identified by name. Variables persist for the duration of one execution. |
| Read variable | workflow.get_variable | free | Emit the current value of a flow-scoped variable. Pair with Set variable anywhere upstream. |
Versioning
| Node | Key | Tier | Description |
|---|---|---|---|
| Create workflow version | workflow.version_snapshot | pro | Persist a snapshot of the current workflow definition. Stored as a WordPress revision. |
Use variables instead of chaining merge nodes when you need
to pass data between branches that are far apart. Variables can be
read from any downstream node.
to pass data between branches that are far apart. Variables can be
read from any downstream node.