This error usually means the JSON body in an HTTP Request node can’t be parsed after your fixed text and dynamic expressions are combined. Common causes are unescaped quotes, line breaks inside a string, trailing commas, mismatched brackets, or a dynamic value being inserted as if it were already valid JSON.
Paste the exact JSON body you are trying to send. Nothing you paste is uploaded; validation runs in this browser.
Waiting for JSON.
Formatted JSON will appear here.
} or ].null should not be quoted unless the API explicitly expects strings.{ needs a matching }, and every [ needs a matching ].If dynamic values can contain quotes or line breaks, construct an object and serialize it:
{{ JSON.stringify({
recipient: { id: $json.recipientId },
message: { text: $json.messageText }
}) }}
This avoids manually escaping changing text. The exact n8n field and expression form can vary by node/version, so compare it with the current HTTP Request node options and the target API documentation.
Passing this validator only proves the text is syntactically valid JSON. An API can still return 400 Bad Request if the field names, nested shape, value types or required fields are wrong. A 401 usually points to authentication, while 415 often means the body format or content type does not match what the API expects.
Invalid trailing comma:
{"name":"Alice","active":true,}
Valid:
{"name":"Alice","active":true}
Invalid unescaped quote inside a string:
{"message":"He said "hello""}
Valid:
{"message":"He said \"hello\""}
Optional anonymous feedback. The counter stores only a timestamp and fixed event name; your pasted JSON is never included.