Skip to content

Template Syntax

Templates make step configuration dynamic. They can read the trigger payload, earlier step outputs, workflow variables, connections, and environment values.

{{ fetch-customer.body.email }}
{{ initial.accountId | default: "unknown" }}

QuickFlo uses two expression forms:

  • Liquid returns values and text inside step fields.
  • JSONLogic evaluates branches and data predicates in If, Switch, Filter, Reduce, and Classify steps.
Template autocomplete showing available variables and step outputs
You need toRead
Reference trigger data, step outputs, variables, connections, or execution contextVariables and step outputs
Transform strings, arrays, objects, dates, numbers, or phone valuesLiquid filters
Write an If condition, Switch case, or data predicateConditions and branching
Define the expected shape and defaults for workflow inputInitial Data
  1. Reference a step by its step ID: {{ fetch-customer.body }}, not {{ steps.fetch-customer.body }}.
  2. Use autocomplete instead of guessing a field path. It reflects the data available at the current step.
  3. Use a Liquid expression inside a JSONLogic operand when a condition needs workflow data:
{ "==": ["{{ fetch-customer.body.status }}", "active"] }

Use {% literal %} when another system should receive unresolved template syntax:

{% literal %}Hello {{name}}, your order {{orderId}} is ready{% endliteral %}

The result is the raw string Hello {{name}}, your order {{orderId}} is ready.

QuickFlo resolves templates recursively, up to five levels. An environment value can therefore point to another template:

{{ $env.MY_CONNECTION }}

If MY_CONNECTION contains {{$connections.production-api}}, QuickFlo resolves the connection object. This is how environment connection redirection works.