Skip to main content

Syntax

A reference starts with $. and can be used in any step parameter:
{{inputs.prompt}} is not a reference. Double braces are sent to the model as literal text.

Whole values and text

A parameter that is exactly one reference keeps the referenced value’s type, such as a URL, a number, a list or an object:
A reference inside a longer string is inserted as text:
A reference ends at a space or punctuation, so it can end a sentence ($.inputs.style. followed by a space). Write a space after the full stop: $.inputs.style.Keep would be read as one longer path.

What primary holds

Prompt fields and whole references

If a prompt-like parameter (prompt, user_prompt, system_prompt, text, content, message, caption, title or description) is exactly $.step.primary or $.step.output, the value arrives JSON-encoded, so a string comes wrapped in quotes. Reference a deeper field, or embed the reference in a sentence:

Lists and optional inputs

Empty strings and null values are dropped from lists. An optional input with "default_value": "" can therefore sit in a list and disappears when the caller leaves it out:

Parallel branches

After a parallel step, reference each branch step by its own id:

Conditions

A choice condition uses the same paths in its expression:
See condition operators.

When a reference fails

  • A run is rejected if a step references an input that wasn’t sent and has no default_value.
  • References to steps are checked when the workflow runs, not when you save it. A step can only use inputs and steps that ran before it.
  • Use brackets for list items: $.step.output[0], not $.step.output.0.
The overview examples use every pattern on this page and were run end to end.
Last modified on October 7, 2026