Dev

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

Este artigo também está disponível em: English · Español

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.

RespostaCausaO que fazer
200 com connected verdadeiroA instância já está conectadaNada a parear. Use o status para confirmar o número conectado
402 PROXY_SUSPENDEDInstância suspensa por falta de saldoRegularize o saldo e peça o QR de novo
403 INSTANCE_BLOCKEDInstância bloqueadaFale com o suporte
409 CONFLICTJá existe uma geração de QR em andamento para a instânciaAguarde alguns segundos e tente de novo. Evite cliques e chamadas em paralelo
502 PROVIDER_ERRORFalha ao falar com o provedor de WhatsAppTente de novo; se persistir, veja o status e acione o suporte
503 SERVICE_UNAVAILABLEFalha ao reativar uma instância que estava hibernadaTente de novo em seguida
404 NOT_FOUNDID errado ou instância apagadaConfira 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.paircode

Quando 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.

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.