Skip to main content
Uma mensagem é um envio de WhatsApp para um telefone. Você envia um template aprovado a qualquer hora, ou outro conteúdo (texto, botões, lista, formulário, localização, reação) dentro da janela de 24h. O envio é assíncrono: a API aceita a mensagem e o status final chega pelo webhook.

O objeto mensagem

Enviar uma mensagem

Resposta 202 Accepted (o cost do exemplo é ilustrativo):
Depois disso, acompanhe pelo webhook message.status_updated. Consultar GET /v1/messages/{id} em laço funciona, mas o webhook é o caminho para produção.

Regras que valem saber

  • Um conteúdo por mensagem. Mande exatamente um entre templateName, body, interactive, location e reaction. Zero ou mais de um responde 400 VALIDATION_ERROR.
  • Janela de 24h. Só templateName passa a qualquer hora. Os outros conteúdos exigem a janela aberta; fora dela a resposta é 422 CONVERSATION_WINDOW_CLOSED. Para checar antes, use POST /v1/conversations/window-status.
  • Telefone. Use E.164 com + (+5511999999999). Também passam 5511999999999 e whatsapp:+5511999999999. Inválido: 422 INVALID_RECIPIENT.
  • Mídia no cabeçalho. A URL da imagem ou do PDF vai na primeira posição de templateVariables. Se o arquivo não está hospedado, suba em POST /v1/media/upload (imagem até 5 MB, PDF até 100 MB).
  • Idempotência. Com Idempotency-Key, a mesma chave devolve a mensagem já criada, sem reenviar nem cobrar. O corpo não é comparado: derive a chave de um evento do seu sistema (id do pedido, id da tentativa) e use uma chave por intenção de envio.
  • Status em maiúsculas. A API responde PENDING, SENT, DELIVERED. O webhook usa os mesmos estados em minúsculas, com PENDING virando queued.
  • Consulta por dono. GET /v1/messages/{id} só devolve mensagens do mesmo usuário dono da chave. Mensagem de outro membro responde 403 sem corpo, e ID inexistente responde 404 sem corpo.
  • Lote é tudo ou nada. Em POST /v1/messages/batch (até 1.000 destinatários, mesmo template), um telefone inválido ou saldo insuficiente recusa o lote inteiro com 422. Acima de 1.000, use Campanhas.

Agendar

scheduled_at em uma data futura deixa a mensagem em SCHEDULED até o horário. Data no passado envia na hora.

Endpoints

Conversas agrupam as mensagens trocadas com um telefone e controlam a janela de 24h. Exigem plano com caixa de entrada, número dedicado e chave ADMIN.

Erros mais comuns

A lista completa de cada endpoint está na página dele. Códigos de falha de entrega em Por que minha mensagem falhou.

Próximos passos

Templates

Criar e gerenciar templates aprovados.

Eventos de webhook

Receber delivered, read e failed em tempo real.