Data and expressions
Items
Loading diagram...
- A step receives a list of items and outputs a list of items.
- The next step runs once per item. Ten items in means ten agent runs, ten emails, ten rows.
- To go from many items back to one, use Aggregate. To go from one item holding a list to many items, use Split Out.
- To run a step just once regardless, turn on Run once for the whole stream in its Settings.
Expression syntax
Write {{ path }} in any field marked ✱ in the
Step reference.
| Expression | Reads |
|---|---|
{{ $json.email }} | A field on the current item |
{{ $json.customer.address.city }} | A nested field |
{{ $json.lines[0].amount }} or {{ $json.lines.0.amount }} | An element of a list |
{{ $run.id }} | This run's id |
{{ $now }} | The current time (ISO 8601) |
{{ $approval.url }} | The review link, inside an approval's notification actions only |
The values a Trigger or Schedule starts with are on the first item, so a
trigger input called invoiceId is {{ $json.invoiceId }}.
Types are kept when the expression is the whole field
| Field value | Result when $json.total is 1250 |
|---|---|
{{ $json.total }} | The number 1250 |
Total: {{ $json.total }} EUR | The text "Total: 1250 EUR" |
Inside text, an object or list is written as JSON.
What expressions cannot do
- No logic or arithmetic. No
+,>, ternaries or function calls. Comparisons belong in If, Switch or Filter; calculations in an LLM step or a future Code step. - No reading earlier steps by name.
$node["Other step"]is not supported yet and is flagged before you publish. Only the incoming item is readable.
Missing fields
A path that does not exist resolves to empty, except in If, Switch and Filter, where it fails the step so a typo cannot silently send everything down the wrong branch.
A worked example
Every morning, list yesterday's invoices, have an agent classify each one, and ask finance to approve anything over 1,000.
- Schedule: daily at 08:00, timezone Europe/London.
- HTTP Request:
GET https://erp.example.com/invoices?since={{ $now }}→ outputresponse. - Split Out: source
{{ $json.response.body.invoices }}, intoinvoice. - AI Agent: input
Classify this invoice: {{ $json.invoice }}→ outputclassification. - If:
{{ $json.invoice.total }}greater than1000. - True → Wait for Approval with title
Invoice {{ $json.invoice.number }} for {{ $json.invoice.total }}. - Approved → Tool: mark paid in the accounting app.