1. Comece por aqui
MailLeader
  • Comece por aqui
    • Primeiros Passos no MailLeader
    • Campanhas de e-mail
    • Guia de Desenvolvedores e API REST
    • Configuração de Domínios e DNS
    • E-mail Profissional e Webmail
    • Exemplos de Uso e Snippets de Código
    • Formulários e captura de leads
    • Listas de Contatos e Gestão de Audiência
    • Configuração de Registros MX (Mail Exchange)
    • Pixels e eventos de sites
    • Planos e recursos da sua conta
    • Envio de E-mails via Protocolo SMTP
    • Templates de e-mail
    • Webhooks
  • Referência
    • Autenticação e chaves de API
      • Entrar
      • Criar conta
      • Solicitar redefinição de senha
      • Validar token de redefinição
      • Redefinir senha
      • Sair
      • Criar chave de API
      • Listar chaves de API
      • Revogar chave de API
      • Dados do usuário autenticado
      • Completar perfil
    • Webmail
      • Entrar no webmail
      • Caixas disponíveis
      • Pastas da caixa
      • Listar mensagens de uma pasta
      • Ler mensagem
      • Marcar ou desmarcar flags
      • Mover para a lixeira
      • Marcar como spam
      • Desmarcar spam
      • Enviar pelo webmail
    • Domínios e contas de e-mail
      • Cadastrar domínio
      • Cadastrar domínio (alias)
      • Listar domínios
      • Detalhar domínio
      • Remover domínio
      • Registros DNS e estado de verificação
      • Verificar DNS agora
      • Consultar chave DKIM
      • Gerar nova chave DKIM
      • Criar conta de e-mail
      • Listar contas do domínio
      • Atualizar conta de e-mail
      • Remover conta de e-mail
    • Envio de e-mail
      • Enviar e-mail
      • Consultar envios
      • Exportar histórico de envios
    • Campanhas
      • Salvar rascunho, enviar ou agendar campanha
      • Enviar e-mail de teste da campanha
      • Listar campanhas da conta
      • Consultar rascunho
      • Remetentes disponíveis para campanhas
      • Público estimado da campanha
      • Remetentes da lista
      • Campanhas de uma lista
      • Detalhar campanha
      • Destinatários da campanha
    • Listas e contatos
      • Criar lista
      • Listar listas
      • Detalhar lista
      • Atualizar lista
      • Remover lista
      • Listar contatos da lista
      • Adicionar contato
      • Importar contatos em lote
      • Exportar contatos
      • Atualizar contato
      • Remover contato
    • Descadastro (público)
      • Consultar link de descadastro
      • Confirmar descadastro
    • Templates de e-mail
      • Listar templates
      • Criar template
      • Detalhar template
      • Atualizar template
      • Remover template
    • Formulários e leads
      • Criar formulário de captura
      • Listar formulários
      • Detalhar formulário
      • Atualizar formulário
      • Remover formulário
      • Código de incorporação
      • Métricas do formulário
      • Listar inscrições
      • Exportar inscrições (CSV)
      • Histórico de entregas do webhook do formulário
      • Reenviar entrega do webhook
      • Consultar secret do webhook do formulário
    • Formulários e leads (público)
      • Definição pública do formulário
      • Enviar inscrição
      • Regras de origem do formulário
    • Contatos e pixel
      • Resumo de marketing
      • Listar contatos
      • Detalhar contato
      • Linha do tempo do contato
      • Listar sites com pixel
      • Cadastrar site
      • Atualizar site
      • Snippet de instalação
      • Métricas do site
      • Emitir token para identificar contato
    • Pixel (público)
      • Script do pixel
      • Iniciar sessão (após consentimento)
      • Registrar eventos
      • Associar sessão a contato
      • Revogar consentimento
    • Webhooks
      • Eventos disponíveis
      • Criar webhook
      • Listar webhooks
      • Detalhar webhook
      • Atualizar webhook
      • Remover webhook
      • Ativar ou pausar webhook
      • Enviar evento de teste
      • Girar secret de assinatura
      • Histórico de entregas
      • Reenviar entrega
    • Planos e cobrança
      • Catálogo público de planos
      • Planos disponíveis para a conta
      • Módulos e acessos da conta
      • Plano atual
      • Resumo de cobrança
      • Consumo da conta
      • Consumo por domínio (período civil)
      • Consumo por domínio (operacional)
      • Listar planos
      • Detalhar plano
      • Listar faturas
      • Detalhar fatura
      • Itens da fatura
      • Gerar pagamento da fatura
      • Checkout em andamento
      • Iniciar contratação de plano
      • Gerar pagamento do checkout
      • Atualizar estado do checkout
      • Cancelar checkout
    • Estatísticas
      • Visão geral do painel
  • Esquemas
    • Pagination
    • Error
    • SignIn
    • SignUp
    • ForgotPassword
    • ResetPassword
    • CreateApiKey
    • ApiKeyCreated
    • CreateDomain
    • CreateDomainAccount
    • UpdateDomainAccount
    • SendMailJson
    • SendMailForm
    • MailSendResult
    • CampaignCompose
    • CampaignTest
    • EmailList
    • ListContact
    • ListContactUpdate
    • EmailTemplate
    • LeadField
    • LeadCampaign
    • SubmitLead
    • Site
    • Webhook
    • WebhookStatus
    • MailFlags
    • WebMailSend
    • BillingProfile
    • SelectPlan
    • License
    • PixelSession
    • PixelEvents
    • PixelIdentify
    • PixelRevoke
    • IdentifyToken
  1. Comece por aqui

