Payload Pay-In
El nombre del evento llega en el header X-Webhook-Event de cada entrega, no dentro del body JSON. Todos los montos van en pesos COP enteros.
payin.completed
Sección titulada «payin.completed»{ "txId": "a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d", "type": "PAYIN", "status": "COMPLETED", "amount": 50000, "currency": "COP", "feeCharged": 1500, "netAmount": 48500, "e2eId": "E2E-20260601-0001", "updatedAt": "2026-06-01T10:05:00.000Z"}payin.failed
Sección titulada «payin.failed»{ "txId": "a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d", "type": "PAYIN", "status": "FAILED", "amount": 50000, "currency": "COP", "feeCharged": 0, "netAmount": 0, "e2eId": null, "updatedAt": "2026-06-01T10:05:00.000Z"}payin.expired
Sección titulada «payin.expired»{ "txId": "a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d", "type": "PAYIN", "status": "EXPIRED", "amount": 50000, "currency": "COP", "failureReason": "Transaction expired without provider confirmation", "expiredAt": "2026-06-01T10:15:00.000Z"}Campos comunes
Sección titulada «Campos comunes»| Campo | Descripción |
|---|---|
Header X-Webhook-Event | Nombre del evento (payin.completed, payin.failed, payin.expired) |
txId | ID de la transacción en Rivopay (coincide con el de la creación) |
type | Siempre PAYIN |
status | Estado: COMPLETED, FAILED, EXPIRED |
amount | Monto en pesos COP |
feeCharged | Fee cobrado en pesos COP (0 si el cobro falló) |
netAmount | Monto neto acreditado en tu balance (solo en payin.completed) |
e2eId | Identificador end-to-end de la red Bre-B (null si falló; no aplica a Nequi) |
failureReason | Motivo (solo en payin.expired / fallos) |