DEV Community

Cover image for Cómo Usar APIs de Brevo para Marketing por SMS
Roobia
Roobia

Posted on • Originally published at apidog.com

Cómo Usar APIs de Brevo para Marketing por SMS

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.

Prueba Apidog hoy

Introducción

Brevo (antes Sendinblue) procesa millones de correos electrónicos diariamente para más de 500,000 empresas. Ofrece 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 simples: envías un mensaje y listo. Pero en producción debes manejar rebotes, quejas de spam, cancelaciones de suscripción y tiempos de entrega. Brevo abstrae esa complejidad para que puedas concentrarte en tu producto.

Casos de uso principales de la API:

  • Campañas de marketing: envíos masivos a listas de contactos.
  • Correos electrónicos transaccionales: para operaciones críticas (restablecimiento de contraseña, confirmaciones de pedido, notificaciones).
  • Mensajes SMS: códigos de verificación, alertas, mensajes promocionales.

💡 Si integras correo electrónico en tu app, Apidog facilita probar plantillas, validar cargas útiles de webhooks y asegurar que tu integración funcione en todos los clientes. Simula respuestas de Brevo y prueba el manejo de errores sin enviar correos reales.

Autenticación y configuración

Obtener una clave API

  1. Inicia sesión en Brevo
  2. Ve a SMTP & API → Claves API
  3. Crea una nueva clave con los permisos necesarios
  4. Guarda la clave de forma segura

Incluye la clave API en el header api-key:

curl -X GET "https://api.brevo.com/v3/account" \
  -H "accept: application/json" \
  -H "api-key: tu-clave-api-aqui"
Enter fullscreen mode Exit fullscreen mode

URL base de la API

Todas las solicitudes usan:

https://api.brevo.com/v3/
Enter fullscreen mode Exit fullscreen mode

Límites de tasa

  • Gratis: 300 solicitudes/minuto
  • Starter: 600 solicitudes/minuto
  • Business: 1200 solicitudes/minuto

Verifica el header X-RateLimit-Remaining para rastrear el uso.

Envío de correos electrónicos transaccionales

Los correos transaccionales son mensajes individuales activados por acciones del usuario (restablecimiento de contraseña, confirmaciones, bienvenidas, etc.).

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."
  }'
Enter fullscreen mode Exit fullscreen mode

Respuesta esperada:

{
  "messageId": "<20260324123456.123456@relay.brevo.com>"
}
Enter fullscreen mode Exit fullscreen mode

Uso de plantillas

Crea plantillas en el editor visual de Brevo y 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"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Variables de plantilla (usa dobles llaves):

<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>
Enter fullscreen mode Exit fullscreen mode

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
      }
    ]
  })
})
Enter fullscreen mode Exit fullscreen mode

Campañas de marketing

Envía correos masivos a listas de contactos. Brevo añade enlaces de cancelación de suscripción, permite programar envíos y ofrece 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"
  }'
Enter fullscreen mode Exit fullscreen mode

Enviar inmediatamente

curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
  -H "api-key: tu-clave-api"
Enter fullscreen mode Exit fullscreen mode

Obtener estadísticas de campaña

curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
  -H "api-key: tu-clave-api"
Enter fullscreen mode Exit fullscreen mode

Respuesta:

{
  "statistics": {
    "delivered": 4850,
    "opened": 1455,
    "clicked": 291,
    "unsubscribed": 12,
    "bounces": 150
  }
}
Enter fullscreen mode Exit fullscreen mode

Gestión de contactos

Organiza contactos 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
  }'
Enter fullscreen mode Exit fullscreen mode

updateEnabled: true actualiza si el contacto ya existe.

Obtener detalles del contacto

curl -X GET "https://api.brevo.com/v3/contacts/usuario@ejemplo.com" \
  -H "api-key: tu-clave-api"
Enter fullscreen mode Exit fullscreen mode

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"]
  }'
Enter fullscreen mode Exit fullscreen mode

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"]
  }'
Enter fullscreen mode Exit fullscreen mode

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
  }'
Enter fullscreen mode Exit fullscreen mode

Marketing por SMS

Envía SMS globalmente a través de la API de SMS de Brevo.

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Webhooks para seguimiento

Los webhooks notifican a tu aplicación sobre eventos: entregado, abierto, clickeado, rebotado, cancelación de suscripción.

Configurar webhooks

En el panel de Brevo: Configuración → Webhooks → Añadir webhook.

