status: "pending": el convenio
confirma el pago después. Estos webhooks te avisan el resultado final para que no tengas que consultar
el pago una y otra vez.
Eventos disponibles
Estructura del payload
Los dos eventos llegan como unPOST con Content-Type: application/json y este cuerpo:
Objeto utility
string (UUID)
required
Identificador del pago. Si lo creaste por API, es el mismo
id que te devolvió Realizar
pago. Úsalo para deduplicar: un mismo evento puede llegarte más de una
vez (ver Entrega y reintentos).string (UUID) | null
Lote al que pertenece el pago. Por API, OnePay agrupa en un lote los pagos de cada día; desde el
panel es el lote que creaste. No es el mismo valor que
group_id en la respuesta de Realizar
pago, que trae el nombre del convenio y la referencia: para
relacionar el webhook con tu solicitud usa id o external_id.string (UUID)
required
Convenio pagado. Es el
provider_id que enviaste al pagar, el mismo de Consultar
convenios.string
required
Nombre del convenio.
number
required
Monto pagado, en pesos colombianos y no en centavos:
250000 son $250.000. Si el monto tiene
centavos, llega con decimales (12345.67).string
required
Referencia de pago del convenio: la que enviaste en
reference, sin guiones.string | null
required
Tu propio identificador, si lo enviaste al realizar el pago. Llega
null si no lo enviaste, y siempre en los pagos en lote desde el panel.string
required
paid en utility.paid y rejected en utility.rejected.string | null
Solo en
utility.rejected: motivo del rechazo, por ejemplo La deuda actual es diferente.El webhook no trae la fecha del pago. Si la necesitas y creaste el pago por API, consulta el
pago: la respuesta incluye
paid_at.Objeto event
string
required
Nombre del evento:
utility.paid o utility.rejected. También llega en el header
x-webhook-event.integer
required
Momento en que OnePay generó el evento, en segundos Unix (UTC).
string
required
Siempre
live en estos eventos.string (UUID)
required
Empresa dueña del pago.
Cómo validar que viene de OnePay
Cada entrega trae los headersx-webhook-token (el token estático de tu webhook), x-webhook-event
(utility.paid o utility.rejected) y, si tu webhook tiene un secret, Signature: el HMAC-SHA256 en
hexadecimal del cuerpo crudo. El código para verificarlos está en
Autenticación de los eventos.
Responde con un 2xx en menos de 10 segundos; si no, OnePay reintenta la entrega
(Entrega y reintentos). Un 3xx no cuenta como éxito
por sí solo: OnePay sigue la redirección y lo que vale es la respuesta final.