Reporting a similar issue to what happened a year ago in HTTP Request Module Not Passing Authentication
Describe the problem/error/question
After upgrading to v2.20.7-exp.0, the HTTP Request node using predefinedCredentialType: sendInBlueApi silently fails to inject the api-key header correctly into requests. This workflow had been running successfully for months with zero changes on our side — no DNS changes, no payload changes, no Brevo configuration changes.
The broken authentication causes Brevo’s API to return a misleading 400 DMARC policy error instead of a 401 Unauthorized, which makes it appear to be a sender/domain configuration problem and is extremely hard to diagnose.
Switching to Generic Credential Type → Header Authentication resolved the issue immediately with the same API key and the same payload — confirming the bug is in how n8n injects the sendInBlueApi credential into HTTP Request nodes.
What is the error message (if any)?
NodeApiError: Bad request - please check your parameters
400 - "{"code":"invalid_parameter","message":"Unable to create/update campaign. Due to DMARC policy, you cannot use this sender. Please choose another sender."}"
Please share your workflow
{
"nodes": [
{
"parameters": {
"method": "POST",
"url": "https://api.brevo.com/v3/emailCampaigns",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "sendInBlueApi",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"name\": \"Test Campaign\",\n \"templateId\": 1,\n \"sender\": {\n \"name\": \"Test Sender\",\n \"email\": \"sender@yourdomain.com\"\n },\n \"subject\": \"Test subject\",\n \"recipients\": {\n \"listIds\": \n },\n \"scheduledAt\": \"{{ $now.plus({ minutes: 1 }).toISO() }}\"\n}",[1]
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position":,[2]
"id": "79a604ee-c9da-405a-beb0-02f917556ae4",
"name": "Create Brevo Campaign",
"credentials": {
"sendInBlueApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "Brevo account"
}
}
}
],
"connections": {},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true
}
}
Share the output returned by the last node
{
"code": "invalid_parameter",
"message": "Unable to create/update campaign. Due to DMARC policy, you cannot use this sender. Please choose another sender."
}
Evidence this is an n8n issue, not a Brevo/DNS configuration issue:
- Domain fully authenticated in Brevo (DKIM
, DMARC
, Sender verified
) - Single DMARC DNS record, correct:
v=DMARC1; p=none; rua=mailto:rua@dmarc.brevo.com - The exact same payload sent via
curlwith the API key works perfectly - Creating the campaign manually from the Brevo web UI also works
- Switching the HTTP Request node to
Generic Credential Type → Header Authentication(Name:api-key, same API key) fixed the issue immediately with zero other changes
Workaround:
- Create a new credential: type Header Authentication, Name:
api-key, Value: your Brevo API key - In the HTTP Request node set Authentication →
Generic Credential Type→Header Authentication - Everything else (URL, JSON body) stays unchanged
Information on your n8n setup
- n8n version: 2.20.7-exp.0
- Database: SQLite
- EXECUTIONS_PROCESS setting: main
- Running n8n via: Docker (self-hosted)
- Operating system: Linux