POST /v1/whatsapp/messages. A API envia mensagens apenas para leads que já existem na sua empresa — se o destinatário não for um lead, a resposta é 404 lead_not_found. Para registrar um lead novo antes do envio, use POST /v1/leads.
O destinatário (to)
O campo to aceita dois formatos:
Números brasileiros: a API resolve automaticamente a variação do nono dígito. Se o lead foi salvo sem o
9 (ou com), o envio funciona nas duas formas — você não precisa normalizar.Tipos de mensagem
O campotype define o corpo que acompanha a requisição:
Exemplo com template e variáveis:
GET /v1/whatsapp/templates — o nome e o idioma precisam bater exatamente com o template aprovado na Meta.
Enviando mídia
Mídia é enviada por link: você hospeda o arquivo e passa a URL — o WhatsApp baixa do seu servidor no momento do envio.- Público — sem autenticação, token ou página intermediária; a URL deve apontar direto para o arquivo.
- Content-Type correto — o servidor deve responder com o MIME type real do arquivo.
A janela de 24 horas
O WhatsApp só permite mensagens de formato livre (texto, mídia) se o lead enviou mensagem para você nas últimas 24 horas. Fora dessa janela, apenas templates aprovados. Quando a rejeição é síncrona, você recebe422 outside_24h_window na hora. Quando é assíncrona, a mensagem aparece como failed na consulta de status, com o motivo em error.
Acompanhar o status da mensagem
O ciclo de vida de uma mensagem enviada:whatsapp.message.updated chega na sua URL a cada transição, incluindo as falhas assíncronas, sem polling. Para consultas pontuais ou reconciliação, use o id retornado no envio:
status: failed trazem o motivo no campo error, com o código estável do catálogo de erros e o código numérico original da Meta: