TL;DR
Las APIs de Brevo te permiten enviar correos electrónicos de marketing, correos transaccionales y mensajes SMS de forma programática. Te autenticas con una clave API, envías solicitudes a api.brevo.com y utilizas webhooks para rastrear la entrega y el engagement. Para pruebas, usa Apidog para validar cargas útiles, probar manejadores de webhooks y asegurarte de que tu integración maneje correctamente los rebotes y las cancelaciones de suscripción.
Introducción
Brevo (anteriormente Sendinblue) procesa millones de correos electrónicos diariamente para más de 500,000 empresas. Maneja campañas de marketing, correos electrónicos transaccionales, marketing por SMS y flujos de trabajo de automatización.
Las APIs de correo electrónico parecen sencillas: enviar un mensaje, listo. Pero los sistemas de correo electrónico de producción necesitan manejar rebotes, quejas de spam, cancelaciones de suscripción y tiempos de entrega. Brevo gestiona esta complejidad para que tú no tengas que hacerlo.
La API cubre tres casos de uso principales:
- Campañas de marketing - Correos masivos a listas de contactos
- Correos electrónicos transaccionales - Restablecimiento de contraseñas, confirmaciones de pedidos, notificaciones
- Mensajes SMS - Códigos de verificación, alertas, mensajes de texto de marketing
Autenticación y configuración
Obtener una clave API
- Inicia sesión en Brevo
- Ve a SMTP & API → Claves API
- Crea una nueva clave con los permisos apropiados
- Guárdala de forma segura
La clave API va en el encabezado api-key:
curl -X GET "https://api.brevo.com/v3/account" \
-H "accept: application/json" \
-H "api-key: tu-clave-api-aqui"
URL base de la API
Todas las solicitudes van a:
https://api.brevo.com/v3/
Límites de tasa
Brevo limita las solicitudes por plan:
- Gratis: 300 solicitudes/minuto
- Starter: 600 solicitudes/minuto
- Business: 1200 solicitudes/minuto
Verifica el encabezado X-RateLimit-Remaining para rastrear el uso.
Envío de correos electrónicos transaccionales
Los correos electrónicos transaccionales son mensajes individuales activados por acciones del usuario. Piensa en restablecimientos de contraseña, confirmaciones de pedidos, correos de bienvenida.
Enviar un correo electrónico simple
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "accept: application/json" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"sender": {
"name": "Tu Aplicación",
"email": "noreply@tuapp.com"
},
"to": [
{
"email": "usuario@ejemplo.com",
"name": "Juan Pérez"
}
],
"subject": "Bienvenido a Nuestra Plataforma",
"htmlContent": "<html><body><h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p></body></html>",
"textContent": "¡Bienvenido! Gracias por registrarte."
}'
Respuesta:
{
"messageId": "<20260324123456.123456@relay.brevo.com>"
}
Uso de plantillas
Crea plantillas en el editor visual de Brevo, luego envíalas por ID:
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"templateId": 15,
"to": [
{
"email": "usuario@ejemplo.com",
"name": "Juan Pérez"
}
],
"params": {
"name": "Juan",
"order_number": "ORD-12345",
"tracking_url": "https://seguimiento.ejemplo.com/ORD-12345"
}
}'
Las variables de plantilla usan doble llave:
<p>Hola {{params.name}},</p>
<p>Tu pedido {{params.order_number}} ha sido enviado.</p>
<p><a href="{{params.tracking_url}}">Rastrea tu paquete</a></p>
Enviar con adjuntos
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: 'Tu Aplicación', email: 'noreply@tuapp.com' },
to: [{ email: 'usuario@ejemplo.com' }],
subject: 'Tu Factura',
htmlContent: '<p>Adjunto encontrarás tu factura.</p>',
attachment: [
{
name: 'factura.pdf',
content: contenidoPdfCodificadoBase64
}
]
})
})
Campañas de marketing
Los correos electrónicos de marketing se envían a listas de contactos. Brevo maneja los enlaces de cancelación de suscripción, la programación y las analíticas.
Crear una campaña
curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"name": "Boletín de Marzo",
"subject": "Novedades de Marzo",
"sender": {
"name": "Tu Marca",
"email": "boletin@tumarea.com"
},
"type": "classic",
"htmlContent": "<html><body>Contenido del boletín aquí...</body></html>",
"recipients": {
"listIds": [12, 15]
},
"scheduledAt": "2026-03-25T09:00:00+00:00"
}'
Enviar inmediatamente
curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
-H "api-key: tu-clave-api"
Obtener estadísticas de campaña
curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
-H "api-key: tu-clave-api"
La respuesta incluye:
{
"statistics": {
"delivered": 4850,
"opened": 1455,
"clicked": 291,
"unsubscribed": 12,
"bounces": 150
}
}
Gestión de contactos
Los contactos son las personas a las que envías correos electrónicos. Organízalos en listas y añade atributos personalizados.
Crear un contacto
curl -X POST "https://api.brevo.com/v3/contacts" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"email": "nuevo.usuario@ejemplo.com",
"attributes": {
"FIRSTNAME": "Juana",
"LASTNAME": "Gómez",
"PLAN": "premium"
},
"listIds": [12, 15],
"updateEnabled": true
}'
La bandera updateEnabled: true actualiza los contactos existentes en lugar de fallar.
Obtener detalles del contacto
curl -X GET "https://api.brevo.com/v3/contacts/usuario@ejemplo.com" \
-H "api-key: tu-clave-api"
Añadir a la lista
curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"emails": ["usuario1@ejemplo.com", "usuario2@ejemplo.com"]
}'
Eliminar de la lista
curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"emails": ["usuario@ejemplo.com"]
}'
Cancelar suscripción de un contacto
curl -X PUT "https://api.brevo.com/v3/contacts/usuario@ejemplo.com" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"emailBlacklisted": true
}'
Marketing por SMS
Brevo envía mensajes SMS globalmente a través de su API de SMS.
Enviar un SMS
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"sender": "TuApp",
"recipient": "+15551234567",
"content": "Tu código de verificación es: 123456",
"type": "transactional"
}'
Enviar SMS de marketing
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: tu-clave-api" \
-H "content-type: application/json" \
-d '{
"sender": "TuMarca",
"recipient": "+15551234567",
"content": "¡Venta flash! 50% de descuento solo hoy. Responde STOP para cancelar suscripción.",
"type": "marketing"
}'
Obtener estadísticas de SMS
curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
-H "api-key: tu-clave-api"
Webhooks para seguimiento
Los webhooks notifican a tu aplicación sobre eventos de correo electrónico: entregado, abierto, clickeado, rebotado, cancelación de suscripción.
Configurar webhooks
En el panel de control de Brevo: Configuración → Webhooks → Añadir webhook
Eventos a rastrear:
delivered- Correo electrónico entregado en la bandeja de entradaopened- Destinatario abrió el correo electrónicoclicked- Destinatario hizo clic en un enlacebounced- Correo electrónico rebotado (duro o suave)spam- Marcado como spamunsubscribed- Destinatario canceló la suscripción
Manejar la carga útil del webhook
app.post('/webhooks/brevo', (req, res) => {
const event = req.body
switch (event.event) {
case 'delivered':
console.log(`Correo ${event.messageId} entregado a ${event.email}`)
break
case 'opened':
console.log(`Correo abierto por ${event.email} en ${event.date}`)
break
case 'bounced':
console.log(`Rebote: ${event.email} - ${event.reason}`)
// Marcar contacto como inválido
markContactBounced(event.email)
break
case 'spam':
console.log(`Queja de spam de ${event.email}`)
// Eliminar de todas las listas
removeFromAllLists(event.email)
break
case 'unsubscribed':
console.log(`Cancelación de suscripción: ${event.email}`)
break
}
res.status(200).send('OK')
})
Pruebas con Apidog
Las APIs de correo electrónico tienen modos de fallo complejos. Necesitas probar plantillas, rebotes y webhooks. Apidog ayuda.

