Skip to main content
Realizar pago responde de inmediato con 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

Estos eventos solo se envían a webhooks de producción. Un webhook creado en modo prueba no los recibe, y event.environment siempre llega live. Para recibirlos, suscribe un webhook de producción a utility.paid y utility.rejected (Crear webhook).

Estructura del payload

Los dos eventos llegan como un POST 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 headers x-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.

Ejemplo utility.paid

Ejemplo utility.rejected