El QR de WhatsApp no aparece en la API: qué revisar
Si el QR de WhatsApp no aparece en la API, la causa más común es que la instancia ya está conectada, y en ese caso la API devuelve el status en lugar de un QR. Las otras causas son una instancia suspendida por falta de saldo, una instancia bloqueada, una generación de QR que ya está en curso y una falla momentánea del proveedor. Cada una tiene un código de respuesta distinto, y por él descubres cuál es. Esta guía sigue ese orden y muestra la vinculación por código de teléfono como alternativa.
Publicado el · 6 min de lectura
Este artículo también está disponible en: Português · English
¿Cómo entrega la API el código QR?
La instancia se crea y queda en estado PENDING hasta que se vincula. Para vincularla, pides el QR en QR Code de la instancia y lo lees con el celular en Dispositivos vinculados, como en WhatsApp Web. Cuando la instancia aún no está conectada, la respuesta trae el QR en el campo instance.qrcode. El QR dura poco: si pasa el tiempo, pide otro en lugar de insistir con el anterior.
Si la instancia ya está conectada, la API no genera QR. Confirma el estado y devuelve connected en verdadero, junto con el status de la instancia. Esto le pasa a mucha gente: el panel o tu código espera una imagen y recibe un objeto de status. Antes de depurar cualquier otra cosa, mira el status de la instancia.
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();¿Qué significa cada código de respuesta?
Tabla de diagnóstico para la llamada del QR. Los mensajes de abajo son los que la API devuelve en el cuerpo de la respuesta.
| Respuesta | Causa | Qué hacer |
|---|---|---|
| 200 con connected en verdadero | La instancia ya está conectada | No hay nada que vincular. Usa el status para confirmar el número conectado |
| 402 PROXY_SUSPENDED | Instancia suspendida por falta de saldo | Regulariza el saldo y pide el QR de nuevo |
| 403 INSTANCE_BLOCKED | Instancia bloqueada | Habla con soporte |
| 409 CONFLICT | Ya hay una generación de QR en curso para la instancia | Espera unos segundos y vuelve a intentar. Evita clics y llamadas en paralelo |
| 502 PROVIDER_ERROR | Falla al comunicarse con el proveedor de WhatsApp | Vuelve a intentar; si persiste, revisa el status y llama a soporte |
| 503 SERVICE_UNAVAILABLE | Falla al reactivar una instancia que estaba hibernada | Vuelve a intentar enseguida |
| 404 NOT_FOUND | ID equivocado o instancia eliminada | Revisa el ID en la lista de instancias |
Dos detalles de integración. El ID de la ruta es el ID de la instancia, no el nombre ni el teléfono. Y el 409 aparece cuando tu código llama al QR en un bucle apretado: la API bloquea la generación por instancia durante un período corto para evitar QR superpuestos. Haz polling con un intervalo de algunos segundos, no en ráfaga.
El QR aparece, pero el celular no logra leerlo. ¿Y ahora?
Primero, revisa que el QR se haya renderizado completo. El campo qrcode es una imagen en base64 y, si tu front recorta el prefijo o usa un elemento de tamaño pequeño, la lectura falla. Muestra la imagen en tamaño grande, con fondo blanco y sin un filtro de modo oscuro que invierta los colores.
Segundo, el celular necesita tener WhatsApp actualizado e internet. Abre Configuración, Dispositivos vinculados, Vincular un dispositivo. Si el celular ya llegó al límite de dispositivos vinculados, quita uno antes. Tercero, QR vencido: genera uno nuevo y léelo enseguida. Si el flujo está en una pantalla tuya, actualiza el QR cada cierto tiempo mientras el status no sea connected.
Si aun así la lectura falla, usa la vinculación por código, que no depende de la cámara.
¿Cómo vincular sin código QR, con código de teléfono?
La llamada conectar instancia acepta el campo phone. Con el teléfono en formato internacional (código de país, código de área y número, solo dígitos), la API genera un código de vinculación en lugar de un QR. En el celular, ve a Dispositivos vinculados, Vincular un dispositivo, y elige vincular con número de teléfono, escribiendo el código mostrado. Sin el campo phone, la llamada genera el QR.
La API valida el formato del teléfono y devuelve un error de validación para números con símbolos o sin código de país. El código llega en instance.paircode en la respuesta. Genera el código solo cuando vayas a usarlo, porque una nueva generación reemplaza a la 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¿Cuándo sospechar de un problema con el número o la cuenta?
Si la lectura del QR funciona pero la instancia vuelve a desconectarse enseguida, el problema ya no es el QR. Mira la guía de WhatsApp que se desconecta solo en la API. Si WhatsApp se niega a vincular el número, puede que esté restringido por el propio WhatsApp; el camino es el de la guía número baneado: qué hacer.
Para crear la instancia y conectar paso a paso, el inicio rápido muestra el flujo completo, y la página de API de WhatsApp lista los endpoints de instancia. El costo por número activo está en precios.
Checklist rápido para vincular sin dolores de cabeza
[ ] Creé la instancia y tengo el ID correcto (no el nombre ni el teléfono)
[ ] El status de la instancia no es connected cuando pido el QR
[ ] Hay saldo suficiente y la instancia no está suspendida ni bloqueada
[ ] Hago una llamada de QR a la vez y espero unos segundos entre intentos
[ ] El QR se muestra completo, en tamaño grande y con fondo blanco
[ ] El WhatsApp del celular está actualizado y con internet
[ ] Si la cámara falla, uso la vinculación por código con el teléfono en formato internacional
En interfaces para clientes finales, conviene mostrar instrucciones paso a paso junto al QR (abrir WhatsApp, Dispositivos vinculados, Vincular un dispositivo) y un botón para generar otro QR. Actualiza el QR automáticamente mientras el status no pase a connected y muestra un mensaje claro cuando la API responda 402 o 403, para que el usuario sepa que el problema no es su cámara.
Resumen rápido
- Si la instancia ya está conectada, la API devuelve el status, no un QR. Consulta primero el status.
- 402 es saldo, 403 es bloqueo, 409 es generación de QR en curso, 502 y 503 son fallas momentáneas del proveedor.
- Haz polling del QR con un intervalo de algunos segundos y renderiza la imagen completa, con fondo blanco.
- Sin cámara o con fallas de lectura, usa la vinculación por código de teléfono en instance connect.
- Si vincular funciona y se desconecta después, el problema es otro: revisa las causas de desconexión.
Sigue leyendo
Lee también
Preguntas frecuentes
¿Por qué la API no devuelve el código QR?
El motivo más común es que la instancia ya esté conectada: en ese caso la API responde con el status. También puede ser saldo insuficiente (402), instancia bloqueada (403), generación en curso (409) o falla del proveedor (502/503).
¿El código QR vence?
Sí, dura poco. Si pasa el tiempo, genera uno nuevo con la misma llamada y léelo enseguida.
¿Se puede conectar WhatsApp sin leer un código QR?
Sí. Envía el teléfono en formato internacional al endpoint de conectar instancia y escribe en el celular el código de vinculación devuelto, en Dispositivos vinculados.
¿Qué es el error 409 al pedir el QR?
Significa que ya hay una generación de QR en curso para la instancia. Espera unos segundos y vuelve a intentar, sin llamadas en paralelo.
¿Tengo que pagar para ver el código QR?
La instancia tiene que estar activa. Si fue suspendida por falta de saldo, la API responde 402 hasta que se regularice el saldo. Los valores vigentes están en la página de precios.
Conecta un número por QR o por código
Crea la cuenta, verifica tu teléfono y recibe el crédito de bienvenida, sin depositar (uno por teléfono, sujeto a la campaña vigente). Crea la instancia y haz la primera vinculación.
