EN BREF
Les API Brevo permettent d'automatiser l'envoi d'e-mails marketing, d'e-mails transactionnels et de messages SMS. Authentifiez-vous via une clé API, effectuez les requêtes sur api.brevo.com et utilisez les webhooks pour suivre les livraisons, ouvertures, rebonds et désinscriptions. Pour vérifier vos intégrations, validez les charges utiles et testez les webhooks avec Apidog.
Essayez Apidog dès aujourd’hui
Introduction
Brevo (ex-Sendinblue) délivre chaque jour des millions d’e-mails pour plus de 500 000 entreprises, couvrant campagnes marketing, e-mails transactionnels, SMS et automatisation.
Même si l’envoi d’e-mails via API paraît simple, une intégration robuste doit gérer les rebonds, désinscriptions, délais, et plaintes. Brevo gère ces aspects pour vous.
Principaux cas d’usage API :
- Campagnes marketing : envoi groupé à des listes
- E-mails transactionnels : confirmations, notifications, réinitialisations
- Messages SMS : OTP, alertes, campagnes promotionnelles
💡 Astuce : Pour tester vos intégrations e-mail, Apidog permet de valider les modèles, simuler les réponses de Brevo, tester les webhooks et la gestion des erreurs sans envoyer de vrais e-mails.
Authentification et configuration
Obtenir une clé API
- Connectez-vous à Brevo.
- Naviguez vers SMTP & API → Clés API.
- Créez une clé avec les permissions nécessaires.
- Stockez-la de manière sécurisée.
Utilisez la clé 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 utilisent :
https://api.brevo.com/v3/
Limites de débit
- Gratuit : 300 requêtes/minute
- Starter : 600 requêtes/minute
- Business : 1200 requêtes/minute
Surveillez X-RateLimit-Remaining dans les headers.
Envoi de mails transactionnels
Les e-mails transactionnels sont déclenchés par des actions utilisateur (ex : confirmation de commande).
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 attendue :
{
"messageId": "<20260324123456.123456@relay.brevo.com>"
}
Utilisation de modèles
Créez vos modèles dans Brevo, puis envoyez-les via leur 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"
}
}'
Variables dans le modèle :
<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
Envoyez des e-mails groupés à des listes, avec gestion automatique des liens de désinscription et gestion des statistiques.
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"
Réponse :
{
"statistics": {
"delivered": 4850,
"opened": 1455,
"clicked": 291,
"unsubscribed": 12,
"bounces": 150
}
}
Gestion des contacts
Organisez vos contacts par 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
}'
Avec updateEnabled: true, les contacts existants sont mis à jour.
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
Envoyez des SMS transactionnels ou marketing dans le monde entier via l’API.
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
Recevez en temps réel les événements e-mail (livré, ouvert, cliqué, rebondi, désinscrit).
Configurer les webhooks
Dans le dashboard Brevo : Paramètres → Webhooks → Ajouter.
Suivez ces événements :
deliveredopenedclickedbouncedspamunsubscribed
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}`)
markContactBounced(event.email)
break
case 'spam':
console.log(`Plainte pour spam de ${event.email}`)
removeFromAllLists(event.email)
break
case 'unsubscribed':
console.log(`Désinscrit : ${event.email}`)
break
}
res.status(200).send('OK')
})
Tester avec Apidog
Les APIs e-mail sont sensibles aux erreurs et aux cas limites. Apidog facilite la simulation et la validation des charges utiles et webhooks.
1. Simuler l'envoi d'e-mails
Pendant le développement, simulez les réponses pour éviter l’envoi réel :
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 une charge utile webhook simulée :
{
"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-la à votre endpoint et vérifiez le traitement.
3. Valider les modèles
Stockez vos payloads de modèles et vérifiez les variables :
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 Brevo avec Apidog gratuitement.
Erreurs courantes et corrections
400 Bad Request - Champ requis manquant
Cause : Payload incomplet.
Correction : Vérifiez l’erreur retournée :
{
"code": "invalid_parameter",
"message": "sender.email est requis"
}
401 Non autorisé
Cause : Clé API invalide ou absente.
Correction : Vérifiez l’en-tête api-key et la validité de la clé.
402 Paiement requis
Cause : Limite atteinte ou manque de crédits.
Correction :
- Pour e-mails : vérifiez votre quota
- Pour SMS : achetez des crédits
429 Trop de requêtes
Cause : Dépassement de la limite.
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 : Mise à jour d’un contact inexistant.
Correction : Utilisez updateEnabled: true à la création :
{
"email": "new@example.com",
"updateEnabled": true
}
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 l’envoi combiné e-mail/SMS à des tarifs compétitifs.
Cas d'utilisation réels
- E-commerce : confirmations de commande, notifications d’expédition, relance panier, campagnes promos – tout via la même API.
- Onboarding SaaS : e-mails de bienvenue, réinitialisations, invitations d’équipe (transactionnel), annonces de fonctionnalités (marketing).
- Vérification SMS : une app fintech utilise l’API SMS Brevo pour 2FA et gère les échecs via webhook.
Conclusion
Synthèse opérationnelle :
- Brevo gère marketing, transactionnel et SMS via API.
- Authentifiez chaque requête avec
api-key. - Utilisez des modèles pour la cohérence.
- Exploitez listes et attributs pour cibler vos campagnes.
- Branchez les webhooks pour suivre la délivrabilité.
- Testez avec Apidog avant la mise en production.
Vos prochaines étapes :
- Créez un compte Brevo et récupérez une clé API.
- Envoyez un e-mail transactionnel test.
- Définissez un modèle avec l’éditeur.
- Ajoutez la gestion des webhooks rebonds/désinscriptions.
- Validez vos flux API avec Apidog en dev.
Testez les API d'e-mail Brevo avec Apidog gratuitement.
FAQ
Quelle est la différence entre Brevo et Sendinblue ?
Même produit, nouveau nom (depuis 2023). Les API sont sur api.brevo.com, mais la doc peut encore mentionner Sendinblue.
Combien d'e-mails puis-je envoyer gratuitement ?
300/jour sur le plan gratuit (9000/mois). Plus ? Passez sur un plan payant dès 25 $/mois pour 20 000 e-mails.
Puis-je utiliser Brevo pour les e-mails froids ?
Techniquement oui, mais c’est risqué (rebonds, spam). Brevo surveille la réputation expéditeur. Un taux de plainte élevé = suspension. Échauffez le domaine et respectez les bonnes pratiques.
Comment gérer les rebonds d'e-mails ?
Utilisez le webhook bounced. Supprimez les rebonds durs, réessayez les doux. Si le taux > 5%, votre réputation baisse.
Différence entre e-mails marketing et transactionnels ?
Transactionnel = 1 utilisateur, action déclenchée (commande, inscription). Marketing = campagne massive. Brevo sépare pour conformité/livrabilité.
Comment ajouter un lien de désinscription ?
Brevo l’ajoute d’office sur les e-mails marketing. Pour du transactionnel, ajoutez :
<a href="{{ unsubscribe_url }}">Se désinscrire</a>
Puis-je envoyer des e-mails depuis mon propre domaine ?
Oui, configurez SPF, DKIM, DMARC dans Paramètres → Expéditeur & IP. Sans ça, risque de spam.
Programmer des e-mails dans un fuseau spécifique ?
Utilisez scheduledAt avec un ISO 8601 :
{
"scheduledAt": "2026-03-25T09:00:00-05:00"
}
Que se passe-t-il si j'atteins la limite de débit ?
Erreur 429, avec header X-RateLimit-Reset. Implémentez un backoff ou mettez en queue.


Top comments (0)