vexorpayDocs
vexorpayDocs
APIDocumentación de vexorpayPrimeros pasosVenta de producto digitalCómo funcionan los cobros

Core API

Referencia de APICrear link de pago únicoCrear link de pago recurrenteListar y obtener linksSuscripcionesCheckout por compraVentasClientesDisputasSaldoRetirosEventos de reconciliaciónCuentas conectadas (marketplace)Webhooks salientesAutenticación

Recursos

vexorpay MCPEspecificación OpenAPIMigrar desde el SDK `vexor`PostmanComunidadModo sandbox

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:

  1. Recibir un webhook payment.completed con evt_abc.
  2. Si tienes dudas o se perdió el POST, consultar GET /api/v1/events y encontrar el mismo evt_abc.
  3. 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ámetroDescripción
typeFiltro: 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_beforePaginació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

ErrorHTTPCausa
validation_error400type no es uno de los tipos de evento válidos.

Retiros

Consulta los retiros de tu cuenta de cobro.

Cuentas conectadas (marketplace)

Opera en nombre de usuarios conectados a tu app con el header Vexor-Account y gestiona las conexiones.

On this page

Cómo funcionaRequestParámetrosEjemploRespuesta exitosaErrores