ACCEPTED_ALREADY_PAID
pago
Llegó otro aviso de un link que ya estaba pagado: no se asienta dos veces. Informativo.
Códigos de error · 12 códigos · catálogo del 2026-10-21
Cada aviso de la pasarela queda en payment_webhook_events con un decision_code (src/payments/entities/payment-webhook-event.entity.ts). El webhook nunca pierde un pago: lo que no puede aplicar lo guarda como REVIEW_* para revisión humana y lo que no entiende como REJECTED_*. ACCEPTED_APPLIED (el caso normal) no se lista.
Lo que un código no dice lo hereda de aquí.
SELECT decision_code, COUNT(*) FROM payment_webhook_events GROUP BY 1. Cada fila guarda el cuerpo recibido para revisarlo.REVIEW_*: alguien revisa el pago contra Zauru y la orden, y lo aplica a mano si corresponde. REJECTED_*: revisar la plantilla que manda la pasarela (Pabbly) si se repite.ACCEPTED_ALREADY_PAIDpago
Llegó otro aviso de un link que ya estaba pagado: no se asienta dos veces. Informativo.
REJECTED_INVALID_UUIDpago
El uuid del aviso no coincide con el del link (o llegó vacío). Es la única prueba de autenticidad del endpoint, así que el aviso se rechaza.
REJECTED_MALFORMED_PAYLOADpago
El cuerpo del aviso no se pudo leer o el monto no es un cobro (0 o negativo). No hay dinero que registrar.
payment_webhook_events con decision_code = 'REJECTED_MALFORMED_PAYLOAD'; decision_detail dice qué faltó. Es el rechazo más común en producción (14 al 30/09/2026).REJECTED_STATUS_NOT_SUCCESSpago
El proveedor avisó un estado que no es cobro exitoso (rechazado, cancelado…). El link queda failed; no hay nada que conciliar.
REVIEW_AMOUNT_BELOW_EXPECTEDpago
Link de varias órdenes: entró menos de lo esperado y no hay a qué orden cargarle lo que falta. Se guarda para revisión humana.
REVIEW_AMOUNT_EXCEEDS_EXPECTEDpago
Entró más dinero del que esperaba el link. No se asienta solo: queda para revisión humana.
REVIEW_LINK_CANCELLEDpago
Llegó un pago para un link que ya estaba cancelado (p. ej. porque la cotización cambió). No se asienta: revisión humana.
REVIEW_LINK_NOT_FOUNDpago
Llegó un pago contra un link que no existe en esta base. No se asienta nada y el endpoint responde 404, pero la evidencia queda guardada.
[webhook] uid=<n> link inexistente. Base: payment_webhook_events con este decision_code y needs_reconciliation = 1.REVIEW_ORDERS_CHANGEDpago
Link de varias órdenes: desde que se emitió, alguna orden se pagó por otro lado, se anuló o bajó su saldo. Asentar lo pondría doble: revisión humana.
REVIEW_PAYMENT_WITHOUT_IDpago
Zauru aceptó el pago pero no devolvió su id, así que no se puede confirmar. El link queda failed y el pago para revisión.
REVIEW_STATUS_MISSINGpago
Llegó un aviso con el estado vacío: no se sabe si el cobro fue exitoso. El link queda intacto y el aviso para revisión.
[webhook] uid=<n> llego con status vacio.REVIEW_ZAURU_SYNC_FAILEDpago
El cobro llegó bien pero no se pudo asentar en Zauru (Zauru caído o sesión muerta). Se guarda la evidencia y se responde error para que el proveedor reintente.
payment_webhook_events.Texto generado desde el catálogo de errores de BoostAPI. Para corregirlo, se cambia allá y se sincroniza: verMantener esta documentación. También enMarkdown.