1. Simular el envío de correos electrónicos
Durante el desarrollo, no envíes correos electrónicos reales. Simula la respuesta:
pm.test('La API de correo electrónico acepta una carga útil válida', () => {
const response = pm.response.json()
pm.expect(response).to.have.property('messageId')
pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. Probar el manejo de webhooks
Crea cargas útiles de webhook simuladas en Apidog:
{
"event": "bounced",
"email": "invalido@ejemplo.com",
"messageId": "<12345@relay.brevo.com>",
"reason": "hard_bounce",
"date": "2026-03-24T12:00:00Z",
"subject": "Bienvenido a Nuestra Plataforma"
}
Envía a tu endpoint de webhook y verifica que tu código lo maneja.
3. Validar plantillas
Almacena las cargas útiles de las plantillas y prueba que las variables se reemplazan correctamente:
pm.test('Las variables de plantilla son válidas', () => {
const payload = pm.request.body.toJSON()
pm.expect(payload.params).to.have.property('name')
pm.expect(payload.params).to.have.property('order_number')
})
4. Separación de entornos
# Desarrollo
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@tuapp.com
# Producción
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@tuapp.com
Prueba las APIs de correo electrónico de Brevo con Apidog - gratis
Errores comunes y soluciones
400 Bad Request - Campo requerido faltante
Causa: La carga útil no tiene campos requeridos.
Solución: Revisa el mensaje de error para detalles específicos:
{
"code": "invalid_parameter",
"message": "sender.email es requerido"
}
401 No autorizado
Causa: Clave API inválida o faltante.
Solución: Verifica que el encabezado api-key esté configurado correctamente. Revisa que la clave no haya sido revocada.
402 Pago requerido
Causa: La cuenta ha excedido los límites o faltan créditos.
Solución:
- Para correo electrónico: Revisa los límites de correo electrónico de tu plan
- Para SMS: Compra créditos de SMS
429 Demasiadas solicitudes
Causa: Límite de tasa excedido.
Solución: Implementa retroceso exponencial:
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('Límite de tasa excedido')
}
404 Contacto no encontrado
Causa: Intentando actualizar un contacto que no existe.
Solución: Usa updateEnabled: true al crear contactos:
{
"email": "nuevo@ejemplo.com",
"updateEnabled": true
}
Esto crea o actualiza el contacto.
Alternativas y comparaciones
| Característica | Brevo | SendGrid | Mailchimp | Postmark |
|---|---|---|---|---|
| Precios | 300 correos/día gratis | 100 correos/día gratis | 500 correos/mes gratis | 100 correos/mes gratis |
| Correos de marketing | Sí | Sí | Sí | No |
| Correos transaccionales | Sí | Sí | Limitado | Sí (especializado) |
| SMS | Sí | No | No | No |
| Automatización | Sí | Sí | Sí | Limitado |
| Editor de plantillas | Visual + código | Código | Visual | Código |
Brevo destaca por su soporte combinado de correo electrónico y SMS a precios competitivos.
Casos de uso en el mundo real
Flujo de pedidos de comercio electrónico. Una tienda en línea utiliza Brevo para: confirmación de pedidos (transaccional), notificación de envío (transaccional), recuperación de carritos abandonados (automatización de marketing) y promociones semanales (campañas de marketing). Todo desde una sola integración.
Incorporación a SaaS. Una herramienta de gestión de proyectos envía correos electrónicos de bienvenida, restablecimiento de contraseñas e invitaciones de equipo a través de la API transaccional. Los correos electrónicos de marketing anuncian nuevas funciones a los usuarios suscritos.
Verificación por SMS. Una aplicación fintech utiliza la API de SMS de Brevo para códigos de autenticación de dos factores. El endpoint de SMS transaccional entrega códigos en segundos, y los webhooks rastrean los fallos de entrega para la lógica de reintento.
Conclusión
Esto es lo que has aprendido:
- Las APIs de Brevo manejan marketing, correo electrónico transaccional y SMS
- Autentícate con el encabezado
api-key - Usa plantillas para correos electrónicos consistentes y mantenibles
- Gestiona contactos y listas para campañas dirigidas
- Los webhooks rastrean entregas, aperturas, clics y rebotes
- Prueba con Apidog antes de enviar a usuarios reales
Tus próximos pasos:
- Crea una cuenta Brevo y obtén una clave API
- Envía tu primer correo electrónico transaccional
- Crea una plantilla en el editor visual
- Configura manejadores de webhooks para rebotes y cancelaciones de suscripción
- Prueba con Apidog en desarrollo
Prueba las APIs de correo electrónico de Brevo con Apidog - gratis
Preguntas frecuentes
¿Cuál es la diferencia entre Brevo y Sendinblue?Es el mismo producto, pero con un nuevo nombre. Sendinblue cambió su marca a Brevo en 2023. Las APIs siguen usando api.brevo.com, pero verás referencias a Sendinblue en documentación antigua.
¿Cuántos correos electrónicos puedo enviar gratis?300 correos electrónicos por día en el plan gratuito. Eso son 9,000 correos al mes. Para más, actualiza a un plan de pago que comienza en $25/mes por 20,000 correos.
¿Puedo usar Brevo para correos electrónicos en frío?Técnicamente sí, pero es arriesgado. Los correos electrónicos en frío tienen altas tasas de rebote y spam. Brevo monitorea la reputación del remitente. Altas tasas de quejas pueden suspender las cuentas. Calienta tu dominio primero y sigue las mejores prácticas de correo electrónico.
¿Cómo manejo los rebotes de correo electrónico?Escucha los webhooks de bounced. Los rebotes duros (correo electrónico inválido) deben eliminar contactos permanentemente. Los rebotes suaves (buzón lleno, problemas temporales) pueden ser reintentados. Rastrea la tasa de rebote; si excede el 5%, tu reputación de remitente disminuye.
¿Cuál es la diferencia entre correos electrónicos de marketing y transaccionales?Los correos electrónicos transaccionales son activados por acciones del usuario (compras, registros) y se envían a un solo destinatario. Los correos electrónicos de marketing son campañas enviadas a muchos destinatarios simultáneamente. Brevo los separa por razones de entregabilidad y cumplimiento.
¿Cómo añado un enlace de cancelación de suscripción?Brevo añade automáticamente enlaces de cancelación de suscripción a los correos electrónicos de marketing. Para correos electrónicos transaccionales, añade tu propio enlace:
<a href="{{ unsubscribe_url }}">Cancelar suscripción</a>
¿Puedo enviar correos electrónicos desde mi propio dominio?Sí. Configura los registros SPF, DKIM y DMARC. Brevo proporciona los valores en Configuración → Remitente & IP. Sin la autenticación adecuada, los correos electrónicos pueden terminar en spam.
¿Cómo programo correos electrónicos en una zona horaria específica?Usa el parámetro scheduledAt con una marca de tiempo ISO 8601:
{
"scheduledAt": "2026-03-25T09:00:00-05:00"
}
¿Qué sucede si alcanzo el límite de tasa?Obtendrás un error 429. La respuesta incluye el encabezado X-RateLimit-Reset con los segundos hasta el reinicio. Implementa retroceso exponencial o encola los correos electrónicos para más tarde.
