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:
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