A flow is a set of blocks joined by arrows. Each block does one thing: read a record, send an email, ask a model, branch on a condition. This reference lists all 76 blocks with every setting.

How a flow runs

  1. A trigger fires and the run starts. The trigger’s data is the run’s input.
  2. The engine follows the arrows from the trigger. Each block runs, produces an output, and chooses which exit to take.
  3. The run ends when there is nothing left to follow, a Respond or Fail block runs, a Stop block runs, or it exceeds the flow’s time limit.
A flow has a timeout (60 seconds by default, up to 900). A flow can also choose whether to record runs, which keeps each run’s trace in Activity.

Exits

A block can have more than one exit. A block that checks something has exits named for the answer: true and false, allowed and denied, hit and miss, missing, anonymous, invalid, failed. Most blocks have a single next exit. On the canvas, drag from the exit you want to the next block. If a block takes an exit that has nothing connected to it, that path simply ends.

Passing values between blocks

Settings accept templates: {{ … }} placeholders filled in as the block runs.

What you can read

Reach inside with dots: {{ steps.load.output.email }}, {{ input.body.issue.title }}, and into lists by position: {{ input.items.0.name }}.

Whole value or text

  • A setting that is exactly one template gives you the value itself, not its text. "{{ input.items }}" passes the list along unchanged, and "{{ input.total }}" stays a number.
  • A template inside other text is turned into text: "Order {{ input.id }} is ready". Objects and lists inside text become JSON. A missing value becomes empty.

Filters

Add filters after a |. Some take an argument after a colon, and filters can be chained. An unknown filter name makes the block fail with a clear message. Templates are a lookup, not a programming language: for calculations use the Calculate block, and for logic use If and Switch.

Secrets

Never put a key in a flow. Write secret://STRIPE_API_KEY where the value goes, or read one with the Read secret block. See Secrets.

When a block fails

A failing block ends the run as failed unless you handled it. Blocks that can fail expectedly, such as an HTTP call, have a failed exit you can connect. Wrap anything flaky in a Retry block, and use Fail to stop with your own status and message when something is wrong. The run’s trace in Flow runs shows every block, its input and its output.

Testing

Use Run now in the flow editor with a sample input, then read the trace. See the flow editor.

Next

Flows

How to build and trigger flows.

Patterns

Complete flows for common jobs.