Skip to main content
Envie texto, mídia ou template WABA com POST /v1/messages/send — a conversa é criada automaticamente se não existir. Requer escopo messages:send.
1

Escolha a conexão

Se a sua conta tem mais de uma conexão WhatsApp, informe whatsappId (ou whatsappName). Sem nenhum dos dois, a API escolhe automaticamente a primeira conexão whatsapp/waba conectada, por ordem crescente de id — o campo isDefault (que aparece em GET /v1/connections) não entra nessa escolha. Liste as conexões em GET /v1/connections e anote o id da que você quer usar; não deixe pro automático se a sua conta tem mais de uma conexão ativa. Sem nenhuma conexão whatsapp/waba cadastrada, a resposta é 404 ERR_NO_CONNECTION_AVAILABLE.
2

Envie um texto

A resposta traz ticketId (a conversa) e messages[0].id.
3

Envie mídia (multipart)

Mídia vai por multipart/form-data, não JSON. O campo medias aceita imagem, áudio ou documento; body vira a legenda.
4

Envie um template WABA

Fora da janela de 24h (veja abaixo), só templates aprovados são entregues. Envie templateData como objeto:
Por compatibilidade, templateData também aceita uma string JSON com o mesmo conteúdo ("{\"templateName\":...}"). Prefira o objeto: é mais legível e evita erro de escaping.
5

Acompanhe a entrega

Consulte GET /v1/messages/{messageId}/status com o id retornado no envio, use-o como messageId:
A resposta traz found: true e o ack numérico (0 a 5) com o status correspondente, aninhados em message:
status é um destes valores: queued, sent, server_ack, delivered, read, failed, received (mensagem recebida do contato, não enviada por você) ou unknown.

Janela de 24 horas

O WhatsApp só permite texto livre até 24h depois da última mensagem do cliente. Fora dessa janela:
  • Conexões WABA precisam de um template aprovado (templateData) — texto livre falha com erro da Meta.
  • Conexões Baileys (WhatsApp Web) não têm essa restrição, mas dependem do aparelho estar conectado.
Enviar body fora da janela numa conexão WABA não derruba a chamada com erro do Whatix — a mensagem é aceita pela API e rejeitada pela Meta. Consulte o status/ack pra confirmar a entrega real.

Envio sem registrar conversa

Por padrão (saveOnTicket omitido ou true), o envio cria/reaproveita uma conversa (ticketId). Com saveOnTicket: false, o envio é fire-and-forget: em conexões Baileys nenhuma conversa é criada (ticketId: null na resposta); em WABA um ticket efêmero ainda é criado internamente, mas não aparece na tela de atendimento.
Use isso para notificações transacionais (código de verificação, alerta) que não precisam virar atendimento.

Erros comuns

Veja o catálogo completo de erros.