HTTP Request Node Sending Empty Body Even Though Data Is Set

Hi everyone, I’m having an issue with the HTTP Request node. I’m trying to send JSON data in the request body, but the API keeps receiving an empty body.
My workflow is:
Set → HTTP Request
In the Set node, I define the data:
{
“name”: “John”,
“email”: “john@email.com
}
Then in the HTTP Request node, I set:
• Method: POST
• Body Content Type: JSON
• Body:
{
“name”: “{{$json.name}}”,
“email”: “{{$json.email}}”
}
But when I check the API logs, it shows the request body as empty {}.
I’m not sure if:
• The JSON format is wrong
• The expressions are not resolving
• Or I’m missing a setting in the HTTP node
Has anyone faced this before?

Describe the problem/error/question

What is the error message (if any)?

Please share your workflow

(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.)

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hi @Keira_Becky This usually happens because the body is not being sent as real JSON, even though it looks correct.

In n8n, if you type JSON manually like this {
“name”: “{{$json.name}}”,
“email”: “{{$json.email}}”
}

it can sometimes be treated as a string, not actual JSON.

Use “JSON/RAW Parameters” and add fields instead of typing manually:
• name → {{$json.name}}
• email → {{$json.email}}

Or use expression mode

{
name: $json.name,
email: $json.email
}

Hi @Keira_Becky

A simplex fix is to send the entire object as it bypasses the expression parsing issue entirely

Specify Body and select JSON

In the JSON Parameter box, delete your current JSON structure and simply enter the expression: {{$json}}.

This tells n8n to take the entire output from your previous “Set” node and send it directly as the JSON body . Since your “Set” node already formats the data correctly.

hope this helps :crossed_fingers:

@Keira_Becky also double check your HTTP Request node has “Send Body” actually toggled on — it’s off by default and even with correct expressions the body just gets dropped silently. since your Set node only has name and email, the {{$json}} approach is the move, but that toggle being off would still give you {} in your API logs regardless