Skip to main content
Esta página contiene ejemplos de todos los eventos de webhook disponibles en OnePay, organizados por categoría.
Todos los webhooks incluyen un objeto event con la siguiente estructura:
  • type: Tipo de evento (ej. payment.approved)
  • timestamp: Marca de tiempo Unix del evento
  • environment: Entorno donde ocurrió el evento (live o test)

Pagos (Cobros)

Eventos disponibles

  • payment.created - Cobro creado
  • payment.deleted - Cobro eliminado
  • payment.rejected - Cobro rechazado
  • payment.approved - Cobro aprobado
  • payment.expired - Cobro expirado

Estados posibles

  • pending - Pendiente
  • cancelled - Cancelado
  • approved - Aprobado
  • declined - Rechazado
  • in_progress - En progreso
  • refunded - Reembolsado
  • expired - Expirado

Ejemplo

{
  "payment": {
    "id": "99a337b3-3a7d-4e0b-b5ea-7098b562d4dd",
    "status": "pending",
    "currency": "COP",
    "amount": "180000",
    "external_id": "814",
    "phone": "+573155555555",
    "title": "Renta PAZCNTPDG0 mes mayo Rondoo",
    "description": "PAZCNTPDG0",
    "document_link": "https://s3.us-east-2.amazonaws.com/rondoo.co/invoices/8b4995be-1c01-47f6-8ee2-d0d60022f746",
    "allow_credit": true,
    "allow_debit": true,
    "created_at": "2023-07-13T15:42:12.000000Z",
    "paid_at": null,
    "deletable": false,
    "amount_label": "$180.000",
    "payment_link": "https://wa.me/+573126761889?text=Pagar ref: 99a337b3-3a7d-4e0b-b5ea-7098b562d4dd",
    "message_status": "delivered",
    "customer": {
      "first_name": "Daniela",
      "last_name": "Lozano",
      "email": "danielaloza@gmail.com",
      "phone": "+573155555555"
    }
  },
  "event": {
    "type": "payment.created",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Cargos (Débitos)

Eventos disponibles

  • charge.created - Cargo creado
  • charge.processing - Cargo en procesamiento
  • charge.paid - Cargo pagado
  • charge.failed - Cargo fallido
  • charge.refunded - Cargo reembolsado
  • charge.disputed - Cargo en disputa

Estados posibles

  • created - Creado
  • processing - Procesando
  • paid - Pagado
  • failed - Fallido
  • refunded - Reembolsado
  • disputed - En disputa

Ejemplo

{
  "charge": {
    "id": "9bf2bc44-28d4-4693-9896-7fc1fe1f5b65",
    "description": "Pago factura 001-2024",
    "amount": 63040,
    "amount_label": "$63.040",
    "currency": "COP",
    "status": "paid",
    "payment_method_type": "CreditCard",
    "payment_method_id": "3f8b7a21-1d4a-4d2e-8f1a-17e2f1e6b9ab",
    "source": {
      "type": "Payment",
      "id": "12e34567-89ab-4cde-f012-3456789abcde"
    },
    "created_at": "2024-10-20T12:00:00.000000Z",
    "paid_at": "2024-10-20T12:10:10.000000Z",
    "remarks": null,
    "is_test": true,
    "network_id": "prov-123",
    "external_id": "EXT-12345",
    "method": {
      "id": "3f8b7a21-1d4a-4d2e-8f1a-17e2f1e6b9ab",
      "brand": "visa",
      "label": "Personal",
      "last_four": "4242",
      "expiration_date": "12/2028",
      "customer_id": "1c2d3e4f-5678-90ab-cdef-111213141516",
      "created_at": "2024-09-15T10:20:30.000000Z",
      "country": "CO"
    },
    "customer": {
      "id": "4e5f6a7b-8c9d-0e1f-2345-6789abcdef01",
      "first_name": "Juan",
      "last_name": "Pérez",
      "email": "juan.perez@example.com",
      "phone": "+573001112233",
      "document_type": "CC",
      "document_number": "1234567890",
      "created_at": "2024-09-10T09:00:00.000000Z",
      "is_test": true
    }
  },
  "event": {
    "type": "charge.paid",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Dispersiones

Eventos disponibles

  • cashout.created - Dispersión creada
  • cashout.completed - Dispersión completada
  • cashout.processing - Dispersión en procesamiento
  • cashout.cancelled - Dispersión cancelada
  • cashout.rejected - Dispersión rechazada
  • cashout.require_approval - Dispersión requiere aprobación

Estados posibles

  • scheduled - Programada
  • to_process - Por procesar
  • processing - Procesando
  • processed - Procesada
  • failed - Fallida
  • cancelled - Cancelada
  • turbo_onboarding - En onboarding turbo

Ejemplo

{
  "cashout": {
    "id": "99a337b3-3a7d-4e0b-b5ea-7098b562d4dd",
    "customer_id": "4bbd4a30-a29a-4fec-be47-ec2dcf49ebe8",
    "account_id": "e5b15794-5b36-4c41-9c8f-d7cd4c8602cc",
    "is_test": true,
    "amount": 180000,
    "status": "to_process",
    "scheduled_at": "2024-08-17T15:42:12.000000Z",
    "created_at": "2024-08-15T12:12:32.000000Z",
    "external_id": "814"
  },
  "event": {
    "type": "cashout.created",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Suscripciones

Eventos disponibles

  • subscription.created - Suscripción creada
  • subscription.canceled - Suscripción cancelada
  • subscription.active - Suscripción activa
  • subscription.frozen - Suscripción congelada
  • subscription.deleted - Suscripción eliminada

Estados posibles

  • created - Creada
  • canceled - Cancelada
  • active - Activa
  • frozen - Congelada
  • deleted - Eliminada

Ejemplo

{
  "subscription": {
    "id": "9c799dbc-c453-4798-8a1f-0ec386dba964",
    "name": "Test subs",
    "status": "created",
    "description": "Test subs",
    "reference_price_in_cents": "200000",
    "currency": "COP",
    "amount_in_cents": 100000,
    "cicle_frequency": "daily",
    "cicles": 1000,
    "current_cicle": 0,
    "allows": {
      "credit_card": true,
      "debit_card": true,
      "account": true
    },
    "start_date": "2024-07-05T00:00:00.000000Z",
    "trial": {
      "enabled": false,
      "days": 0
    },
    "customer": {
      "id": "9c799dbc-c453-4798-8a1f-0ec386dba964",
      "first_name": "Juan",
      "last_name": "Pérez",
      "email": "juan@example.com",
      "phone": "+573001112233"
    },
    "plan": null
  },
  "event": {
    "type": "subscription.created",
    "timestamp": 1689262938,
    "environment": "live"
  }
}

Cuentas bancarias

Eventos disponibles

  • account.pending - Cuenta pendiente
  • account.connected - Cuenta conectada
  • account.disconnected - Cuenta desconectada
  • account.validated - Cuenta validada
  • account.uncompleted - Cuenta incompleta

Estados posibles

  • PENDING - Pendiente
  • CONNECTED - Conectada
  • DISCONNECTED - Desconectada
  • VALIDATED - Validada
  • UNCOMPLETED - Incompleta

Ejemplo

{
  "account": {
    "bank_id": "9b90ba74-4a99-4beb-827d-2df3236c2549",
    "subtype": "SAVINGS",
    "authorization": false,
    "id": "9b90ba74-5743-4eb3-a6a8-a1503919c98f",
    "status": "PENDING",
    "title": "Swift Group **** 7890",
    "created_at": "2024-03-14T23:30:57.000000Z",
    "method_type": "account",
    "bank": {
      "id": "9b90ba74-4a99-4beb-827d-2df3236c2549",
      "name": "Swift Group",
      "code": "1234",
      "logo": "https://example.com/logo.png"
    }
  },
  "event": {
    "type": "account.pending",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Eventos disponibles

  • connect_link.completed - Link de captura completado

Ejemplo

{
  "customer_id": "9957858a-c2f1-4f18-a5c2-216b4127e278",
  "payment_method_type": "card",
  "payment_method_id": "4bbd4a30-a29a-4fec-be47-ec2dcf49ebe8",
  "connect_link": {
    "id": "0195f36f-7cde-7113-a335-b94ce34a2755",
    "customer_id": "9957858a-c2f1-4f18-a5c2-216b4127e278",
    "single_use": false,
    "visits": 0,
    "completed": 0,
    "external_id": "31231231231",
    "allows": {
      "credit_card": true,
      "debit_card": true,
      "account": true
    },
    "created_at": "2025-04-01T22:18:44.000000Z",
    "url": "https://pagos.onepay.test/connect-link/0195f36f-7cde-7113-a335-b94ce34a2755"
  },
  "event": {
    "type": "connect_link.completed",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Facturas

Eventos disponibles

  • invoice.created - Factura creada
  • invoice.paid - Factura pagada
  • invoice.cancelled - Factura cancelada

Ejemplo

{
  "invoice": {
    "reference": "1024567",
    "id": "invoice_id",
    "name": "invoice_name",
    "provider_id": "provider_id",
    "provider": "provider",
    "status": "paid",
    "remarks": "remarks",
    "amount": 10000,
    "phone": "+5712345678",
    "email": "email@example.com",
    "document_url": "",
    "payment_id": "",
    "metadata": {
      "custom_field": "custom_value"
    },
    "created_at": "2025-04-01T22:18:44.000000Z"
  },
  "event": {
    "type": "invoice.paid",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Servicios públicos

Eventos disponibles

  • utility.paid - Servicio pagado
  • utility.rejected - Servicio rechazado

Estados posibles

  • created - Creado
  • paid - Pagado
  • rejected - Rechazado

Ejemplo

{
  "utility": {
    "id": "9d1cd37a-a6bc-472d-b4e6-c913769d005a",
    "group_id": "Kirlin Group, 2381762387",
    "provider_id": "9d1cd37a-94e5-4cf1-aa7c-daac8ebf4ed9",
    "provider_name": "Kirlin Group",
    "amount": 250000,
    "reference": "2381762387",
    "status": "rejected",
    "remarks": "La deuda actual es diferente."
  },
  "event": {
    "type": "utility.rejected",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Saldo

Eventos disponibles

  • balance.updated - Saldo actualizado

Ejemplo

{
  "balance": {
    "amount": 32489143.91,
    "amount_in_cents": 3248914391,
    "currency": "COP"
  },
  "event": {
    "type": "balance.updated",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Transacciones

Eventos disponibles

  • wallet.transaction.created - Transacción creada

Ejemplo

{
  "transaction": {
    "id": "0194b42f-5515-7245-b9f4-193c92f37b8c",
    "type": "deposit",
    "amount": 1000,
    "label": "$1.000",
    "concept": "Transferencia de fondos",
    "subtype": "PAYOUT",
    "confirmed": true,
    "node_type": "CashoutLine",
    "created_at": "2025-01-29T22:29:48.000000Z",
    "node": {
      "id": "9e16627d-1eb9-46c4-ba19-b229ea77d68e",
      "customer_id": "9957858a-c2f1-4f18-a5c2-216b4127e278",
      "account_id": "9d005522-fad4-44c2-9012-1dbb871322b5",
      "is_test": false,
      "amount": 1000,
      "status": "processed",
      "scheduled_at": null,
      "created_at": "2025-01-29T22:29:48.000000Z",
      "external_id": null,
      "method": "TURBO",
      "discount_to_destination": false
    }
  },
  "balance": {
    "id": "268efd35-772c-41ef-bcf5-0028d9db7092",
    "balance": 100000,
    "label": "$100.000"
  },
  "event": {
    "type": "wallet.transaction.created",
    "timestamp": 1689262934,
    "environment": "live"
  }
}

Seguridad de webhooks

Importante: Siempre debes verificar la firma HMAC-SHA256 de los webhooks para asegurar que provienen de OnePay.
Cada webhook incluye los siguientes headers de seguridad:
  • x-onepay-signature: Firma HMAC-SHA256 del payload
  • x-onepay-timestamp: Timestamp Unix de cuando se envió el webhook

Validación de firma

const crypto = require('crypto');

function verifyWebhookSignature(req) {
  const signature = req.headers['x-signature'];
  const secret = process.env.ONEPAY_WEBHOOK_SECRET; // wh_tok_...

  // El body debe ser el raw string, NO el objeto parseado
  const rawBody = JSON.stringify(req.body);

  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');

  return signature === expectedSignature;
}

Reintentos

OnePay reintenta el envío de webhooks hasta 6 veces con backoff exponencial si tu servidor no responde o devuelve un error:
  1. Intento inmediato
  2. 5 minutos después
  3. 15 minutos después
  4. 1 hora después
  5. 4 horas después
  6. 12 horas después
Asegúrate de que tu endpoint responda con un código 2xx (preferiblemente 200) dentro de 5 segundos para confirmar la recepción del webhook.

Idempotencia

Usa el campo event.id para implementar idempotencia y evitar procesar el mismo evento múltiples veces:
// Ejemplo de manejo idempotente
const processedEvents = new Set();

function handleWebhook(webhook) {
  const eventId = webhook.event.id;

  if (processedEvents.has(eventId)) {
    console.log('Event already processed, skipping');
    return;
  }

  // Procesar el evento...
  processedEvents.add(eventId);
}