Eventos de reconciliación
Consulta el histórico de eventos para reconciliar tus webhooks con la API.
GET /api/v1/events — histórico de eventos de negocio para reconciliar lo que recibiste por webhook con la API.
Cómo funciona
Cada evento tiene un id determinístico (evt_...) que es exactamente el mismo que se envía firmado en los webhooks salientes (header vexorpay-Event-Id). Por eso puedes:
- Recibir un webhook
payment.completedconevt_abc. - Si tienes dudas o se perdió el POST, consultar
GET /api/v1/eventsy encontrar el mismoevt_abc. - Deduplicar: procesar cada
evt_una sola vez.
El histórico trae los mismos tipos de evento que los webhooks, del más nuevo al más viejo, con el mismo data.object (una venta, una suscripción o una disputa).
Request
GET /api/v1/events
Parámetros
| Parámetro | Descripción |
|---|---|
type | Filtro: payment.completed, payment.refunded, subscription.created, subscription.updated, subscription.canceled, dispute.created o dispute.updated. |
created[gte] / created[lte] | Rango de fecha del evento (ISO 8601). |
limit / starting_after / ending_before | Paginación por cursor por id de evento (default 10, máximo 100). |
Ejemplo
curl "https://api.vexorpay.com/api/v1/events?type=payment.completed&limit=5" \
-H "Authorization: Bearer vxp_live_tu_clave"Respuesta exitosa
200 OK
{
"data": [
{
"id": "evt_6c2314a4fb4a408c07c2",
"type": "payment.completed",
"created": "2026-01-02T12:05:00.000Z",
"sandbox": false,
"data": {
"object": {
"id": "67f1c1e2c8a4b0d1f2e3a4b5",
"paymentLinkId": "66f1c1e2c8a4b0d1f2e3a4b5",
"subscriptionId": null,
"checkoutId": "ch_4f8a2c9d1e7b",
"reference": "ORD-1001",
"metadata": null,
"status": "paid",
"billingReason": "one_time",
"currency": "usd",
"subtotalCents": 1900,
"taxCents": 0,
"totalCents": 1900,
"feeCents": 190,
"feeBreakdown": {
"vexorpay": { "amountCents": 151, "percent": 2.7, "fixedCents": 100 },
"extras": [
{ "type": "cross_border", "amountCents": 29, "percent": 1.5 },
{ "type": "fraud_prevention", "amountCents": 7, "percent": null },
{ "type": "authentication", "amountCents": 3, "percent": null }
]
},
"netCents": 1710,
"refundedCents": 0,
"refundableCents": 1900,
"customerEmail": "cliente@mail.com",
"customerName": "Ana Pérez",
"productName": "Ebook UX en 30 días",
"sandbox": false,
"createdAt": "2026-01-02T12:05:00.000Z"
}
}
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/events?limit=5"
}data.object tiene la misma forma que el recurso de la API y que el payload del webhook: una venta en payment.*, una suscripción en subscription.* y una disputa en dispute.*. sandbox viene a nivel raíz y dentro del objeto.
Errores
| Error | HTTP | Causa |
|---|---|---|
validation_error | 400 | type no es uno de los tipos de evento válidos. |