Webhooks

Webhooks avisam seu servidor quando algo acontece no MailLeader. Você cria um endpoint HTTPS, escolhe os eventos e valida cada requisição com o secret HMAC do webhook.

Configurar#

No painel, abra Desenvolvedor > Webhooks > Novo Webhook. Informe um nome, o endpoint e os eventos. Para eventos de toda a conta, deixe o domínio sem seleção. Eventos de campanha, lead e assinatura são sempre da conta e não aceitam filtro por domínio.
O endpoint deve usar HTTPS público na porta 443. URLs com usuário/senha, IP ou host privado e redirecionamentos não são aceitos. Headers adicionais são opcionais; headers x-mailleader-* e headers de transporte são reservados.
Ao criar o webhook, o MailLeader gera um secret de 32 bytes e o mostra uma única vez. Guarde-o em um cofre de segredos no servidor que receberá as chamadas. A chave não pode ser consultada depois. Se ela for perdida, use Gerar novo secret na gestão do webhook; a chave anterior para de validar imediatamente.

Eventos disponíveis#

Selecione um ou mais eventos na criação ou edição. Os nomes abaixo são os valores enviados no campo event.

Sites#

EventoO que significa
page.viewedO pixel consentido registrou uma página. Não prova atividade humana.
link.clickedO pixel registrou um clique em link do site. Só a origem do destino é enviada.
visitor.identifiedO servidor associou uma sessão consentida a um contato por formulário ou token de uso único.
site.customEvento personalizado habilitado na configuração do site. Pode incluir properties JSON aninhado de até 2 KB.

E-mail e campanhas#

EventoO que significa
smtp.email.acceptedUma mensagem de campanha foi aceita para submissão SMTP.
smtp.email.queuedMensagem registrada na fila de saída.
smtp.email.rejectedEnvio recusado durante a submissão ou por uma política.
smtp.email.deliveredO servidor do destinatário aceitou a mensagem; isso não confirma a caixa de entrada.
smtp.email.deferredA entrega foi temporariamente adiada.
smtp.email.bouncedO servidor do destinatário recusou a entrega.
smtp.email.expiredA mensagem expirou na fila de envio.
smtp.email.openedO pixel de abertura foi solicitado; proxies podem acionar o evento.
smtp.email.clickedUm link de campanha recebeu o primeiro clique classificado como não automatizado. Não comprova interação humana.
campaign.createdUma nova campanha ou rascunho foi criado.
campaign.queuedUma campanha foi publicada ou agendada.
campaign.startedO primeiro destinatário começou a ser processado.
campaign.completedO processamento terminou sem falhas confirmadas ou resultados pendentes de confirmação.
campaign.failedO processamento terminou com falhas ou resultados pendentes de confirmação.
Entrega, abertura, clique e conclusão do processamento são acontecimentos diferentes. Os eventos não devem ser tratados como confirmação de compra ou de leitura humana.

Leads e assinaturas#

EventoO que significa
lead.createdUm formulário aceitou um cadastro. Inclui os campos do formulário em lead.data.
account.subscription.createdUma assinatura foi criada, ativa ou aguardando pagamento.
account.subscription.activatedUma assinatura foi efetivamente ativada.
account.subscription.change_requestedUma troca de plano ou ativação foi solicitada. A solicitação pode ainda não estar aplicada.
account.subscription.plan_changedUma alteração de plano entrou em vigor.
account.subscription.change_cancelledUm downgrade agendado foi cancelado; a assinatura não foi cancelada.

Domínios e contas de e-mail#

EventoO que significa
account.domain.createdUm domínio foi adicionado à conta.
account.domain.verifiedO domínio passou pelas verificações DNS exigidas para ativação.
account.domain.status_changedO estado do domínio mudou.
account.domain.deletedUm domínio foi removido.
account.email_account.createdUma identidade de envio ou caixa foi criada.
account.email_account.updatedA configuração de uma identidade ou caixa foi alterada.
account.email_account.deletedUma identidade de envio ou caixa foi removida.
Credenciais, tokens, chaves DKIM e dados de pagamento não são enviados nesses eventos.

