EN BREF
Les API Brevo vous permettent d'envoyer des e-mails marketing, des e-mails transactionnels et des messages SMS par programme. Vous vous authentifiez avec une clé API, envoyez des requêtes à api.brevo.com et utilisez des webhooks pour suivre la livraison et l'engagement. Pour les tests, utilisez Apidog pour valider les charges utiles, tester les gestionnaires de webhooks et vous assurer que votre intégration gère correctement les rebonds et les désinscriptions.
Introduction
Brevo (anciennement Sendinblue) traite des millions d'e-mails quotidiens pour plus de 500 000 entreprises. Il gère les campagnes marketing, les e-mails transactionnels, le marketing par SMS et les workflows d'automatisation.
Les API d'e-mails semblent simples : envoyer un message, c'est fait. Mais les systèmes d'e-mails de production doivent gérer les rebonds, les plaintes pour spam, les désinscriptions et les délais de livraison. Brevo gère cette complexité pour que vous n'ayez pas à le faire.
L'API couvre trois principaux cas d'utilisation :
- Campagnes marketing - Envois d'e-mails en masse à des listes de contacts
- E-mails transactionnels - Réinitialisations de mot de passe, confirmations de commande, notifications
- Messages SMS - Codes de vérification, alertes, SMS marketing
Authentification et configuration
Obtenir une clé API
- Connectez-vous à Brevo
- Allez dans SMTP & API → Clés API
- Créez une nouvelle clé avec les permissions appropriées
- Stockez-la en toute sécurité
La clé API se trouve dans l'en-tête api-key :
curl -X GET "https://api.brevo.com/v3/account" \
-H "accept: application/json" \
-H "api-key: your-api-key-here"
URL de base de l'API
Toutes les requêtes sont envoyées à :
https://api.brevo.com/v3/
Limites de débit
Brevo limite les requêtes par plan :
- Gratuit : 300 requêtes/minute
- Starter : 600 requêtes/minute
- Business : 1200 requêtes/minute
Vérifiez l'en-tête X-RateLimit-Remaining pour suivre l'utilisation.
Envoi d'e-mails transactionnels
Les e-mails transactionnels sont des messages individuels déclenchés par les actions de l'utilisateur. Pensez aux réinitialisations de mot de passe, aux confirmations de commande, aux e-mails de bienvenue.
Envoyer un e-mail simple
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "accept: application/json" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": {
"name": "Your App",
"email": "noreply@yourapp.com"
},
"to": [
{
"email": "user@example.com",
"name": "John Doe"
}
],
"subject": "Welcome to Our Platform",
"htmlContent": "<html><body><h1>Welcome!</h1><p>Thanks for signing up.</p></body></html>",
"textContent": "Welcome! Thanks for signing up."
}'
Réponse :
{
"messageId": "<20260324123456.123456@relay.brevo.com>"
}
Utilisation de modèles
Créez des modèles dans l'éditeur visuel de Brevo, puis envoyez-les par ID :
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"templateId": 15,
"to": [
{
"email": "user@example.com",
"name": "John Doe"
}
],
"params": {
"name": "John",
"order_number": "ORD-12345",
"tracking_url": "https://tracking.example.com/ORD-12345"
}
}'
Les variables de modèle utilisent des accolades doubles :
<p>Bonjour {{params.name}},</p>
<p>Votre commande {{params.order_number}} a été expédiée.</p>
<p><a href="{{params.tracking_url}}">Suivez votre colis</a></p>
Envoyer avec des pièces jointes
const response = await fetch('https://api.brevo.com/v3/smtp/email', {
method: 'POST',
headers: {
'api-key': process.env.BREVO_API_KEY,
'content-type': 'application/json'
},
body: JSON.stringify({
sender: { name: 'Your App', email: 'noreply@yourapp.com' },
to: [{ email: 'user@example.com' }],
subject: 'Your Invoice',
htmlContent: '<p>Veuillez trouver votre facture ci-jointe.</p>',
attachment: [
{
name: 'invoice.pdf',
content: base64EncodedPdfContent
}
]
})
})
Campagnes marketing
Les e-mails marketing sont envoyés à des listes de contacts. Brevo gère les liens de désinscription, la planification et les analyses.
Créer une campagne
curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"name": "Newsletter de Mars",
"subject": "Nouveautés de Mars",
"sender": {
"name": "Votre Marque",
"email": "newsletter@yourbrand.com"
},
"type": "classic",
"htmlContent": "<html><body>Contenu de la newsletter ici...</body></html>",
"recipients": {
"listIds": [12, 15]
},
"scheduledAt": "2026-03-25T09:00:00+00:00"
}'
Envoyer immédiatement
curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
-H "api-key: your-api-key"
Obtenir les statistiques de campagne
curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
-H "api-key: your-api-key"
La réponse inclut :
{
"statistics": {
"delivered": 4850,
"opened": 1455,
"clicked": 291,
"unsubscribed": 12,
"bounces": 150
}
}
Gestion des contacts
Les contacts sont les personnes à qui vous envoyez des e-mails. Organisez-les en listes et ajoutez des attributs personnalisés.
Créer un contact
curl -X POST "https://api.brevo.com/v3/contacts" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"email": "new.user@example.com",
"attributes": {
"FIRSTNAME": "Jane",
"LASTNAME": "Smith",
"PLAN": "premium"
},
"listIds": [12, 15],
"updateEnabled": true
}'
Le drapeau updateEnabled: true met à jour les contacts existants au lieu de provoquer un échec.
Obtenir les détails du contact
curl -X GET "https://api.brevo.com/v3/contacts/user@example.com" \
-H "api-key: your-api-key"
Ajouter à une liste
curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emails": ["user1@example.com", "user2@example.com"]
}'
Retirer d'une liste
curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emails": ["user@example.com"]
}'
Désabonner un contact
curl -X PUT "https://api.brevo.com/v3/contacts/user@example.com" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emailBlacklisted": true
}'
Marketing par SMS
Brevo envoie des messages SMS dans le monde entier via son API SMS.
Envoyer un SMS
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": "VotreApp",
"recipient": "+15551234567",
"content": "Votre code de vérification est : 123456",
"type": "transactional"
}'
Envoyer un SMS marketing
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": "VotreMarque",
"recipient": "+15551234567",
"content": "Vente flash ! 50% de réduction aujourd''hui seulement. Répondez STOP pour vous désabonner.",
"type": "marketing"
}'
Obtenir les statistiques SMS
curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
-H "api-key: your-api-key"
Webhooks pour le suivi
Les webhooks informent votre application des événements d'e-mail : livré, ouvert, cliqué, rebondi, désinscrit.
Configurer les webhooks
Dans le tableau de bord Brevo : Paramètres → Webhooks → Ajouter un webhook
Événements à suivre :
delivered- L'e-mail est arrivé dans la boîte de réceptionopened- Le destinataire a ouvert l'e-mailclicked- Le destinataire a cliqué sur un lienbounced- L'e-mail a rebondi (dur ou doux)spam- Marqué comme spamunsubscribed- Le destinataire s'est désinscrit
Gérer la charge utile du webhook
app.post('/webhooks/brevo', (req, res) => {
const event = req.body
switch (event.event) {
case 'delivered':
console.log(`Email ${event.messageId} livré à ${event.email}`)
break
case 'opened':
console.log(`Email ouvert par ${event.email} à ${event.date}`)
break
case 'bounced':
console.log(`Rebond : ${event.email} - ${event.reason}`)
// Marquer le contact comme invalide
markContactBounced(event.email)
break
case 'spam':
console.log(`Plainte pour spam de ${event.email}`)
// Supprimer de toutes les listes
removeFromAllLists(event.email)
break
case 'unsubscribed':
console.log(`Désinscrit : ${event.email}`)
break
}
res.status(200).send('OK')
})
Tester avec Apidog
Les API d'e-mails ont des modes de défaillance complexes. Vous devez tester les modèles, les rebonds et les webhooks. Apidog aide à cela.

