Template Interpolation
The engine resolves {{path}} placeholders in step parameters at runtime. This lets you personalize steps using instance context and previous step outputs.
Available paths
{{context.data.email}}Read from the instance's data context{{context.config.sender}}Read from the instance's config context{{outputs.send_email.status}}Read output from a previous step by block ID
Nested JSON paths and array indexing are supported. Missing paths resolve to null.
Fallback defaults
Use the | pipe syntax to provide a default value when a path is missing or null.
// Uses context.data.name, or "there" if missing
"Hello {{context.data.name|there}}"
// Numeric default
"Retry after {{context.data.delay_seconds|30}} seconds"Expression support
Conditions in router routes and loop conditions support comparisons, arithmetic, logical operators, and parentheses.
// Comparisons
"context.data.opened == true"
"context.data.score >= 80"
"context.data.plan != "free""
// Logical
"context.data.opened == true && context.data.clicked == false"
// Arithmetic
"outputs.score_step.value * 2 > 100"
// Parentheses
"(context.data.tier == "pro" || context.data.trial == true) && context.data.active == true"