Skip to main content
Este es el campo más importante de toda la respuesta de VerificacionPago. Se encuentra dentro de str_res_pago en la posición 5.

Tabla consolidada

Estados en detalle

1 — Aprobado ✅

El pago fue exitoso. int_pago_terminado también será 1.
Actualizar pedido a “pagado” en tu base de datos.
Entregar producto o activar servicio.
Enviar email de confirmación (Zonapagos envía el comprobante de pago; tu correo confirma la entrega del producto).
Registrar en logs con el str_ticketID / str_codigo_transaccion (CUS) para conciliación.

888 — Pendiente por iniciar

El usuario aún no ha abierto la str_url del ciclo de pago. No hizo nada todavía.
Es el estado natural tras llamar /InicioPago y antes de que el usuario haga clic. Si después de 30 minutos sigue en 888, asume que el usuario abandonó.

999 — Pendiente por finalizar (PSE / presencial)

La transacción fue iniciada y enviada a la red de pagos, pero aún no llega confirmación definitiva.
Requerimiento de certificación PSE: si este estado se mantiene cuando consultas tras el callback, debes mostrar al usuario un mensaje específico. Ver Mensajes de certificación.Mensaje obligatorio:
“En este momento su Número de Referencia o Factura (id_Pago) presenta un proceso de pago cuya transacción se encuentra PENDIENTE de recibir confirmación por parte de su entidad financiera, por favor espere unos minutos y vuelva a consultar más tarde…”
Para pagos presenciales (PDF generado, convenios GANA/Efecty) el estado 999 puede durar 1 a 2 días. Tu sonda debe marcar estos pagos para consultar cada hora, no cada 10 minutos.

4001 — Pendiente CR (solo TC)

La franquicia (Visa/MC/AmEx/Diners) retuvo la transacción para revisión manual por riesgo de fraude.
  • Requiere interacción humana de la franquicia.
  • Tiempo máximo: 1 día y fracción.
  • Pasado ese tiempo, la transacción queda automáticamente rechazada.
  • Debes mostrar al usuario el mismo mensaje de pendiente (ver certificación).

1000 — Rechazado

Rechazo general del banco o franquicia. Razones comunes: fondos insuficientes, tarjeta vencida, bloqueo por seguridad, etc. El API no detalla la razón específica.
Marcar pedido como rechazado.
Permitir reintento con un nuevo str_id_pago.
No reutilizar el str_id_pago original.

1001 — Error ACH/Banco (equivale a rechazado)

Error técnico entre ACH (PSE) y el banco del usuario. Se trata igual que 1000.

4000 — Rechazado CR (solo TC)

La franquicia revisó la transacción retenida en CR y decidió rechazarla.

4003 — Error CR (solo TC)

Error técnico durante el proceso CR. Equivale a rechazo.

Árbol de decisión

Estados obsoletos (no esperes verlos)

Los siguientes códigos existieron en versiones anteriores del API pero fueron eliminados:
  • 777 — Obsoleto desde v5.0 (mayo 2025).
  • 1002 — Obsoleto.
  • 1003 — Obsoleto desde v5.0.
  • 1004 — Obsoleto desde v5.0.
Si un viejo sistema tuyo los maneja, puedes removerlos del código.

Estados del pago completo (int_pago_terminado)

Independiente de int_estado_pago, el campo int_pago_terminado indica si el pago (en su conjunto, útil para pagos mixtos) terminó:

Ver también

Implementar sonda

El job que maneja los estados pendientes.

Mensajes de certificación

Textos obligatorios para estados 999 y 4001.