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

Reembolsa un pago o gestiona un contracargo

Qué puedes reembolsar en cada método, cómo reversar un pago de Débito Inmediato (C2P) o reembolsar un pago en pesos, y cómo los contracargos de tarjeta afectan tu saldo y se cierran.

Qué puedes reembolsar

Método¿Se puede reembolsar?Cómo
Débito Inmediato (C2P)Sí, completoPOST /v1/payments/:id/reverse
Pesos colombianosSí, completo, dentro de 96 horas desde que se completóPOST /v1/cop/payments/:id/refund
USDT / USDCNo hay API de reembolsoEnvía al comprador un payout de stablecoin normal con POST /v1/crypto/payouts (aplica la comisión de payout)
TarjetaNo hay API de reembolsoSolo contracargos bancarios, que registra VEXPay
Pago Móvil, débito inmediato (OTP)No hay API de reembolso—

No se admiten reembolsos parciales. Suscribe tu endpoint de webhook a payment.reversed, payment.chargeback y payment.chargeback_closed.

Pasos: reversa un pago de Débito Inmediato (C2P)

  1. Revisa el pago

    GET /v1/payments/:id debe mostrar un pago C2P COMPLETED que no se haya reversado antes.

  2. Revérsalo

    POST /v1/payments/:id/reverse (hasta 5 por hora). Si el banco lo rechaza, recibes un 400 con su mensaje y nada cambia.

  3. Confirma

    El pago pasa a REVERSED y llega payment.reversed con reversalType: "reversal". El monto completo sale de tu saldo y la comisión de VEXPay se devuelve. En un pago dividido, también se deshace la parte del vendedor.

curlbash
curl --request POST "${API_URL}/v1/payments/PAYMENT_ID/reverse" \
  --header "x-api-key: ${VEXPAY_API_KEY}"

Pasos: reembolsa un pago en pesos

  1. Mantén suficientes pesos

    Tu saldo COP (disponible más retenido) debe cubrir el neto que se acreditó. Los pesos que ya convertiste o retiraste no cuentan.

  2. Reembólsalo

    POST /v1/cop/payments/:id/refund dentro de 96 horas desde que se completó.

  3. Confirma

    El pago muestra refunded y llega payment.reversed con status: "refunded". La comisión COP se devuelve.

Qué pasa con un contracargo de tarjeta

  1. El comprador disputa el cargo

    VEXPay registra el contracargo en el pago y lo debita de tu saldo en bolívares (la comisión original de la tarjeta no se devuelve). Si el banco cobra una comisión por contracargo, VEXPay te traslada exactamente ese monto como un movimiento aparte (feeVes, muchas veces 0), sin agregar nada. Recibes payment.chargeback; un contracargo total también envía payment.reversed con reversalType: "chargeback".

  2. Regístralo

    GET /v1/payments/:id lista chargebacks[], y los movimientos aparecen en GET /v1/balance/transactions?paymentId=…. Registra cada uno una sola vez con los ledgerEntryIds del webhook.

  3. VEXPay lo disputa

    Cuando se decide recibes payment.chargeback_closed con outcome. Ganado: el monto y la comisión de contracargo, si la hubo, vuelven (retenidos 24 horas) y el pago regresa a COMPLETED. Perdido: no se mueve nada más.

Comprueba que funcionó

  • En Test, paga con la tarjeta 4000000000000259: cerca de un minuto después llega un contracargo de prueba con livemode: false.
  • El reverso, reembolso o contracargo aparece en Portal → Balance movements y el pago muestra su nuevo estado en Payments.

Si algo sale mal

SíntomaCausa probableQué hacer
400 "Reversal is not supported for method: …"Solo se pueden reversar pagos C2PMira la tabla del inicio.
400 "Only COMPLETED payments can be reversed"Estado equivocado, o ya reversadoRevisa GET /v1/payments/:id.
400 con un mensaje del bancoEl banco rechazó el reversoContacta a VEXPay; el pago sigue COMPLETED.
409 onward_payout_in_progressEl pago ya se convirtió y se envió como USDTContacta a VEXPay.
429 al reversarMás de 5 reversos en una horaReintenta más tarde.
409 refund_window_expiredPasaron más de 96 horas desde que se completó el pago en pesosNo es posible reembolsar por API; contacta al soporte de VEXPay.
409 insufficient_balance en un reembolso en pesosTu saldo COP no lo cubreMantén suficientes COP y reintenta.

Relacionado: Consulta y reverso · Concilia tu saldo · Colombia (COP) · VPOS