Como Usar APIs Brevo (ex Sendinblue) para SMS Marketing?

Ashley Innocent

Ashley Innocent

24 março 2026

Como Usar APIs Brevo (ex Sendinblue) para SMS Marketing?

TL;DR

As APIs da Brevo permitem que você envie e-mails de marketing, e-mails transacionais e mensagens SMS programaticamente. Você se autentica com uma chave de API, envia solicitações para api.brevo.com e usa webhooks para rastrear a entrega e o engajamento. Para testar, use o Apidog para validar payloads, testar manipuladores de webhook e garantir que sua integração lide corretamente com bounces e cancelamentos de inscrição.

Introdução

A Brevo (anteriormente Sendinblue) processa milhões de e-mails diariamente para mais de 500.000 empresas. Ela gerencia campanhas de marketing, e-mails transacionais, marketing por SMS e fluxos de trabalho de automação.

As APIs de e-mail parecem simples - envie uma mensagem, pronto. Mas os sistemas de e-mail em produção precisam lidar com bounces, reclamações de spam, cancelamentos de inscrição e tempo de entrega. A Brevo gerencia essa complexidade para que você não precise se preocupar.

A API cobre três casos de uso principais:

💡
Se você estiver integrando e-mail em seu aplicativo, o Apidog ajuda a testar modelos, validar payloads de webhook e garantir que sua integração funcione em todos os clientes de e-mail. Você pode simular as respostas da Brevo durante o desenvolvimento e testar o tratamento de erros sem enviar e-mails reais.
button
button

Autenticação e configuração

Obter uma chave de API

  1. Faça login na Brevo
  2. Vá para SMTP & API → Chaves de API
  3. Crie uma nova chave com as permissões apropriadas
  4. Armazene-a de forma segura

A chave de API vai no cabeçalho api-key:

curl -X GET "https://api.brevo.com/v3/account" \
  -H "accept: application/json" \
  -H "api-key: sua-chave-api-aqui"

URL base da API

Todas as solicitações vão para:

https://api.brevo.com/v3/

Limites de taxa

A Brevo limita as solicitações por plano:

Verifique o cabeçalho X-RateLimit-Remaining para acompanhar o uso.

Envio de e-mails transacionais

E-mails transacionais são mensagens individuais acionadas por ações do usuário. Pense em redefinições de senha, confirmações de pedidos, e-mails de boas-vindas.

Enviar um e-mail simples

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "accept: application/json" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "sender": {
      "name": "Seu App",
      "email": "noreply@seusite.com"
    },
    "to": [
      {
        "email": "usuario@example.com",
        "name": "João Silva"
      }
    ],
    "subject": "Bem-vindo à Nossa Plataforma",
    "htmlContent": "<html><body><h1>Bem-vindo!</h1><p>Obrigado por se inscrever.</p></body></html>",
    "textContent": "Bem-vindo! Obrigado por se inscrever."
  }'

Resposta:

{
  "messageId": "<20260324123456.123456@relay.brevo.com>"
}

Usando modelos

Crie modelos no editor visual da Brevo e envie pelo ID:

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "templateId": 15,
    "to": [
      {
        "email": "usuario@example.com",
        "name": "João Silva"
      }
    ],
    "params": {
      "name": "João",
      "order_number": "PED-12345",
      "tracking_url": "https://rastreamento.example.com/PED-12345"
    }
  }'

Variáveis de modelo usam chaves duplas:

<p>Olá {{params.name}},</p>
<p>Seu pedido {{params.order_number}} foi enviado.</p>
<p><a href="{{params.tracking_url}}">Rastreie seu pacote</a></p>

Enviar com anexos

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: 'Seu App', email: 'noreply@seusite.com' },
    to: [{ email: 'usuario@example.com' }],
    subject: 'Sua Fatura',
    htmlContent: '<p>Por favor, encontre sua fatura anexada.</p>',
    attachment: [
      {
        name: 'fatura.pdf',
        content: base64EncodedPdfContent
      }
    ]
  })
})

Campanhas de marketing

E-mails de marketing vão para listas de contatos. A Brevo gerencia links de cancelamento de inscrição, agendamento e análises.

Criar uma campanha

curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "name": "Newsletter de Março",
    "subject": "Novidades em Março",
    "sender": {
      "name": "Sua Marca",
      "email": "newsletter@suamarca.com"
    },
    "type": "classic",
    "htmlContent": "<html><body>Conteúdo da newsletter aqui...</body></html>",
    "recipients": {
      "listIds": [12, 15]
    },
    "scheduledAt": "2026-03-25T09:00:00+00:00"
  }'

Enviar imediatamente

curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
  -H "api-key: sua-chave-api"

