Summary:
When an HTTP Request node’s JSON body contains template syntax (e.g., {{$json.body.request}}), n8n sends the literal string instead of the resolved value from the incoming data. The Webhook node receives the correct payload, but the HTTP Request output to the target endpoint shows the template expression unchanged. This happens not just with Webhook triggers but also with the Chat Trigger and likely other trigger nodes. This makes dynamic payload construction impossible in JSON mode.
Describe the problem/error/question
When using the HTTP Request node in n8n with JSON body fields containing template expressions (e.g., {{$json.request}}), the node sends the expression string literally in the outgoing request rather than the evaluated value from the incoming data.
This breaks workflows that rely on dynamic payload construction, because downstream services receive {{$json.request}} instead of the actual data (e.g., "execute the protocol creator protocol...").
What is the error message (if any)?
No error message is shown in the UI. The workflow executes successfully but sends literal template syntax in the outgoing request body instead of the evaluated value.
Please share your workflow
[
{
"parameters": {
"httpMethod": "POST",
"path": "template-bug-test",
"responseMode": "onReceived"
},
"id": "1",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [260, 300]
},
{
"parameters": {
"method": "POST",
"url": "https://webhook.site/7bac4602-2665-4603-a782-17128ddf7bb3",
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{\n \"context\": {\n \"request\": \"{{$json.body.request}}\"\n }\n}"
},
"id": "2",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [560, 300]
}
]
(Replace the webhook.site URL with any echo endpoint to reproduce.)
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
⚠️ WARNING ⚠️ If you have sensitive data in your workflow (like API keys), please remove it before sharing.
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "template-bug-test",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-544,
80
],
"id": "8b56aeb0-c009-4fa4-a34e-a45b09ca72f0",
"name": "Webhook",
"webhookId": "5f7f2a30-26ad-4709-a955-1648f5978369"
},
{
"parameters": {
"method": "POST",
"url": "https://webhook.site/7bac4602-2665-4603-a782-17128ddf7bb3",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\n \"context\": {\n \"request\": \"{{$json.body.request}}\"\n }\n}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-224,
80
],
"id": "2c504a7e-bfa5-4af0-a95b-d9f73f61896b",
"name": "Donna.test"
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Donna.test",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "d47083e6474fe647bbc47fb11a0eb3779fd464cf04b44396fdcd5515a48abaa1"
}
}
Share the output returned by the last node
Actual body received by echo service:
{
"context": {
"request": "{{$json.body.request}}"
}
}
Expected body:
{
"context": {
"request": "test message"
}
}
Debug info
core
• n8nVersion: 1.105.3
• platform: docker (cloud)
• nodeJsVersion: 22.17.0
• database: sqlite
• executionMode: regular
• concurrency: 5
• license: community
storage
• success: all
• error: all
• progress: false
• manual: true
• binaryMode: filesystem
pruning
• enabled: true
• maxAge: 168 hours
• maxCount: 2500 executions
client
• userAgent: mozilla/5.0 (macintosh; intel mac os x 10_15_7) applewebkit/605.1.15 (khtml, like gecko) version/18.5 safari/605.1.15
• isTouchDevice: false
Generated at: 2025-08-09T18:24:52.839Z
Summary:
When an HTTP Request node’s JSON body contains template syntax (e.g., {{$json.body.request}}), n8n sends the literal string instead of the resolved value from the incoming data. The Webhook node receives the correct payload, but the HTTP Request output to the target endpoint shows the template expression unchanged. This happens not just with Webhook triggers but also with the Chat Trigger and likely other trigger nodes. This makes dynamic payload construction impossible in JSON mode.
Describe the problem/error/question
When using the HTTP Request node in n8n with JSON body fields containing template expressions (e.g., {{$json.request}}), the node sends the expression string literally in the outgoing request rather than the evaluated value from the incoming data.
This breaks workflows that rely on dynamic payload construction, because downstream services receive {{$json.request}} instead of the actual data (e.g., "execute the protocol creator protocol...").
What is the error message (if any)?
No error message is shown in the UI. The workflow executes successfully but sends literal template syntax in the outgoing request body instead of the evaluated value.
Please share your workflow
(Replace the webhook.site URL with any echo endpoint to reproduce.)
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
⚠️ WARNING ⚠️ If you have sensitive data in your workflow (like API keys), please remove it before sharing.
Share the output returned by the last node
Actual body received by echo service:
Expected body:
Debug info
core
• n8nVersion: 1.105.3
• platform: docker (cloud)
• nodeJsVersion: 22.17.0
• database: sqlite
• executionMode: regular
• concurrency: 5
• license: community
storage
• success: all
• error: all
• progress: false
• manual: true
• binaryMode: filesystem
pruning
• enabled: true
• maxAge: 168 hours
• maxCount: 2500 executions
client
• userAgent: mozilla/5.0 (macintosh; intel mac os x 10_15_7) applewebkit/605.1.15 (khtml, like gecko) version/18.5 safari/605.1.15
• isTouchDevice: false
Generated at: 2025-08-09T18:24:52.839Z