Logic & flow nodes
Branch on conditions, wait, stop a path, and call external services — the nodes that shape how a workflow flows.
Triggers and actions cover what happens; logic and flow nodes control how the workflow moves — splitting a path in two, pausing, ending a branch, or reaching out to another service.
Decision nodes
A Decision node branches the workflow: it evaluates one or more conditions, then follows the True path when they're met and the False path when they aren't.
Set one up
- Add a Decision node to the canvas.
- Add one or more conditions.
- Choose whether all conditions must be true (AND) or any condition can be true (OR).
- Connect the True and False handles to different next steps.
Condition fields and operators
Each field offers only the operators that make sense for it:
| Field | Operators | Values |
|---|---|---|
| Conversation Status | is | Open · Resolved |
| Conversation Labels | has · does not have · has any · has none | one of your labels (the has any / has none operators just test whether any label is present) |
| Conversation Channel | is | WhatsApp · Facebook · Instagram · Telegram · SMS · Email · Web chat |
| Conversation Starred | is · is not | Yes · No |
| Message Text | equals · does not equal · contains · contains (any case) · does not contain · starts with · ends with | free text |
| 24h Reply Window | is | Open (within 24h) · Closed (over 24h) |
| Variable | equals · does not equal · contains · contains (any case) · does not contain · exists · does not exist · is greater than · is less than | free text or number |
The Variable field reads any value produced earlier in the run by dotted path — an AI-extracted field (ai_extraction.extractedData.sentiment), a webhook payload value (trigger.payload.total), or any step output. Its is greater than / is less than operators compare numerically, so you can branch on amounts, counts, or scores.
Wire up both paths
A Decision needs a next step on both the True and the False handle — publishing is refused while either is loose, because a run landing on the unconnected side would stop dead with nothing to show for it. Send the side you don't care about to an End node.
Delay nodes
A Delay node pauses the workflow for a set time before the next step runs — the backbone of follow-ups and reminders.
Set the delay
Pick a duration and a unit:
- Minutes — quick follow-ups
- Hours — same-day automation
- Days — longer sequences
Or tap a preset: 5m · 15m · 30m · 1h · 2h · 24h · 1d · 3d.
Delays count toward the run timeout
If you set a Run timeout in execution settings, the wait inside a Delay counts against it. A long delay under a short timeout will mark the run failed. Also remember WhatsApp's 24-hour window: a message sent after a long delay may need an approved template.
End nodes
An End node stops a branch. Nothing else runs once the workflow reaches it — but other branches keep running independently.
Every workflow needs at least one, and every step has to lead to one. Publishing checks both: a graph with no End node, or with a step that reaches none, is refused and the error names the steps left hanging. So a Decision where only one side should carry on still wires the other side to an End node.
Drafts are exempt — the editor autosaves a half-built canvas without complaining, and only publishing runs the check. You rarely add an End node by hand either: the editor puts one on the canvas with your first step and keeps one there. Add more when separate paths should finish in visibly different places.
Simple API Request nodes
The Simple API Request node calls an external service directly — no code. It isn't in the left sidebar; add it from the command bar with ⌘K.
Configure the request
- HTTP Method — GET, POST, PUT, PATCH, or DELETE
- Request URL — must start with
http://orhttps://. Supports{{...}}templating. - Headers — custom headers like
AuthorizationorContent-Type - Request Body — for POST, PUT, and PATCH, the payload to send (templating supported)
The response is stored on the step, so downstream nodes can read {{<step>.response.body}}, {{<step>.response.status}}, and header values — pull a value out of the response with a Decision node's Variable condition, or drop it into a later message.
What it's for
- Forward conversation or webhook data to your own endpoint
- Look up a customer in an external CRM and branch on the result
- Trigger an action in another tool on a specific event
- Post to an alerting or logging service (pairs naturally with the Workflow Error trigger)
Keep secrets in headers
A Simple API Request's URL and body travel in a workflow's JSON export exactly as written; headers are stripped. Put API keys and tokens in headers — never in the URL or body — so exporting or sharing a workflow can't leak them.
Related
Action nodes
The steps that do the work — send messages, manage conversations, route, apply AI, and keep your CRM in sync — with the parameters and outputs of each.
AI agent skills
Publish a workflow as a tool your AI agent can call mid-conversation — it answers the agent, then keeps running in the background.