Portal Community

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 WebhookParsed request body (JSON), plus $json.headers and $json.query
Scheduled (cron){ "scheduledAt": "...", "jobName": "..." }
Event Bus triggerThe full event payload published to the bus
Manual trigger (UI)Form submission data from the trigger form
Sub-workflow triggerOutput 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 is always the original trigger payload — it is not the output of the trigger node. Even if the first node in your workflow transforms the trigger data significantly, $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.