CIIFragments Studio is CII-accredited: recover up to 20% of your software development spendLearn more

API integration for Brevo

We build your Brevo connector

We wire the Brevo API into your business events to the Brevo API to send your transactional emails and text messages, sync your contacts and cut off sending to a dead address from the first rejection.

  • Senior product team
  • email and SMS connectors in production
  • from scoping to monitoring
In short

What does the Brevo API do and when should you integrate it into your application?

Brevo is a French transactional email and marketing automation tool. Its API lets you send emails triggered by events in your product: order confirmation, follow-up, alert, and synchronise contacts with their business attributes to personalise campaigns. You integrate Brevo when lifecycle emails need to move out of the application code so the marketing team can manage them, or when product behaviour should automatically trigger a sequence without manual intervention.

Use cases

What our clients build on the Brevo API

01

Lifecycle emails driven by templates

Activation, invoice, failed payment, password reset: the content lives in Brevo, your code only sends the business variables.

02

Automatic list hygiene

A hard rejection or a complaint flags the address in your product and cuts off later sends. Your sender reputation stops eroding.

03

Contacts synced both ways

Product attributes feed the marketing segments, and an unsubscribe made inside Brevo comes back down into your application.

04

Automations triggered by the product

Trial ending, usage threshold reached, a feature never opened: the event leaves the product within seconds, with no daily import.

For you

What it changes in how you communicate

Engineering in service of a measurable outcome: emails that land, a clean list, a marketing team that runs on its own.

Marketing keeps its templates

The content changes inside Brevo, with no developer and no release involved. Your code only sends the variables.

Your emails actually land

The Brevo code, DKIM and DMARC records are treated as a project deliverable. Without them your sender address gets replaced.

A list that does not rot

Invalid addresses leave the loop from the first hard rejection. You stop paying to send into the void.

One account for email and SMS

Billing, reporting and unsubscribes are pooled. There are not two vendors to reconcile at the end of the month.

Method

How we ship your Brevo connector

01

Scoping

Which messages, what volume, which templates, which contact attributes. We settle the direction of the sync before coding.

02

Development

Typed connector, application-level idempotency, template and list caching, retry queue. A demo every week.

03

Acceptance testing

DNS verified before the switch, rejection and complaint webhooks replayed, the STOP keyword checked inside the final SMS content.

04

Monitoring

Alerts on the rejection rate and on send failures, DMARC report monitoring, an inspectable dead letter queue.

The API

What the Brevo API allows

Transactional email by template
Sending by template id with mustache variables, tags, custom headers and scheduled delivery, with a message identifier returned each time.
Transactional SMS
An alphanumeric sender of 11 characters or a numeric one of 15, an international recipient, unicode content and event reports.
Contacts, lists and events
Syncing contacts and their attributes, managing lists, and publishing custom events that trigger an automation.
Deliverability webhooks
Twelve events, from Sent and Delivered through Hard Bounce, Complaint, Blocked or Unsubscribed, tied to the message identifier.
Glossary

The vocabulary of the Brevo API

messageId
The identifier returned on every send. It is the key that ties an email or a text message to the deliverability events received afterwards: without it stored on your side, a webhook attaches to nothing.
params
The object of variables injected into a template through mustache syntax. It keeps the content with the marketing team and the business data inside your application.
batchId
An identifier that groups related sends, for instance to handle them together. It is not an idempotency key: it does not protect against a replay that sends and bills twice.
[STOP CODE]
The token substituted into SMS content to insert the unsubscribe mechanism. The substitution requires declaring the marketing type, which is surprising on a transactional endpoint.
Hard Bounce
The permanent rejection of an address. Handled through a webhook, it flags the address in your database and cuts off later sends, which protects your sender reputation.
DKIM and DMARC
The two DNS records that prove you really are the sender, alongside the Brevo code. Without them the domain is not authenticated and the displayed address gets replaced.
Good to know

The real constraints of the Brevo API

01

The quota that breaks you is not sending

