Workflow Chain Engine Node Reference
{variable} placeholders, and every node's work shows up in the run's step log. If you have not drawn a flow yet, start with getting started.
HTTP Request
The workhorse: calls any API, which is what makes every service with an HTTP endpoint an integration.
| Field | Notes |
|---|---|
| Method | GET, form POST, or JSON POST. |
| URL | The address to call, placeholders welcome: https://api.example.com/orders/{orderID}. |
| Fields | name=value&name2={variable} pairs sent as the query string, form body, or JSON body per the method. |
| Headers | The same pair format, where API keys and tokens go: Authorization=Bearer {token}. |
| Capture Response Fields | Pulls values out of the JSON response into variables, detailed below. |
Capture is the half of the node people fall in love with. myVar={status} finds the first status key anywhere in the response, total={data.total} walks that exact path, and capturing an array, like items={data.items}, stores it ready for a For Each loop. When the response is not JSON, the first capture receives the whole response text, so plain text APIs work too.
Two behaviors worth memorizing: if the connection itself fails, the run stops with a clear error, and HTTP error statuses like 404 or 500 keep the run going, capture {status} and branch on it when you care. That split gives you both safety and control, transport problems never silently pass, and application-level statuses are yours to handle. The full capture syntax lives in variables and capture.
If Condition
Compares a variable against a value, or against another {variable}, and branches to its True or False output.
| Condition | Notes |
|---|---|
| equals, not equal | Exact match either way. |
| greater, less | Numeric when both sides are numbers, so {total} greater than 100 means what you expect. |
| contains, does not contain | Substring checks, handy on captured text and status lists. |
| length checks | Branch on whether a value is empty or how long it is, the classic "did the capture find anything" test. |
An If node pointed back at an earlier node is also the engine's repeat-until pattern, wire the False output backwards and the flow loops until the condition turns True, with the step budget keeping every loop safe.
Switch
Matches a variable against any number of cases, each with its own output, plus a Default output for everything else. One inbound field fans out to the right handler, order types to fulfillment paths, prediction labels to actions, plan names to provisioning calls. Reach for Switch when you find yourself chaining three If nodes on the same variable.
Set Variable
Assigns a value to a variable, and because placeholders resolve inside the value, it doubles as the string builder: Order {orderID} for {customer} composes a message any later node can send, log, or return. Use it to set defaults near the Start node, build request bodies, and accumulate text inside loops.
For Each Loop
Runs a chain of nodes once per item in a list.
| Field | Notes |
|---|---|
| List Variable | A captured JSON array, or comma or newline separated text. |
| Max Items | Caps the loop, default 100. |
The node has two outputs: Each Item runs once per element with {loopItem} and {loopIndex} set, and Done continues the flow when the last item finishes. Capture an array with an HTTP node, loop it, and act per row, that trio is the daily digest pattern, the batch notifier, and the per-record sync, all in three nodes.
Success End and Fail End
Both stop the run and set its status and message, with {variable} resolution in the message, so the caller gets back "Processed Acme, total 42" instead of a bare acknowledgement. The message becomes the API or webhook response and the run history entry. Fail End is a first-class outcome for flows that validate, route the bad path to a Fail with a descriptive message and the run history reads like a report. A flow that simply runs out of connected nodes ends as a success too, so quick flows stay quick to draw.
The Loop Protection Behind All of It
Every run has a step budget, 500 node executions by default and adjustable via maxSteps in the config. Each node spends one step, and a run that reaches the budget stops itself with a clear error naming the problem. That one rule is why every shape you can draw is safe to run: For Each loops, backwards-wired repeat-untils, and anything else you invent all end, guaranteed.
Six nodes cover the space: HTTP Request calls and captures, If and Switch branch, Set Variable assigns and builds strings, For Each walks lists with loopItem and loopIndex, and the enders return a real message. Placeholders work in every field, every node logs its work, and the step budget makes any wiring safe.