Convert bolívares or pesos to USDT
Turn VES or COP in your balance into USDT at a quoted rate, from the portal or the API, and optionally convert a share of every peso payment automatically.
What you will do
You ask for a quote, accept it within 60 seconds, and the source amount leaves your VES or COP balance. The USDT is credited to your USDT balance when the conversion completes. The rate already includes the price — there is no separate conversion fee.
- USDT enabled on your account (and COP, to convert pesos).
- A VES or COP balance to convert.
- A webhook endpoint subscribed to
conversion.created,conversion.completedandconversion.canceled.
Steps: in the portal
- Open the right card
Bolívares: Portal → USDT, "Convert VES → USDT". Pesos: Portal → COP, "Convert COP → USDT".
- Get a quote
Choose to spend an amount or to receive an amount of USDT, enter it, and click Get quote.
- Confirm in time
Check the rate and both amounts, then click Confirm conversion before the 60-second countdown ends (or Refresh quote).
Steps: with the API
- Check your settings
GET /v1/conversions/settingsshows whether conversions are enabled, your spread per currency, your minimum in USDT, any daily cap, and auto-convert. - Request a quote
POST /v1/conversions/quoteswithsourceCurrency(VESby default, orCOP) and exactly one amount:sourceAmountortargetAmountUsdt. - Accept it
POST /v1/conversionswithquoteId(and anIdempotency-Keyheader) within 60 seconds. The quote can be used once. - Wait for completion
In Test it completes in the same request. On Live it can stay
PENDINGwhile VEXPay delivers the USDT, normally the same business day (one accepted outside business hours or on a weekend completes the next business day) — react toconversion.completed, do not block on the request. While pending you can cancel it withPOST /v1/conversions/:id/canceland get the full source amount back.
curl --request POST "${API_URL}/v1/conversions/quotes" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--data '{ "sourceCurrency": "VES", "targetAmountUsdt": 100 }'
curl --request POST "${API_URL}/v1/conversions" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--header "Idempotency-Key: conv-2026-11-01" \
--data '{ "quoteId": "QUOTE_ID", "reference": "treasury-nov" }'Convert a share of every peso payment
Set a whole percent from 0 (off) to 100 in Portal → COP → "Auto-convert COP payments", or with PATCH /v1/conversions/settings and {"autoConvert":{"COP":{"percent":50}}}. It applies to peso payments completed after the change, and sends conversion.created with origin: "auto" after the payment.completed. A share below your minimum is skipped and stays in COP.
Check that it worked
GET /v1/conversions/:idshowsCOMPLETEDwithtargetAmountUsdt.GET /v1/crypto/balanceshows the USDT. If you converted money that was still held, the USDT stays held until that original hold ends.
If something goes wrong
| Symptom | Likely cause | What to do |
|---|---|---|
403 conversions_not_enabled | Conversions, USDT or (for pesos) COP not enabled | Ask VEXPay. |
410 quote_expired | More than 60 seconds passed | Request a new quote. |
409 quote_used | The quote was already accepted | Read the existing conversion, or request a new quote. |
422 amount_below_minimum | Under your minimum in USDT | Convert more (see your settings). |
422 insufficient_balance | More than your VES or COP balance | Lower the amount; check GET /v1/balance or GET /v1/cop/balance. |
422 daily_limit_exceeded | Your daily cap is reached | Wait for the next day, or ask VEXPay. |
503 rate_unavailable | No fresh market rate | Retry in a few minutes. |
Related: Convert VES or COP to USDT · Pay in bolívars, receive USDT · Recipe: Bs in, USDT out