Developer guide
VEXPay siteAPI reference
Browse documentation

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.completed and conversion.canceled.

Steps: in the portal

  1. Open the right card

    Bolívares: Portal → USDT, "Convert VES → USDT". Pesos: Portal → COP, "Convert COP → USDT".

  2. Get a quote

    Choose to spend an amount or to receive an amount of USDT, enter it, and click Get quote.

  3. 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

  1. Check your settings

    GET /v1/conversions/settings shows whether conversions are enabled, your spread per currency, your minimum in USDT, any daily cap, and auto-convert.

  2. Request a quote

    POST /v1/conversions/quotes with sourceCurrency (VES by default, or COP) and exactly one amount: sourceAmount or targetAmountUsdt.

  3. Accept it

    POST /v1/conversions with quoteId (and an Idempotency-Key header) within 60 seconds. The quote can be used once.

  4. Wait for completion

    In Test it completes in the same request. On Live it can stay PENDING while VEXPay delivers the USDT, normally the same business day (one accepted outside business hours or on a weekend completes the next business day) — react to conversion.completed, do not block on the request. While pending you can cancel it with POST /v1/conversions/:id/cancel and get the full source amount back.

curlbash
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/:id shows COMPLETED with targetAmountUsdt.
  • GET /v1/crypto/balance shows the USDT. If you converted money that was still held, the USDT stays held until that original hold ends.

If something goes wrong

SymptomLikely causeWhat to do
403 conversions_not_enabledConversions, USDT or (for pesos) COP not enabledAsk VEXPay.
410 quote_expiredMore than 60 seconds passedRequest a new quote.
409 quote_usedThe quote was already acceptedRead the existing conversion, or request a new quote.
422 amount_below_minimumUnder your minimum in USDTConvert more (see your settings).
422 insufficient_balanceMore than your VES or COP balanceLower the amount; check GET /v1/balance or GET /v1/cop/balance.
422 daily_limit_exceededYour daily cap is reachedWait for the next day, or ask VEXPay.
503 rate_unavailableNo fresh market rateRetry in a few minutes.

Related: Convert VES or COP to USDT · Pay in bolívars, receive USDT · Recipe: Bs in, USDT out