Email sending absorbs 1,000 requests per second, but the remaining endpoints are capped at 100 requests per hour on the general tier. Reading a template or a list on every user request breaks in production.

02

No HMAC signature on the webhooks

The documentation provides neither a signature header nor a shared secret: only IP ranges, a bearer token and custom headers. So an event never counts as authorisation, the state gets re-checked.

03

The transactional SMS type is a trap

For the unsubscribe token to be substituted, the documentation asks you to declare the marketing type on the transactional endpoint. Setting transactional by reflex produces messages with no working STOP.

04

Domain authentication is a deliverable

Three DNS records are required: the Brevo code, DKIM and DMARC. Without them Brevo temporarily replaces your sender address, which breaks brand alignment and often breaks replies too.

Brevo or Twilio

Brevo or Twilio for your sends?

A French email and SMS suite on one side, a programmable carrier on the other. The right one depends on which channel carries your volume.

CriterionBrevoThis pageTwilioProgrammable carrier
Channels coveredEmail, SMS, WhatsApp, chatSMS, MMS, WhatsApp, voice
Transactional emailCore of the product, templates includedOutside the scope of this page
VendorFranceUnited States
Webhook signatureNone: IP ranges and a tokenX-Twilio-Signature in HMAC-SHA1
OTP out of the boxTo be built in the applicationVerify: SMS, voice, TOTP, passkeys
What breaks in productionThe 100 requests per hour on other endpointsThroughput per sender type
The right caseEmail carries most of the volumeVoice, OTP and multichannel

The two combine: Brevo for lifecycle email, Twilio for voice and identity verification. It is a scoping trade-off, not a permanent choice.

Our expertise

What we measure on a Brevo integration

15 d
first Brevo flow in production
12
deliverability events handled
0
sends to an already rejected address
4
senior developers on the project

We combine Brevo with

The stack that surrounds Brevo on our projects.

  • Stripe
  • HubSpot
  • n8n
  • PostgreSQL
  • Node.js
FAQ

Brevo integration: your questions

Three steps. Generate one API key per environment and per service, passed in the api-key header and kept in a secret manager. Build a connector that sends by template with an idempotency key held in your own database, caches templates and lists so it never hits the 100 requests per hour ceiling, and records the message identifier that comes back. Then wire up the deliverability webhooks to flag rejected addresses and propagate unsubscribes. The sensitive part is not the send itself, it is domain authentication and the state of your address base.

A first useful flow, typically transactional emails by template with delivery tracking, ships in two to three weeks. A complete chain with two-way contact sync, product events, compliant SMS and a preference centre is closer to six to eight weeks. DNS configuration and the state of your address base often weigh more than the engineering. We scope the perimeter up front and give a firm estimate before we start.

Through defence in depth, since authenticity cannot be proven cryptographically. We restrict the entry point to Brevo's IP ranges, declare a high-entropy bearer token or custom headers when the webhook is created, expose an unguessable URL and validate the payload schema strictly. Above all, an incoming event never counts as authorisation: before any side effect, the state is re-checked through the API or in the database. Events are deduplicated and processed asynchronously, with every rejected payload logged.

Because the type parameter was most likely left on transactional. For the unsubscribe token to be substituted into the content, the documentation asks you to declare the marketing type, including on the transactional SMS endpoint. It is counter-intuitive, and it is the most common mistake on this topic. So we add an automated test that checks the unsubscribe keyword is really present in the final content, and we classify every message as transactional or marketing in the database, which also drives the French sending window from 08:00 to 21:30.

Brevo brings transactional email, SMS and chat together in a single account, with templates maintained by the marketing team: it is the right choice when email carries most of the volume. Twilio is a programmable carrier, better as soon as you need voice, multichannel or a ready-made two-factor authentication building block. Brevo is also a French vendor, which is a favourable point in a discussion about where processing happens; the exact scope gets checked against the data processing agreement in force, not against a marketing page. We settle it during scoping.

A Brevo integration project?

Let's talk. 30 minutes to scope your sends, check what the API actually allows and tell you honestly what is feasible.

Discuss my Brevo project
Discuss my Brevo project