Obter estatísticas da campanha

curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
  -H "api-key: sua-chave-api"

A resposta inclui:

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

Gerenciamento de contatos

Contatos são as pessoas para quem você envia e-mails. Organize-os em listas e adicione atributos personalizados.

Criar um contato

curl -X POST "https://api.brevo.com/v3/contacts" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "email": "novo.usuario@example.com",
    "attributes": {
      "FIRSTNAME": "Joana",
      "LASTNAME": "Silva",
      "PLAN": "premium"
    },
    "listIds": [12, 15],
    "updateEnabled": true
  }'

A flag updateEnabled: true atualiza contatos existentes em vez de falhar.

Obter detalhes do contato

curl -X GET "https://api.brevo.com/v3/contacts/usuario@example.com" \
  -H "api-key: sua-chave-api"

Adicionar à lista

curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["usuario1@example.com", "usuario2@example.com"]
  }'

Remover da lista

curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["usuario@example.com"]
  }'

Cancelar inscrição de um contato

curl -X PUT "https://api.brevo.com/v3/contacts/usuario@example.com" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "emailBlacklisted": true
  }'

Marketing por SMS

A Brevo envia mensagens SMS globalmente através de sua API de SMS.

Enviar um SMS

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "sender": "SeuApp",
    "recipient": "+15551234567",
    "content": "Seu código de verificação é: 123456",
    "type": "transactional"
  }'

Enviar SMS de marketing

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: sua-chave-api" \
  -H "content-type: application/json" \
  -d '{
    "sender": "SuaMarca",
    "recipient": "+15551234567",
    "content": "Liquidação relâmpago! 50% de desconto hoje. Responda PARAR para cancelar.",
    "type": "marketing"
  }'

Obter estatísticas de SMS

curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
  -H "api-key: sua-chave-api"

Webhooks para rastreamento

Webhooks notificam seu aplicativo sobre eventos de e-mail: entregue, aberto, clicado, bounce, cancelado.

Configurar webhooks

No painel da Brevo: Configurações → Webhooks → Adicionar webhook

Eventos para rastrear:

Manipular payload de webhook

app.post('/webhooks/brevo', (req, res) => {
  const event = req.body
  
  switch (event.event) {
    case 'delivered':
      console.log(`E-mail ${event.messageId} entregue para ${event.email}`)
      break
    case 'opened':
      console.log(`E-mail aberto por ${event.email} em ${event.date}`)
      break
    case 'bounced':
      console.log(`Bounce: ${event.email} - ${event.reason}`)
      // Marcar contato como inválido
      markContactBounced(event.email)
      break
    case 'spam':
      console.log(`Reclamação de spam de ${event.email}`)
      // Remover de todas as listas
      removeFromAllLists(event.email)
      break
    case 'unsubscribed':
      console.log(`Cancelado: ${event.email}`)
      break
  }
  
  res.status(200).send('OK')
})

Testando com Apidog

APIs de e-mail têm modos de falha complexos. Você precisa testar modelos, bounces e webhooks. O Apidog ajuda.

1. Simular envio de e-mail

Durante o desenvolvimento, não envie e-mails reais. Simule a resposta:

