Accept Colombian pesos (Bre-B, Nequi, Daviplata)
Take payments from buyers in Colombia on the hosted checkout or from your own screens, test each channel, and refund within 96 hours.
What you will do
Pesos land in a separate COP balance, net of your COP fee (standard 4.5% + COP 1,500 per payment; see the Pricing page). The minimum per payment is COP 20,000. On the hosted checkout you price in USD and VEXPay shows the buyer the peso amount.
- COP enabled on your account by VEXPay.
- A webhook endpoint subscribed to
payment.completed,payment.failed,payment.canceledandpayment.reversed.
Steps: hosted checkout
- Create a session
POST /v1/checkout/sessionswithamountUsdandmethodscontainingcop(or nomethods). - The buyer picks COP
The checkout shows the peso total, then Bre-B, Nequi and Daviplata.
- The buyer completes the channel
Bre-B: scan the QR or copy the key into any Colombian bank app (about 15 minutes). Nequi: approve the push in the app (about 5 minutes). Daviplata: type the 6-digit SMS code.
- Fulfil from the webhook
payment.completedwithmethod: "COP",amountCop,feeCop,amountUsdand yourcheckoutSessionreference.
Steps: your own screens (API)
- Create the payment
POST /v1/cop/paymentswith anIdempotency-Keyheader,amountCop(whole pesos, at least 20,000),channel(breb,nequiordaviplata) andbuyer(required for Nequi and Daviplata: email, phone of 10 digits starting with 3, document type and number). - Show the next step
The response
nexttells you what to show:show_qr(QR image and transfer key — returned only once),approve_in_app, orsubmit_otp. - Daviplata only: send the code
POST /v1/cop/payments/:id/otpwith{ "otp": "…" }. A wrong code can be retried while the payment is pending. - Wait for the result
React to
payment.completedorpayment.failed, or readGET /v1/cop/payments/:id. Cancel a pending payment withPOST /v1/cop/payments/:id/cancel.
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" }
}'Check that it worked
- Test Nequi: any valid data completes about a minute later. Test Daviplata: code
123456. Never send real pesos in Test. GET /v1/cop/payments/:idshowscompletedwithfeeCop.GET /v1/cop/balanceshows the net inheldCop(Live) and later inavailableCop.
Refund a peso payment
POST /v1/cop/payments/:id/refund refunds the full amount within 96 hours of completion. Your COP balance must cover the net amount that was credited; the COP fee is returned. You then receive payment.reversed with status: "refunded". See Refunds & chargebacks.
If something goes wrong
| Symptom | Likely cause | What to do |
|---|---|---|
403 method_not_allowed | COP not enabled on your account | Ask VEXPay to enable it. |
400 amount_below_minimum | Under COP 20,000 | Raise the amount or offer another currency. |
400 invalid_data about buyer | Missing buyer for Nequi/Daviplata, bad phone, or a Daviplata document other than CC, CE or TI | Fix the field named in the error. |
400 invalid_otp | Wrong Daviplata code | Ask the buyer for the code again while the payment is pending. |
503 method_unavailable | The channel or rate is not available right now | Offer another currency and retry later. |
failed with expired or rejected | The buyer did not approve in time, or declined | Start a new payment. |
| COP not shown at checkout | Total under the minimum, no fresh rate, a split session, or turned off | See Turn methods on or off. |
Fees: Pricing. Related: Colombia (COP) · Recipe: Colombian pesos · Convert to USDT