Desarrolladores
Referencia de la API
QR: status y stream (SSE)

QR: estado y stream en tiempo real

Dos formas de saber cuándo pagó el cliente. Ambos endpoints son públicos (los consume el navegador directamente, sin key).


GET /qr/stream/:reference (SSE — recomendado)

Stream de Server-Sent Events por transacción. Conéctate con EventSource usando la reference de WizPay (no el numero_referencia):

const es = new EventSource(`https://api.wizpay.app/qr/stream/${reference}`)
 
es.addEventListener('confirmed', (e) => { /* ✅ pagado — JSON en e.data */ })
es.addEventListener('expired',   ()  => { /* ⏰ QR vencido */ })
es.addEventListener('invalid',   ()  => { /* ❌ pago inválido */ })
es.onmessage = (e) => { /* connected / heartbeat */ }
EventoCuándo llega
(mensaje inicial){ type: "connected", reference, timestamp } al abrir la conexión.
confirmedLa red bancaria confirmó el pago — la transacción pasa a APROBADO.
expiredEl QR venció sin pagarse.
invalidEl callback llegó con datos inválidos.
(heartbeat){ type: "heartbeat", timestamp } cada 30 s para mantener viva la conexión.

La conexión se cierra sola a los 10 minutos (la vida del QR). Si sigue pendiente, genera un QR nuevo.

El simulador de esta página no mantiene streams SSE — pruébalo contra producción con un QR real. El resto del flujo sí es simulable.


GET /qr/status/:numero_referencia (polling)

Consulta el estado del QR en la red bancaria por su numero_referencia (el que devolvió /qr/generate). Fallback para cuando SSE no está disponible.

Response 200

{
  "numeroReferencia": 9509574123,
  "estado": "PAGADO",
  "codigoRespuesta": "00",
  "detalleRespuesta": null
}

estado: PENDIENTEPAGADO (los nombres exactos los define la red bancaria; trata cualquier valor distinto de PAGADO como pendiente).

Pruébalo

Genera un QR en /qr/generate y pega aquí su numero_referencia:

GET/qr/status/9509574123⚡ Simulador — se ejecuta en tu navegador
Ver cURL equivalente (producción)
curl -X GET "https://api.wizpay.app/qr/status/9509574123"