Flow Studio
Availability Table
Each variable prefix has a different availability profile depending on where in the workflow graph the expression is evaluated. This page provides a definitive reference for what is available at each node position.
Full Availability Matrix
| Node Position | $json | $input | $output.{id} | $var.{name} | $global | $context |
|---|---|---|---|---|---|---|
| First node after trigger | Always set | null — no upstream node | null — no nodes have run yet | null — no SetVariable has run | Always set | Always set |
| Second node (linear pipeline) | Always set | Output of first node | First node's output only | null (unless first node was SetVariable) | Always set | Always set |
| Any node N in a linear pipeline | Always set | Output of node N-1 | Outputs of nodes 1 through N-1 | Available if SetVariable ran before this node | Always set | Always set |
| Node in a parallel branch (fan-out) | Always set | Output of the fork/gateway node | Only outputs of nodes that ran before the fork | Only vars set before the fork | Always set | Always set |
| Node after a fan-in (merge) | Always set | Primary port connection output | Outputs of all branches that completed | Vars set in either branch | Always set | Always set |
| Node inside a sub-workflow | Sub-workflow trigger payload | Output of previous sub-workflow node | Sub-workflow nodes only (parent nodes NOT visible) | Sub-workflow scope only | Always set (parent tenantId, executionId) | Always set |
| Node after HIL resume | Always set (restored from suspension) | HIL approver's decision data | All nodes that ran before suspension | All vars set before suspension | Always set | Always set |
Prefix Availability Summary
| Prefix | Available From | Notes |
|---|---|---|
$json | Execution start — always | Never null; same value at every node |
$input | From the second node onwards | Null at the first node; follows graph edges |
$output.{nodeId} | After the named node has run | Null for downstream or not-yet-run nodes |
$var.{name} | After the SetVariable node for that name has run | Null if no SetVariable has set that name yet |
$global | Execution start — always | Tenant-admin configured; cached with TTL |
$context | Execution start — always | Immutable throughout execution |
Sub-Workflow Scope Note
Sub-workflows execute in a nested ExecutionMemory scope. Inside a sub-workflow, $output.{nodeId} only sees nodes within that sub-workflow — nodes from the parent workflow are not accessible via $output. Use the sub-workflow trigger payload ($json) to receive data from the parent.
The availability of $output depends on execution order, not graph position. A node can reference
$output.{nodeId} for any node that topologically precedes it in the graph. However, in branching workflows where a node on a skipped branch is referenced, the output will be null even if the nodeId is valid.