Skip to content
Worfilo

Documentation

Templates and expressions: pass data between nodes

Updated September 17, 2026

Nodes read each other's data through sandboxed Jinja templates. Validation rejects references to nodes that are not upstream, so a typo fails while you edit instead of halfway through a run.

What a template can read

  • {{ trigger.<field> }}: the payload that started the run.
  • {{ nodes.<id>.output }}: what an upstream node returned on the port that fired.
  • {{ nodes.<id>.ports.<port> }} and {{ nodes.<id>.status }}: per-port output and the node's status.
  • {{ run.id }} and {{ run.started_at }}.
  • {{ args.<field> }}: inside an HTTP Request node attached as a tool, the arguments the agent called it with.

Endpoint placeholders are not templates

A saved endpoint on a custom API uses single braces, such as /items/{item_id}. Each placeholder becomes an input on the API node. Fill that input with a value or a template:

API node inputs
item_id: {{ trigger.item_id }}
title:   {{ nodes.summarise.output.text }}

The endpoint defines the shape of the request once; the workflow supplies the values with templates.

Template fields

Fields such as an agent's user prompt or an HTTP node's URL are rendered as text. A field that is exactly one expression keeps the raw value instead, so an object stays an object:

Set node values
{
  "summary": "Ticket from {{ trigger.customer }}: {{ trigger.message }}",
  "ticket": "{{ trigger }}"
}

Expression fields

If conditions and Switch cases are bare expressions without braces, evaluated to a value:

nodes.classify.output.structured.urgency == 'high'

Reading agent output

An Agent node returns text, and structured when an output schema is set. Branch on structured fields rather than parsing text.

Build it on the canvas

Create a free account, describe the workflow or wire it yourself, and run it in the browser.