Eventos típicos:

  • delivered: Correo entregado
  • opened: Correo abierto
  • clicked: Clic en un enlace
  • bounced: Rebote (hard/soft)
  • spam: Marcado como spam
  • unsubscribed: Cancelación de 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}`)
      markContactBounced(event.email)
      break
    case 'spam':
      console.log(`Queja de spam de ${event.email}`)
      removeFromAllLists(event.email)
      break
    case 'unsubscribed':
      console.log(`Cancelación de suscripción: ${event.email}`)
      break
  }

  res.status(200).send('OK')
})
Enter fullscreen mode Exit fullscreen mode

Pruebas con Apidog

Las APIs de correo electrónico requieren pruebas robustas: plantillas, rebotes y webhooks. Apidog facilita estas validaciones.

Apidog test

1. Simular el envío de correos electrónicos

Durante el desarrollo, evita enviar correos 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>/)
})
Enter fullscreen mode Exit fullscreen mode

Apidog webhook

2. Probar el manejo de webhooks

Crea cargas útiles 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"
}
Enter fullscreen mode Exit fullscreen mode

Envía al endpoint de webhook y verifica el manejo en tu código.

3. Validar plantillas

Almacena las cargas útiles y prueba el reemplazo de variables:

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')
})
Enter fullscreen mode Exit fullscreen mode

4. Separación de entornos

Configura diferentes claves y remitentes para cada entorno:

# 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
Enter fullscreen mode Exit fullscreen mode

Prueba las APIs de Brevo con Apidog – gratis.

Errores comunes y soluciones

400 Bad Request - Campo requerido faltante

Causa: Falta un campo obligatorio.

Solución: Revisa el mensaje de error:

{
  "code": "invalid_parameter",
  "message": "sender.email es requerido"
}
Enter fullscreen mode Exit fullscreen mode

401 No autorizado

Causa: Clave API inválida o ausente.

Solución: Verifica que el header api-key esté correcto. Asegúrate de que la clave no haya sido revocada.

402 Pago requerido

Causa: Límite de cuenta o falta de créditos.

Solución:

  • Email: Revisa los límites de tu plan.
  • SMS: Compra créditos adicionales.

429 Demasiadas solicitudes

Causa: Exceso de solicitudes.

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')
}
Enter fullscreen mode Exit fullscreen mode

404 Contacto no encontrado

Causa: Intento de actualizar contacto inexistente.

Solución: Usa updateEnabled: true al crear:

{
  "email": "nuevo@ejemplo.com",
  "updateEnabled": true
}
Enter fullscreen mode Exit fullscreen mode

Así creas o actualizas 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 No
Correos transaccionales Limitado Sí (especializado)
SMS No No No
Automatización Limitado
Editor de plantillas Visual + código Código Visual Código

Brevo destaca por su soporte combinado de correo electrónico y SMS con precios competitivos.

Casos de uso en el mundo real

Flujo de pedidos e-commerce: Una tienda online usa Brevo para confirmaciones de pedido, notificaciones de envío, recuperación de carritos y promociones semanales, todo vía API.

Onboarding SaaS: Herramientas SaaS automatizan bienvenidas, restablecimiento de contraseñas e invitaciones de equipo por API. El marketing promociona nuevas funciones a suscriptores.

Verificación por SMS: Apps fintech envían códigos de 2FA vía SMS y gestionan reintentos con webhooks para entrega fallida.

Conclusión

Resumen práctico:

  • Las APIs de Brevo cubren marketing, correo transaccional y SMS.
  • Autenticación vía header api-key.
  • Usa plantillas para correos mantenibles.
  • Gestiona contactos y listas para campañas dirigidas.
  • Webhooks para rastrear entregas, aperturas, clics y rebotes.
  • Prueba con Apidog antes de lanzar a usuarios reales.

Siguientes pasos recomendados:

  1. Crea cuenta Brevo y genera tu clave API.
  2. Envía tu primer correo transaccional.
  3. Diseña una plantilla en el editor visual.
  4. Implementa handlers de webhooks para rebotes y bajas.
  5. Prueba tu integración con Apidog en desarrollo.

Prueba las APIs de Brevo con Apidog – gratis.

Preguntas frecuentes

¿Cuál es la diferencia entre Brevo y Sendinblue?

Es el mismo producto, solo cambio de nombre. Sendinblue ahora es Brevo desde 2023. Las APIs usan api.brevo.com, pero puedes ver referencias a Sendinblue en documentación previa.

¿Cuántos correos puedo enviar gratis?

300 correos diarios en el plan gratuito (9,000 al mes). Si necesitas más, los planes pagados comienzan desde $25/mes por 20,000 correos.

¿Puedo usar Brevo para correos en frío?

Técnicamente sí, pero puede ser riesgoso. Los envíos en frío suelen generar rebotes y quejas de spam. Brevo monitorea la reputación. Altas tasas de queja pueden suspender tu cuenta. Calienta tu dominio y sigue buenas prácticas.

¿Cómo manejo los rebotes?

Escucha los webhooks de tipo bounced. Rebotes duros (correo inválido) deben eliminarse permanentemente. Rebotes suaves (problemas temporales) pueden ser reintentados. Mantén tu tasa de rebote por debajo de 5%.

¿Diferencia entre correos de marketing y transaccionales?

Los transaccionales son activados por el usuario (compras, registro) y van a un solo destinatario. Los de marketing son campañas masivas. Brevo los separa para mejor entregabilidad.

¿Cómo añado enlace de cancelación de suscripción?

Brevo añade enlaces automáticamente en campañas de marketing. Para transaccionales, agrega manualmente:

<a href="{{ unsubscribe_url }}">Cancelar suscripción</a>
Enter fullscreen mode Exit fullscreen mode

¿Puedo enviar desde mi dominio?

Sí. Configura SPF, DKIM y DMARC en tu DNS. Brevo te da los valores en Configuración → Remitente & IP.

¿Cómo programo correos en zona horaria específica?

Usa el parámetro scheduledAt en formato ISO 8601:

{
  "scheduledAt": "2026-03-25T09:00:00-05:00"
}
Enter fullscreen mode Exit fullscreen mode

¿Qué pasa si llego al límite de tasa?

Recibirás error 429. Usa el header X-RateLimit-Reset para saber cuándo reintentar. Implementa retroceso exponencial o encola los envíos.

Top comments (0)