Formato do corpo#

O corpo JSON inclui event, eventId, timestamp e os campos próprios do evento no mesmo nível. Não há um objeto externo data envolvendo o payload.
Exemplo de lead.created:
{
  "event": "lead.created",
  "eventId": "57d3e91b-7c3f-4fc0-9055-5a5a7f19a002",
  "timestamp": "2026-10-15T19:54:02.223Z",
  "leadId": "898660008068124672",
  "campaignId": "898591276704731136",
  "listId": null,
  "consented": false,
  "lead": {
    "id": "898660008068124672",
    "data": {"name":"Ana Silva","email":"ana@example.com"},
    "consentAt": null
  }
}
lead.data contém os campos aceitos pelo formulário. O evento não inclui IP, user-agent nem identificadores de anúncios.
Exemplo de site.custom:
{
  "event": "site.custom",
  "eventId": "b6ae4736-9fd6-4667-a8ee-a4b61fd99031",
  "timestamp": "2026-10-15T19:54:02.223Z",
  "siteId": "468ebe45-2eb5-4568-9412-72e3565c6f4a",
  "path": "/precos",
  "origin": "https://empresa.example",
  "name": "demo.requested",
  "properties": {
    "button": "hero",
    "lead": {"source":"ebook","score":12},
    "products": ["analytics","automation"]
  },
  "contactId": null,
  "sessionId": "7d21cda4-6dbc-4e36-8e3b-4e420bcc6158",
  "classification": "unclassified"
}
As propriedades personalizadas são definidas no site que envia o evento e aceitam JSON aninhado de até 2 KB. Não inclua segredos ou informações que não devam ser armazenadas e encaminhadas ao seu endpoint.

Como o HMAC funciona#

O secret é compartilhado entre o MailLeader e seu endpoint. O MailLeader calcula HMAC-SHA256 sobre o timestamp, um ponto e os bytes originais do corpo HTTP:
HMAC_SHA256(secret, timestamp + "." + rawBody)
Cada requisição inclui:
HeaderConteúdo
x-mailleader-timestampTimestamp Unix em segundos.
x-mailleader-signaturesha256= seguido do HMAC hexadecimal.
x-mailleader-event-idID usado para deduplicar eventos e tentativas repetidas.
O endpoint deve validar a assinatura antes de confiar no JSON. Leia o corpo bruto antes de decodificá-lo: reserializar o objeto JSON pode mudar os bytes e invalidar a assinatura. Compare a assinatura em tempo constante e rejeite timestamps antigos (por exemplo, com mais de cinco minutos).

Exemplo de receptor em Node.js#

Este exemplo usa express.raw() para validar os mesmos bytes que foram assinados. Configure MAILLEADER_WEBHOOK_SECRET no ambiente do servidor.
Em produção, registre o eventId em uma tabela com índice único e só responda 2xx depois de aceitar o evento com segurança. Se o mesmo ID já tiver sido processado, responda 2xx sem repetir a operação.

Retentativas e histórico#

O MailLeader considera sucesso uma resposta HTTP 2xx. Falhas de rede e outras respostas recebem novas tentativas automáticas com espera exponencial; são feitas até 10 tentativas, começando em 30 segundos. Redirecionamentos não são seguidos.
Na gestão do webhook, consulte o histórico para ver estado, horário, código HTTP e erro sanitizado. O payload e o secret não aparecem no histórico. Uma entrega que falhou pode ser reenviada manualmente; o eventId original é mantido, então o endpoint deve deduplicar.

Rotas de gestão#

Método e rotaUso
GET /api/v1/webhook/eventsConsultar catálogo de eventos.
POST /api/v1/webhookCriar webhook; o retorno contém o secret, exibido uma única vez.
GET /api/v1/webhookListar webhooks sem revelar secrets ou headers.
GET /api/v1/webhook/{id}Consultar um webhook sem revelar o secret.
PATCH /api/v1/webhook/{id}Editar nome, URL, eventos, domínio ou headers.
PATCH /api/v1/webhook/{id}/statusAtivar ou pausar entregas futuras.
POST /api/v1/webhook/{id}/secret/rotateGerar secret novo; invalida o anterior.
POST /api/v1/webhook/{id}/testEnfileirar um evento de teste webhook.test.
GET /api/v1/webhook/{id}/deliveriesConsultar entregas e tentativas.
POST /api/v1/webhook/{id}/deliveries/{deliveryId}/retrySolicitar reenvio de uma entrega falha.
DELETE /api/v1/webhook/{id}Excluir webhook.
Essas rotas de gestão exigem autenticação. O endpoint que recebe as notificações é o seu serviço e valida o HMAC usando o secret guardado no momento da criação ou rotação.
Modificado em 2026-10-15 23:44:00
Página anterior
Templates de e-mail
Próxima página
Entrar
Built with