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

Acepta pesos colombianos (Bre-B, Nequi, Daviplata)

Recibe pagos de compradores en Colombia en el checkout alojado o desde tus propias pantallas, prueba cada canal y reembolsa dentro de 96 horas.

Qué vas a hacer

Los pesos llegan a un saldo COP aparte, netos de tu comisión COP (estándar 4,5% + COP 1.500 por pago; ver la página de Precios). El mínimo por pago es COP 20.000. En el checkout alojado pones el precio en USD y VEXPay le muestra al comprador el monto en pesos.

  • COP habilitado en tu cuenta por VEXPay.
  • Un endpoint de webhook suscrito a payment.completed, payment.failed, payment.canceled y payment.reversed.

Pasos: checkout alojado

  1. Crea una sesión

    POST /v1/checkout/sessions con amountUsd y methods que incluya cop (o sin methods).

  2. El comprador elige COP

    El checkout muestra el total en pesos y luego Bre-B, Nequi y Daviplata.

  3. El comprador completa el canal

    Bre-B: escanea el QR o copia la llave en cualquier app bancaria colombiana (unos 15 minutos). Nequi: aprueba la notificación en la app (unos 5 minutos). Daviplata: escribe el código de 6 dígitos que llega por SMS.

  4. Entrega desde el webhook

    payment.completed con method: "COP", amountCop, feeCop, amountUsd y la referencia de tu checkoutSession.

Pasos: tus propias pantallas (API)

  1. Crea el pago

    POST /v1/cop/payments con un encabezado Idempotency-Key, amountCop (pesos enteros, mínimo 20.000), channel (breb, nequi o daviplata) y buyer (obligatorio para Nequi y Daviplata: email, teléfono de 10 dígitos que empieza por 3, tipo y número de documento).

  2. Muestra el siguiente paso

    El campo next de la respuesta te dice qué mostrar: show_qr (imagen QR y llave — se devuelven una sola vez), approve_in_app o submit_otp.

  3. Solo Daviplata: envía el código

    POST /v1/cop/payments/:id/otp con { "otp": "…" }. Un código errado se puede reintentar mientras el pago esté pendiente.

  4. Espera el resultado

    Reacciona a payment.completed o payment.failed, o lee GET /v1/cop/payments/:id. Cancela un pago pendiente con POST /v1/cop/payments/:id/cancel.

curlbash
curl --request POST "${API_URL}/v1/cop/payments" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --header "Idempotency-Key: order-5120" \
  --data '{
    "amountCop": 50000,
    "channel": "nequi",
    "reference": "order-5120",
    "buyer": { "email": "juan@example.com", "phone": "3001234567", "documentType": "CC", "documentNumber": "1234567890" }
  }'

Comprueba que funcionó

  • Nequi en Test: cualquier dato válido se completa cerca de un minuto después. Daviplata en Test: código 123456. Nunca envíes pesos reales en Test.
  • GET /v1/cop/payments/:id muestra completed con feeCop.
  • GET /v1/cop/balance muestra el neto en heldCop (Live) y luego en availableCop.

Reembolsa un pago en pesos

POST /v1/cop/payments/:id/refund reembolsa el monto completo dentro de 96 horas desde que se completó. Tu saldo COP debe cubrir el neto que se acreditó; la comisión COP se devuelve. Luego recibes payment.reversed con status: "refunded". Mira Reembolsos y contracargos.

Si algo sale mal

SíntomaCausa probableQué hacer
403 method_not_allowedCOP no habilitado en tu cuentaPide a VEXPay que lo habilite.
400 amount_below_minimumMenos de COP 20.000Sube el monto u ofrece otra moneda.
400 invalid_data sobre buyerFalta el comprador para Nequi/Daviplata, teléfono inválido, o un documento Daviplata distinto de CC, CE o TICorrige el campo que indica el error.
400 invalid_otpCódigo Daviplata erradoPide de nuevo el código al comprador mientras el pago esté pendiente.
503 method_unavailableEl canal o la tasa no están disponibles ahoraOfrece otra moneda y reintenta más tarde.
failed con expired o rejectedEl comprador no aprobó a tiempo, o lo rechazóInicia un pago nuevo.
COP no aparece en el checkoutTotal bajo el mínimo, sin tasa reciente, una sesión dividida, o está apagadoMira Activar o desactivar métodos.

Comisiones: Precios. Relacionado: Colombia (COP) · Receta: pesos colombianos · Convertir a USDT