QR Code do WhatsApp não aparece na API: o que checar
Se o QR code do WhatsApp não aparece na API, a causa mais comum é que a instância já está conectada, e nesse caso a API devolve o status em vez de um QR. As outras causas são instância suspensa por falta de saldo, instância bloqueada, uma geração de QR já em andamento e falha momentânea do provedor. Cada uma tem um código de resposta diferente, e é por ele que você descobre qual é. Este guia segue essa ordem e mostra o pareamento por código de telefone como alternativa.
Publicado em · 6 min de leitura
Como a API entrega o QR code?
A instância é criada e fica no estado PENDING até ser pareada. Para parear, você pede o QR em QR Code da instância e lê com o celular em Aparelhos conectados, como no WhatsApp Web. Quando a instância ainda não está conectada, a resposta traz o QR no campo instance.qrcode. O QR é de curta duração: se passar do tempo, peça outro em vez de insistir no antigo.
Se a instância já está conectada, a API não gera QR. Ela confirma o estado e devolve connected como verdadeiro, com o status da instância. Isso pega muita gente: o painel ou seu código espera uma imagem e recebe um objeto de status. Antes de depurar qualquer outra coisa, olhe o status da instância.
Ver o status e pedir o QR code
BASE="https://api.zapzapapi.com/api/v1"
H1="x-api-key: $ZAPZAP_API_KEY"
H2="x-api-secret: $ZAPZAP_API_SECRET"
# 1) estado atual: disconnected, connecting ou connected
curl "$BASE/$INSTANCE_ID/instance/status" -H "$H1" -H "$H2"
# 2) QR code (só vem se a instância ainda não estiver conectada)
curl "$BASE/instances/$INSTANCE_ID/qrcode" -H "$H1" -H "$H2"Node.js 18+: salvar o QR como imagem
const fs = require("fs");
const BASE = "https://api.zapzapapi.com/api/v1";
const headers = {
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
};
async function main() {
const id = process.env.INSTANCE_ID;
const resp = await fetch(BASE + "/instances/" + id + "/qrcode", { headers });
const corpo = await resp.json();
if (!resp.ok) {
console.error("erro", resp.status, corpo.error, corpo.message);
return;
}
if (corpo.connected) {
console.log("já conectada:", corpo.instance && corpo.instance.status);
return;
}
const qr = corpo.instance && corpo.instance.qrcode;
if (!qr) {
console.log("sem QR ainda, tente de novo:", JSON.stringify(corpo));
return;
}
const base64 = qr.replace(/^data:image\/\w+;base64,/, "");
fs.writeFileSync("qr.png", Buffer.from(base64, "base64"));
console.log("QR salvo em qr.png, leia com o celular");
}
main();O que cada código de resposta significa?
Tabela de diagnóstico para a chamada de QR code. As mensagens abaixo são as que a API devolve no corpo da resposta.
| Resposta | Causa | O que fazer |
|---|---|---|
| 200 com connected verdadeiro | A instância já está conectada | Nada a parear. Use o status para confirmar o número conectado |
| 402 PROXY_SUSPENDED | Instância suspensa por falta de saldo | Regularize o saldo e peça o QR de novo |
| 403 INSTANCE_BLOCKED | Instância bloqueada | Fale com o suporte |
| 409 CONFLICT | Já existe uma geração de QR em andamento para a instância | Aguarde alguns segundos e tente de novo. Evite cliques e chamadas em paralelo |
| 502 PROVIDER_ERROR | Falha ao falar com o provedor de WhatsApp | Tente de novo; se persistir, veja o status e acione o suporte |
| 503 SERVICE_UNAVAILABLE | Falha ao reativar uma instância que estava hibernada | Tente de novo em seguida |
| 404 NOT_FOUND | ID errado ou instância apagada | Confira o ID na lista de instâncias |
Dois detalhes de integração. O ID no caminho é o ID da instância, não o nome nem o telefone. E o 409 aparece quando seu código chama o QR em loop apertado: a API trava a geração por instância por um curto período para evitar QR sobreposto. Faça polling com intervalo de alguns segundos, não em rajada.
O QR aparece, mas o celular não consegue ler. E agora?
Primeiro, confira se o QR foi renderizado inteiro. O campo qrcode é uma imagem em base64 e, se o seu front corta o prefixo ou usa um elemento de tamanho pequeno, a leitura falha. Exiba a imagem em tamanho grande, com fundo branco e sem filtro de dark mode invertendo as cores.
Segundo, o celular precisa estar com o WhatsApp atualizado e com internet. Abra Configurações, Aparelhos conectados, Conectar um aparelho. Se o celular já está no limite de aparelhos conectados, remova um antes. Terceiro, QR expirado: gere um novo e leia logo. Se o fluxo estiver numa tela sua, atualize o QR de tempos em tempos enquanto o status não for connected.
Se mesmo assim a leitura falha, use o pareamento por código, que não depende de câmera.
Como parear sem QR code, por código de telefone?
A chamada conectar instância aceita o campo phone. Com o telefone no formato internacional (DDI, DDD e número, só dígitos), a API gera um código de pareamento em vez de QR. No celular, vá em Aparelhos conectados, Conectar um aparelho, e escolha conectar com número de telefone, digitando o código exibido. Sem o campo phone, a chamada gera o QR.
A API valida o formato do telefone e devolve erro de validação para número com símbolos ou sem código do país. O código vem em instance.paircode na resposta. Gere o código só quando for usá-lo, porque uma nova geração substitui a anterior.
Parear por código de telefone
curl -X POST "https://api.zapzapapi.com/api/v1/$INSTANCE_ID/instance/connect" \
-H "x-api-key: $ZAPZAP_API_KEY" \
-H "x-api-secret: $ZAPZAP_API_SECRET" \
-H "Content-Type: application/json" \
-d '{"phone":"5511999999999"}'
# digite no celular o código recebido em instance.paircodeQuando suspeitar de problema no número ou na conta?
Se a leitura do QR funciona mas a instância volta a desconectar logo em seguida, o problema deixou de ser o QR. Veja o guia de WhatsApp que desconecta sozinho na API. Se o WhatsApp recusa parear o número, ele pode estar restrito pelo próprio WhatsApp; o caminho é o do guia número banido: o que fazer.
Para criar a instância e conectar passo a passo, o início rápido mostra o fluxo completo, e a página de API de WhatsApp lista os endpoints de instância. O custo por número ativo está em preços.
Checklist rápido para parear sem dor de cabeça
[ ] Criei a instância e tenho o ID correto (não o nome nem o telefone)
[ ] O status da instância não é connected quando peço o QR
[ ] Há saldo suficiente e a instância não está suspensa ou bloqueada
[ ] Faço uma chamada de QR por vez e espero alguns segundos entre as tentativas
[ ] O QR é exibido por inteiro, em tamanho grande e com fundo branco
[ ] O WhatsApp do celular está atualizado e com internet
[ ] Se a câmera falha, uso o pareamento por código com o telefone em formato internacional
Em interfaces para clientes finais, vale mostrar instruções passo a passo ao lado do QR (abrir o WhatsApp, Aparelhos conectados, Conectar um aparelho) e um botão para gerar outro QR. Atualize o QR automaticamente enquanto o status não virar connected e mostre uma mensagem clara quando a API responder 402 ou 403, para o usuário saber que o problema não é a câmera dele.
Resumo rápido
- Se a instância já está conectada, a API devolve o status, não um QR. Consulte o status primeiro.
- 402 é saldo, 403 é bloqueio, 409 é geração de QR em andamento, 502 e 503 são falha momentânea do provedor.
- Faça polling do QR com intervalo de alguns segundos e renderize a imagem inteira, com fundo branco.
- Sem câmera ou com falha de leitura, use o pareamento por código de telefone em instance connect.
- Se parear funciona e desconecta depois, o problema é outro: veja as causas de desconexão.
Continue lendo
Perguntas frequentes
Por que a API não devolve o QR code?
O motivo mais comum é a instância já estar conectada: nesse caso a API responde com o status. Também pode ser saldo insuficiente (402), instância bloqueada (403), geração em andamento (409) ou falha do provedor (502/503).
O QR code expira?
Sim, é de curta duração. Se o tempo passar, gere um novo pela mesma chamada e leia logo em seguida.
Dá para conectar o WhatsApp sem ler QR code?
Dá. Envie o telefone em formato internacional no endpoint de conectar instância e digite no celular o código de pareamento devolvido, em Aparelhos conectados.
O que é o erro 409 ao pedir o QR?
Significa que já há uma geração de QR em andamento para a instância. Aguarde alguns segundos e tente de novo, sem chamadas em paralelo.
Preciso pagar para ver o QR code?
A instância precisa estar ativa. Se ela foi suspensa por falta de saldo, a API responde 402 até o saldo ser regularizado. Os valores vigentes estão na página de preços.
Conecte um número por QR code ou por código
Crie a conta, verifique o telefone e receba o crédito de boas-vindas, sem depositar (um por telefone, sujeito à campanha vigente). Crie a instância e faça o primeiro pareamento.
