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.
curl "${API_URL}/v1/payment-methods" \
--header "x-api-key: ${VEXPAY_API_KEY}"{
"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
- 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). - 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).
- 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
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
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"
}'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',
}),
}
);