Guía para desarrolladores
Sitio de VEXPayReferencia de API
Explorar documentación

Recibe un pago C2P

C2P es un flujo de tres pasos: crea una intención (SMS del banco cuando aplica), recoge el token del cliente y ejecuta el cobro.

Consulta qué métodos puedes ofrecer

GET /v1/payment-methods lista los métodos en bolívares que tu cuenta puede recibir ahora — pago_movil, c2p y vpos — cada uno con available y, cuando es false, un reason: not_enabled, receiving_account_not_configured (Pago Móvil) o provider_not_configured. Guárdalo en caché unos minutos y oculta lo que no esté disponible.

curlbash
curl "${API_URL}/v1/payment-methods" \
  --header "x-api-key: ${VEXPAY_API_KEY}"
Respuestajson
{
  "livemode": true,
  "methods": [
    { "method": "pago_movil", "available": true },
    { "method": "c2p", "available": true },
    { "method": "vpos", "available": false, "reason": "not_enabled" }
  ]
}

Ciclo de vida de tres pasos

  1. Solicita una intención

    Envía el monto, la cédula, el teléfono y el código del banco a POST /v1/payments/c2p/request. Cuando es compatible, el gateway instruye al banco pagador a enviar el OTP por SMS (otpRequested: true).

  2. Recoge el token

    Pide al cliente el OTP de 6 a 8 dígitos que recibió de su banco (o que generó en la app del banco si otpRequested es false).

  3. Ejecuta el cobro

    Envía el token con los mismos datos del pago y el intentId a POST /v1/payments/c2p. Normalmente la respuesta es COMPLETED. Con algunos bancos el débito se confirma un poco después: la respuesta llega con estado PENDING y el resultado final llega como payment.completed o payment.failed (normalmente en minutos, como máximo 24 horas). Trata PENDING como "en proceso" y entrega el pedido sólo con payment.completed.

1. Solicita una intención

curlbash
curl --request POST "${API_URL}/v1/payments/c2p/request" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --data '{
    "usdAmount": 12.50,
    "debtorId": "V12345678",
    "debtorCellPhone": "584121234567",
    "debtorBankCode": 102,
    "externalRef": "order_demo_1042"
  }'

2. Ejecuta el pago con el token

curlbash
curl --request POST "${API_URL}/v1/payments/c2p" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --data '{
    "intentId": "00000000-0000-4000-8000-000000000000",
    "usdAmount": 12.50,
    "debtorId": "V12345678",
    "debtorCellPhone": "584121234567",
    "debtorBankCode": 102,
    "token": "123456",
    "externalRef": "order_demo_1042"
  }'
JavaScriptjavascript
const payment = await fetch(
  `${process.env.API_URL}/v1/payments/c2p`,
  {
    method: 'POST',
    headers: {
      'content-type': 'application/json',
      'x-api-key': process.env.VEXPAY_API_KEY,
    },
    body: JSON.stringify({
      intentId,
      usdAmount: 12.5,
      debtorId: 'V12345678',
      debtorCellPhone: '584121234567',
      debtorBankCode: 102,
      token: customerProvidedToken,
      externalRef: 'order_demo_1042',
    }),
  }
);