1. Simuler l'envoi d'e-mails
Pendant le développement, n'envoyez pas de vrais e-mails. Simulez la réponse :
pm.test('L\'API d\'e-mail accepte une charge utile valide', () => {
const response = pm.response.json()
pm.expect(response).to.have.property('messageId')
pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. Tester la gestion des webhooks
Créez des charges utiles de webhook simulées dans Apidog :
{
"event": "bounced",
"email": "invalid@example.com",
"messageId": "<12345@relay.brevo.com>",
"reason": "hard_bounce",
"date": "2026-03-24T12:00:00Z",
"subject": "Bienvenue sur Notre Plateforme"
}
Envoyez à votre endpoint de webhook et vérifiez que votre code le gère.
3. Valider les modèles
Stockez les charges utiles des modèles et testez que les variables sont remplacées correctement :
pm.test('Les variables de modèle sont valides', () => {
const payload = pm.request.body.toJSON()
pm.expect(payload.params).to.have.property('name')
pm.expect(payload.params).to.have.property('order_number')
})
4. Séparation des environnements
# Développement
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@yourapp.com
# Production
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@yourapp.com
Testez les API d'e-mail Brevo avec Apidog - gratuit
Erreurs courantes et corrections
400 Bad Request - Champ requis manquant
Cause : La charge utile manque de champs obligatoires.
Correction : Vérifiez le message d'erreur pour les détails :
{
"code": "invalid_parameter",
"message": "sender.email est requis"
}
401 Non autorisé
Cause : Clé API invalide ou manquante.
Correction : Vérifiez que l'en-tête api-key est correctement défini. Vérifiez que la clé n'a pas été révoquée.
402 Paiement requis
Cause : Le compte a dépassé les limites ou manque de crédits.
Correction :
- Pour les e-mails : Vérifiez les limites d'e-mails de votre plan
- Pour les SMS : Achetez des crédits SMS
429 Trop de requêtes
Cause : Limite de débit dépassée.
Correction : Implémentez un backoff exponentiel :
async function sendWithRetry(email, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await sendEmail(email)
if (response.status === 429) {
await sleep(Math.pow(2, i) * 1000)
} else {
return response
}
}
throw new Error('Limite de débit dépassée')
}
404 Contact non trouvé
Cause : Tentative de mise à jour d'un contact qui n'existe pas.
Correction : Utilisez updateEnabled: true lors de la création de contacts :
{
"email": "new@example.com",
"updateEnabled": true
}
Ceci crée ou met à jour le contact.
Alternatives et comparaisons
| Fonctionnalité | Brevo | SendGrid | Mailchimp | Postmark |
|---|---|---|---|---|
| Tarification | 300 e-mails/jour gratuits | 100 e-mails/jour gratuits | 500 e-mails/mois gratuits | 100 e-mails/mois gratuits |
| E-mails marketing | Oui | Oui | Oui | Non |
| E-mails transactionnels | Oui | Oui | Limité | Oui (spécialisé) |
| SMS | Oui | Non | Non | Non |
| Automatisation | Oui | Oui | Oui | Limitée |
| Éditeur de modèles | Visuel + code | Code | Visuel | Code |
Brevo se distingue par son support combiné e-mail et SMS à des prix compétitifs.
Cas d'utilisation réels
Flux de commande e-commerce. Une boutique en ligne utilise Brevo pour : la confirmation de commande (transactionnel), la notification d'expédition (transactionnel), la récupération de panier abandonné (automatisation marketing) et les promotions hebdomadaires (campagnes marketing). Le tout à partir d'une seule intégration.
Onboarding SaaS. Un outil de gestion de projet envoie des e-mails de bienvenue, des réinitialisations de mot de passe et des invitations d'équipe via l'API transactionnelle. Les e-mails marketing annoncent de nouvelles fonctionnalités aux utilisateurs abonnés.
Vérification par SMS. Une application fintech utilise l'API SMS de Brevo pour les codes d'authentification à deux facteurs. L'endpoint SMS transactionnel délivre les codes en quelques secondes, et les webhooks suivent les échecs de livraison pour une logique de réessai.
Conclusion
Voici ce que vous avez appris :
- Les API Brevo gèrent le marketing, les e-mails transactionnels et les SMS
- Authentifiez-vous avec l'en-tête
api-key - Utilisez des modèles pour des e-mails cohérents et maintenables
- Gérez les contacts et les listes pour des campagnes ciblées
- Les webhooks suivent la livraison, les ouvertures, les clics et les rebonds
- Testez avec Apidog avant d'envoyer à de vrais utilisateurs
Vos prochaines étapes :
- Créez un compte Brevo et obtenez une clé API
- Envoyez votre premier e-mail transactionnel
- Créez un modèle dans l'éditeur visuel
- Configurez des gestionnaires de webhooks pour les rebonds et les désinscriptions
- Testez avec Apidog en développement
Testez les API d'e-mail Brevo avec Apidog - gratuit
FAQ
Quelle est la différence entre Brevo et Sendinblue ?Même produit, nouveau nom. Sendinblue a été renommé Brevo en 2023. Les API utilisent toujours api.brevo.com mais vous verrez des références à Sendinblue dans la documentation plus ancienne.
Combien d'e-mails puis-je envoyer gratuitement ?300 e-mails par jour sur le plan gratuit. Cela représente 9 000 e-mails par mois. Pour plus, passez à un plan payant à partir de 25 $/mois pour 20 000 e-mails.
Puis-je utiliser Brevo pour les e-mails froids (cold emails) ?Techniquement oui, mais c'est risqué. Les e-mails froids ont des taux de rebond et de spam élevés. Brevo surveille la réputation de l'expéditeur. Des taux de plainte élevés entraînent la suspension des comptes. Échauffez d'abord votre domaine et suivez les bonnes pratiques en matière d'e-mail.
Comment gérer les rebonds d'e-mails ?Écoutez les webhooks bounced. Les rebonds durs (e-mail invalide) doivent supprimer les contacts définitivement. Les rebonds doux (boîte de réception pleine, problèmes temporaires) peuvent être réessayés. Suivez le taux de rebond - s'il dépasse 5 %, votre réputation d'expéditeur diminue.
Quelle est la différence entre les e-mails marketing et transactionnels ?Les e-mails transactionnels sont déclenchés par des actions de l'utilisateur (achats, inscriptions) et sont envoyés à un seul destinataire. Les e-mails marketing sont des campagnes envoyées à de nombreux destinataires simultanément. Brevo les sépare pour des raisons de délivrabilité et de conformité.
Comment ajouter un lien de désinscription ?Brevo ajoute automatiquement des liens de désinscription aux e-mails marketing. Pour les e-mails transactionnels, ajoutez votre propre lien :
<a href="{{ unsubscribe_url }}">Se désinscrire</a>
Puis-je envoyer des e-mails depuis mon propre domaine ?Oui. Configurez les enregistrements SPF, DKIM et DMARC. Brevo fournit les valeurs dans Paramètres → Expéditeur & IP. Sans une authentification appropriée, les e-mails peuvent arriver dans le spam.
Comment programmer des e-mails dans un fuseau horaire spécifique ?Utilisez le paramètre scheduledAt avec un horodatage ISO 8601 :
{
"scheduledAt": "2026-03-25T09:00:00-05:00"
}
Que se passe-t-il si j'atteins la limite de débit ?Vous recevrez une erreur 429. La réponse inclut l'en-tête X-RateLimit-Reset avec le nombre de secondes jusqu'à la réinitialisation. Implémentez un backoff exponentiel ou mettez les e-mails en file d'attente pour plus tard.
