n8n Expression Syntax Guide
Assists with robust n8n expressions and fixes common syntax/data-reference mistakes.
n8n Expression Syntax
Expert guide for writing correct n8n expressions in workflows.
Expression Format
All dynamic content in n8n uses double curly braces:
Examples:
Core Variables
$json - Current Node Output
Access data from the current node:
$node - Reference Other Nodes
Access data from any previous node:
Important:
- Node names must be in quotes
- Node names are case-sensitive
- Must match exact node name from workflow
$now - Current Timestamp
Access current date/time:
$env - Environment Variables
Access environment variables:
π¨ CRITICAL: Webhook Data Structure
Most Common Mistake: Webhook data is NOT at the root!
Webhook Node Output Structure
Correct Webhook Data Access
Why: Webhook node wraps incoming data under .body property to preserve headers, params, and query parameters.
Common Patterns
Access Nested Fields
Reference Other Nodes
Combine Variables
When NOT to Use Expressions
β Code Nodes
Code nodes use direct JavaScript access, NOT expressions!
β Webhook Paths
β Credential Fields
Validation Rules
1. Always Use {{}}
Expressions must be wrapped in double curly braces.
2. Use Quotes for Spaces
Field or node names with spaces require bracket notation:
3. Match Exact Node Names
Node references are case-sensitive:
4. No Nested {{}}
Don't double-wrap expressions:
Common Mistakes
For complete error catalog with fixes, see COMMON_MISTAKES.md
Quick Fixes
| Mistake | Fix |
|---|---|
$json.field | {{$json.field}} |
{{$json.field name}} | {{$json['field name']}} |
{{$node.HTTP Request}} | {{$node["HTTP Request"]}} |
{{{$json.field}}} | {{$json.field}} |
{{$json.name}} (webhook) | {{$json.body.name}} |
'={{$json.email}}' (Code node) | $json.email |
Working Examples
For real workflow examples, see EXAMPLES.md
Example 1: Webhook to Slack
Webhook receives:
In Slack node text field:
Example 2: HTTP Request to Email
HTTP Request returns:
In Email node (reference HTTP Request):
Example 3: Format Timestamp
Data Type Handling
Arrays
Objects
Strings
Numbers
Advanced Patterns
Conditional Content
Date Manipulation
String Manipulation
Debugging Expressions
Test in Expression Editor
- Click field with expression
- Open expression editor (click "fx" icon)
- See live preview of result
- Check for errors highlighted in red
Common Error Messages
"Cannot read property 'X' of undefined" β Parent object doesn't exist β Check your data path
"X is not a function" β Trying to call method on non-function β Check variable type
Expression shows as literal text β Missing {{ }} β Add curly braces
Expression Helpers
Available Methods
String:
.toLowerCase(),.toUpperCase().trim(),.replace(),.substring().split(),.includes()
Array:
.length,.map(),.filter().find(),.join(),.slice()
DateTime (Luxon):
.toFormat(),.toISO(),.toLocal().plus(),.minus(),.set()
Number:
.toFixed(),.toString()- Math operations:
+,-,*,/,%
Best Practices
β Do
- Always use {{ }} for dynamic content
- Use bracket notation for field names with spaces
- Reference webhook data from
.body - Use $node for data from other nodes
- Test expressions in expression editor
β Don't
- Don't use expressions in Code nodes
- Don't forget quotes around node names with spaces
- Don't double-wrap with extra {{ }}
- Don't assume webhook data is at root (it's under .body!)
- Don't use expressions in webhook paths or credentials
Related Skills
- n8n MCP Tools Expert: Learn how to validate expressions using MCP tools
- n8n Workflow Patterns: See expressions in real workflow examples
- n8n Node Configuration: Understand when expressions are needed
Summary
Essential Rules:
- Wrap expressions in {{ }}
- Webhook data is under
.body - No {{ }} in Code nodes
- Quote node names with spaces
- Node names are case-sensitive
Most Common Mistakes:
- Missing {{ }} β Add braces
{{$json.name}}in webhooks β Use{{$json.body.name}}{{$json.email}}in Code β Use$json.email{{$node.HTTP Request}}β Use{{$node["HTTP Request"]}}
For more details, see:
- COMMON_MISTAKES.md - Complete error catalog
- EXAMPLES.md - Real workflow examples
Need Help? Reference the n8n expression documentation or use n8n-mcp validation tools to check your expressions.