pm.test('Email API accepts valid payload', () => {
  const response = pm.response.json()
  pm.expect(response).to.have.property('messageId')
  pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. Testar manipulação de webhook

Crie payloads de webhook simulados no Apidog:

{
  "event": "bounced",
  "email": "invalid@example.com",
  "messageId": "<12345@relay.brevo.com>",
  "reason": "hard_bounce",
  "date": "2026-03-24T12:00:00Z",
  "subject": "Bem-vindo à Nossa Plataforma"
}

Envie para o seu endpoint de webhook e verifique se o seu código o manipula.

3. Validar modelos

Armazene payloads de modelo e teste se as variáveis são substituídas corretamente:

pm.test('Template variables are valid', () => {
  const payload = pm.request.body.toJSON()
  pm.expect(payload.params).to.have.property('name')
  pm.expect(payload.params).to.have.property('order_number')
})

4. Separação de ambiente

# Desenvolvimento
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@seusite.com

# Produção
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@seusite.com

Teste as APIs de e-mail da Brevo com Apidog - grátis

Erros comuns e soluções

400 Bad Request - Campo obrigatório ausente

Causa: Payload sem campos obrigatórios.

Solução: Verifique a mensagem de erro para detalhes:

{
  "code": "invalid_parameter",
  "message": "sender.email é obrigatório"
}

401 Não autorizado

Causa: Chave de API inválida ou ausente.

Solução: Verifique se o cabeçalho api-key está configurado corretamente. Verifique se a chave não foi revogada.

402 Pagamento Necessário

Causa: Conta excedeu limites ou faltam créditos.

Solução:

429 Muitas Solicitações

Causa: Limite de taxa excedido.

Solução: Implemente um backoff 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('Limite de taxa excedido')
}

404 Contato não encontrado

Causa: Tentando atualizar um contato que não existe.

Solução: Use updateEnabled: true ao criar contatos:

{
  "email": "novo@example.com",
  "updateEnabled": true
}

Isso cria ou atualiza o contato.

Alternativas e comparações

Recurso Brevo SendGrid Mailchimp Postmark
Preços 300 e-mails/dia grátis 100 e-mails/dia grátis 500 e-mails/mês grátis 100 e-mails/mês grátis
E-mails de marketing Sim Sim Sim Não
E-mails transacionais Sim Sim Limitado Sim (especializado)
SMS Sim Não Não Não
Automação Sim Sim Sim Limitado
Editor de modelos Visual + código Código Visual Código

A Brevo se destaca pelo suporte combinado de e-mail e SMS a preços competitivos.

Casos de uso reais

Fluxo de pedidos de e-commerce. Uma loja online usa a Brevo para: confirmação de pedido (transacional), notificação de envio (transacional), recuperação de carrinho abandonado (automação de marketing) e promoções semanais (campanhas de marketing). Tudo a partir de uma única integração.

Onboarding SaaS. Uma ferramenta de gerenciamento de projetos envia e-mails de boas-vindas, redefinições de senha e convites de equipe via API transacional. E-mails de marketing anunciam novos recursos para usuários opt-in.

Verificação por SMS. Um aplicativo fintech usa a API de SMS da Brevo para códigos de autenticação de dois fatores. O endpoint de SMS transacional entrega códigos em segundos, e webhooks rastreiam falhas de entrega para lógica de nova tentativa.

Conclusão

Aqui está o que você aprendeu:

Seus próximos passos:

  1. Crie uma conta Brevo e obtenha uma chave de API
  2. Envie seu primeiro e-mail transacional
  3. Crie um modelo no editor visual
  4. Configure manipuladores de webhook para bounces e cancelamentos de inscrição
  5. Teste com Apidog no desenvolvimento

Teste as APIs de e-mail da Brevo com Apidog - grátis

button

FAQ

Qual a diferença entre Brevo e Sendinblue?Mesmo produto, novo nome. A Sendinblue mudou a marca para Brevo em 2023. As APIs ainda usam api.brevo.com, mas você verá referências à Sendinblue em documentações mais antigas.

Quantos e-mails posso enviar gratuitamente?300 e-mails por dia no plano gratuito. Isso dá 9.000 e-mails por mês. Para mais, faça upgrade para um plano pago a partir de $25/mês para 20.000 e-mails.

Posso usar a Brevo para cold emails?Tecnicamente sim, mas é arriscado. Cold emails têm altas taxas de bounce e spam. A Brevo monitora a reputação do remetente. Altas taxas de reclamação podem suspender contas. Aqueça seu domínio primeiro e siga as melhores práticas de e-mail.

Como lidar com bounces de e-mail?Monitore webhooks de bounced. Hard bounces (e-mail inválido) devem remover contatos permanentemente. Soft bounces (caixa de entrada cheia, problemas temporários) podem ser retentados. Acompanhe a taxa de bounce - se exceder 5%, sua reputação de remetente cai.

Qual a diferença entre e-mails de marketing e transacionais?E-mails transacionais são acionados por ações do usuário (compras, cadastros) e vão para um destinatário. E-mails de marketing são campanhas enviadas para muitos destinatários simultaneamente. A Brevo os separa por motivos de entregabilidade e conformidade.

Como adicionar um link de cancelamento de inscrição?A Brevo adiciona automaticamente links de cancelamento de inscrição a e-mails de marketing. Para e-mails transacionais, adicione seu próprio link:

<a href="{{ unsubscribe_url }}">Cancelar inscrição</a>

Posso enviar e-mails do meu próprio domínio?Sim. Configure registros SPF, DKIM e DMARC. A Brevo fornece os valores em Configurações → Remetente & IP. Sem a autenticação adequada, os e-mails podem cair na caixa de spam.

Como agendar e-mails em um fuso horário específico?Use o parâmetro scheduledAt com um timestamp ISO 8601:

{
  "scheduledAt": "2026-03-25T09:00:00-05:00"
}

O que acontece se eu atingir o limite de taxa?Você receberá um erro 429. A resposta inclui o cabeçalho X-RateLimit-Reset com os segundos até o reset. Implemente um backoff exponencial ou enfileire os e-mails para mais tarde.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs