How to Connect n8n to Brevo: Automate Email & SMS Campaigns (2025)

Brevo (formerly Sendinblue) is one of the most cost-effective platforms for sending both transactional and marketing emails, plus SMS, from a single account. Pair it with n8n and you can build fully automated campaigns that react to real events in your business: a new signup, an abandoned cart, a weekly digest, or a low-stock alert. In this guide you'll learn how to connect n8n to Brevo the reliable way, using the HTTP Request node against the Brevo REST API, and how to handle transactional email, marketing contacts and lists, SMS, and inbound webhooks.

Why the HTTP Request node instead of a dedicated node?

Some n8n versions ship a dedicated Brevo (Sendinblue) node, but its coverage is limited and lags behind Brevo's API. The endpoints move faster than the node does, so if you need marketing campaigns, SMS, or the newer contact attributes, the node may simply not expose them. The HTTP Request node is the durable choice: it can call any Brevo endpoint, it never goes stale, and it teaches you the API so you can debug quickly. Everything below uses https://api.brevo.com/v3 as the base URL.

Step 1: Get your Brevo API key

Log in to Brevo, open Settings → SMTP & API → API Keys, and generate a new v3 key. Copy it once — Brevo won't show it again. In n8n, create a credential of type Header Auth so you never paste the key into nodes directly:

  • Name: api-key
  • Value: your Brevo v3 API key

Brevo expects the header literally named api-key (not Authorization), which is a common gotcha. Attach this Header Auth credential to every HTTP Request node and you're authenticated.

Step 2: Send a transactional email

Transactional emails are one-to-one messages triggered by an action — receipts, password resets, order confirmations. Add an HTTP Request node configured like this:

  • Method: POST
  • URL: https://api.brevo.com/v3/smtp/email
  • Authentication: your Header Auth credential
  • Body Content Type: JSON

Send a JSON body like:

{ "sender": { "name": "Your Brand", "email": "hello@yourdomain.com" }, "to": [{ "email": "{{ $json.email }}", "name": "{{ $json.name }}" }], "subject": "Welcome aboard!", "htmlContent": "<p>Thanks for joining us.</p>" }

Use n8n expressions (the {{ }} syntax) to inject data from previous nodes. For repeatable designs, create a template in Brevo and send only templateId plus a params object instead of raw htmlContent — cleaner and easier for non-developers to edit.

Skip the boilerplate: our AI-Curated Weekly Newsletter template already wires RSS feeds into an AI summarizer and a polished Brevo-ready digest — import it and you're sending in minutes, not hours.

Step 3: Manage contacts and lists

Marketing automation lives and dies by clean contact data. Brevo separates contacts (people) from lists (segments you send to). To create or update a contact, POST to https://api.brevo.com/v3/contacts:

{ "email": "{{ $json.email }}", "attributes": { "FIRSTNAME": "{{ $json.name }}" }, "listIds": [3], "updateEnabled": true }

Setting updateEnabled: true makes the call idempotent — it creates the contact if new, or updates attributes if the email already exists, so you avoid duplicate errors. To find your list IDs, run a GET request against https://api.brevo.com/v3/contacts/lists. To move someone between lists, use the contacts/lists/{listId}/contacts/add and .../remove endpoints.

Transactional vs. marketing email — pick the right one

This distinction matters for deliverability and compliance:

  • Transactional (/smtp/email): triggered by user action, sent even to unsubscribed users, no marketing consent needed. Ideal for confirmations and alerts.
  • Marketing (/emailCampaigns): bulk newsletters and promotions sent to lists, subject to unsubscribe rules and GDPR consent.

Sending a newsletter through the transactional endpoint is a deliverability risk and can get your account flagged. Use campaigns for anything promotional going to a list.

Step 4: Create and schedule a marketing campaign

To automate a newsletter — for example, a weekly digest assembled by an earlier node — POST to https://api.brevo.com/v3/emailCampaigns:

{ "name": "Weekly Digest {{ $now.format('yyyy-MM-dd') }}", "subject": "This week in automation", "sender": { "name": "Your Brand", "email": "hello@yourdomain.com" }, "htmlContent": "{{ $json.digestHtml }}", "recipients": { "listIds": [3] }, "scheduledAt": "{{ $now.plus(1, 'hours').toISO() }}" }

Omit scheduledAt and the campaign stays in draft; include it and Brevo sends automatically at that time. This is the exact pattern behind an automated weekly newsletter: gather content, summarize, build HTML, then hand it to this endpoint.

Step 5: Send SMS

Brevo's transactional SMS lives at https://api.brevo.com/v3/transactionalSMS/sms. POST a compact body:

{ "sender": "YourBrand", "recipient": "33689123456", "content": "Your order has shipped!", "type": "transactional" }

The recipient must be in international format without a leading + or zeros, and sender is limited to 11 alphanumeric characters. SMS credits are separate from email, so check your balance in Brevo before wiring this into a high-volume flow.

Step 6: React to events with webhooks (Brevo Trigger)

Outbound calls are only half the picture. To make workflows event-driven, use n8n's Webhook node (or the Brevo Trigger node if your version has it) to receive events. In Brevo, go to Settings → Webhooks, paste your n8n production Webhook URL, and subscribe to events like delivered, opened, click, hardBounce, or unsubscribe.

Now Brevo pushes a JSON payload to n8n every time one of those events fires. A practical use: catch hardBounce events and automatically remove the address from your list, or catch click events to tag hot leads and trigger a follow-up SMS. During development, use the Webhook node's Test URL, then switch Brevo to the Production URL once the workflow is activated.

Debugging tips

  • 401 Unauthorized: your header is named wrong — it must be api-key, exactly.
  • 400 on send: the sender email or domain isn't verified in Brevo. Authenticate your domain (SPF/DKIM) first.
  • Contact errors: add updateEnabled: true to avoid "contact already exists".
  • Rate limits: Brevo returns 429 when you push too fast; add a small Wait node or batch your contacts.

Putting it all together

With these building blocks — API key auth, transactional email, contacts and lists, marketing campaigns, SMS, and webhooks — you can automate an entire lifecycle inside n8n. A new lead lands in a list, gets a transactional welcome email, receives your weekly campaign digest, and triggers an SMS the moment they click. Every piece is just an HTTP Request node pointed at the right Brevo endpoint, which means you can extend it forever without waiting on a maintained node.

Ready to automate? Skip the setup and start with a battle-tested workflow that turns RSS feeds into a polished, AI-curated newsletter ready for Brevo. Get this template on Gumroad →