WhatsApp API v2 Reference
Documentacao interativa gerada a partir da spec OpenAPI 3.1. Clique em qualquer endpoint para ver parametros, exemplos de request e response. Copie com um clique.
O usuario abre o WhatsApp do celular, vai em Configuracoes › Aparelhos conectados › Conectar aparelho e escaneia o QR Code exibido pela API. A cada chamada de /iniciar um novo QR Code e gerado (validade ~60s, renova automaticamente).
POST /instancia/criar
POST /{id}/iniciar
GET /{id}/qrcode
GET /{id}/status
Exemplo completo em JavaScript
O parceiro envia o numero de telefone do cliente. A API inicia a sessao e solicita o codigo ao WhatsApp. O cliente digita o codigo manualmente no celular: Configuracoes › Aparelhos conectados › Conectar com codigo de telefone. O codigo expira em 120 segundos.
POST /{id}/solicitar-pareamento
body: {"phone":"5511999999999"}
start-session
"W4NQJMRD" (8 chars)
Config › Aparelhos › Conectar com codigo
Formato do telefone
O telefone deve conter DDI + DDD + numero, apenas digitos, 10 a 15 caracteres. Regex validado: ^\d{10,15}$.
Exemplo completo em JavaScript (com polling)
Troubleshooting
• Pairing Code: integracoes server-to-server, onboarding remoto (sem camera), apps mobile que mandam o codigo via push.
• QR Code: onboarding presencial, web apps com camera, fluxo manual.
Importa uma sessao previamente pareada do armazenamento PostgreSQL do microservico v2. A sessao conecta automaticamente apos a importacao, sem precisar de QR Code ou pairing code.
POST /{id}/importar-sessao
store-postgres
nao precisa /iniciar
Exemplo completo em JavaScript
Exemplo em PHP (Laravel)
Troubleshooting
QR Code vs Pairing Code vs Importar Sessao
Configure via PUT /whatsapp/instancia/{id}/configuracao. O microservico envia POST para sua URL com Content-Type: application/json, timeout 10s.
URLs de webhook (roteamento)
Bloqueio por tipo de mensagem (filtros)
Voce pode impedir que certos tipos de mensagem disparem o webhook. Util para ignorar stickers, audios longos, localizacoes, etc. Configure o campo tipos_envio dentro de config_json (via PUT /whatsapp/instancia/{id}/configuracao).
O campo tipos_envio recebe um array de tipos. Toda mensagem cujo tipo esteja nesse array sera salva no banco (com status skipped) mas nao disparara webhook. Comportamento identico ao painel de configuracao da instancia.
tipo do payload (em minusculas: text, image, etc). Nao confunda com os nomes em maiusculas usados na API v1 (MENSAGEM_ENVIADA, AUDIO_RECEBIDO). Na v2 os valores sao os mesmos do campo tipo retornado no webhook.
"tipos_envio": [] para remover todos os bloqueios e voltar a receber todos os tipos via webhook. As mensagens bloqueadas continuam sendo salvas no banco e podem ser consultadas via GET /whatsapp/mensagens.
Eventos de webhook
O campo from_me indica a direcao. O campo status indica o estado atual (pending, sent, delivered, read, played, failed). Em replies, os campos quoted_message_id e quoted_participant identificam a mensagem original.
Exemplo: webhook message_status (receipt)
Exemplo: webhook message_received com reply (quoted)
Valores de status (campo status)
Sistema de retry
Retries acontecem em 1min, 5min e 30min em caso de falha (total 4 tentativas em ~36min). Apos falha na 4a tentativa: marca erro permanente.
Exemplo: receptor de webhook em Node.js (Express)
Exemplo: receptor em PHP (Laravel)
Relatos indicam que numeros novos estao sendo banidos logo no primeiro envio. Antes de comecar a disparar mensagens em massa, aqueca a conta:
- Interaja de forma organica e gradual por alguns dias (conversas reais, respostas, grupos).
- Adicione foto de perfil, bio e nome configurados.
- Converse com contatos que ja tem seu numero salvo.
- Evite o primeiro envio sendo uma campanha em massa.
- Nao envie muitas mensagens de uma vez. Distribua os envios ao longo do dia.
- Tenha cuidado redobrado com numeros estrangeiros (DDI diferente do seu), pois isso aumenta significativamente o risco de restricoes.
- Varie o conteudo. Mensagens identicas repetidas disparam alertas.
- Priorize contatos que ja interagiram com voce (opt-in).
Se o numero tomou restricao, aguarde um periodo de descanso antes de voltar a enviar. Embora deixar o numero parado por ~15 dias ajude, o foco principal deve ser evitar o comportamento que causou o banimento inicial.
- Pare os envios em massa imediatamente.
- Deixe a conta em descanso por pelo menos 7 a 15 dias.
- Quando retornar, recomece de forma lenta e organica (aquecimento novamente).
- Revise o volume, horarios e tipos de mensagens que estavam sendo enviados.
- Se o banimento se repetir, considere trocar o numero e comecar do zero com aquecimento adequado.