$json — Trigger Input
$json is the raw trigger payload — the data that initiated the workflow execution. It is always available at every node in the workflow, regardless of graph position. It never changes during execution.
What $json Contains
$json maps to the TriggerPayload that was deserialized at execution start. Its contents depend on the trigger type:
| Trigger Type | $json Contents |
|---|---|
| HTTP Webhook | Parsed request body (JSON), plus $json.headers and $json.query |
| Scheduled (cron) | { "scheduledAt": "...", "jobName": "..." } |
| Event Bus trigger | The full event payload published to the bus |
| Manual trigger (UI) | Form submission data from the trigger form |
| Sub-workflow trigger | Output of the parent node that invoked the sub-workflow |
Expression Examples
// Accessing a nested field from an HTTP trigger body
$json.body.customer.id
$json.body.order.lineItems[0].sku
$json.body.order.totalAmount
// Accessing query parameters (HTTP trigger)
$json.query.page
$json.query.limit
// Accessing a request header (HTTP trigger)
$json.headers["x-api-key"]
$json.headers["content-type"]
// Accessing the full body as a string (for logging or passthrough)
$json.rawBody
Usage in Node Configuration
// Example: HttpRequestNode config — use $json to pass customer ID to the URL
{
"url": "https://api.example.com/customers/{{$json.body.customerId}}",
"method": "GET"
}
// Example: Condition node — branch based on trigger payload field
$json.body.requestType == "urgent"
// Example: SetVariable node — initialize a variable from the trigger
{
"variableName": "orderId",
"value": "$json.body.order.id"
}
$json is Read-Only and Immutable
The trigger payload is set once at execution start and never modified. No node can overwrite $json. This ensures that the original trigger data is always accessible throughout the workflow, regardless of how many nodes have processed or transformed it.
Null Safety
If the trigger payload does not contain a field referenced by a $json expression, the expression evaluates to null, not an error. Always guard against null when the presence of a field is not guaranteed.
// Safe null check in a condition expression
$json.body.priority != null && $json.body.priority == "high"
// Use nullish coalescing in supported expression engines
$json.body.region ?? "us-east-1"
$json still refers to the original payload at every subsequent node. To reference the transformed data, use $output.{nodeId} for the transform node's output.