Skip to content
LogoLogo

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.

ExpressionReads
{{ $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 valueResult when $json.total is 1250
{{ $json.total }}The number 1250
Total: {{ $json.total }} EURThe 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.

  1. Schedule: daily at 08:00, timezone Europe/London.
  2. HTTP Request: GET https://erp.example.com/invoices?since={{ $now }} → output response.
  3. Split Out: source {{ $json.response.body.invoices }}, into invoice.
  4. AI Agent: input Classify this invoice: {{ $json.invoice }} → output classification.
  5. If: {{ $json.invoice.total }} greater than 1000.
  6. True → Wait for Approval with title Invoice {{ $json.invoice.number }} for {{ $json.invoice.total }}.
  7. Approved → Tool: mark paid in the accounting app.