Recipe: top-ups paid in bolívares, received in USDT
Your user pays in bolívares; VEXPay converts the net to USDT and sends it to their wallet once the 24h hold ends — one request, no treasury on your side.
What you will build
A top-up flow for wallets, exchanges or games: the user pays in bolívares (Pago Móvil or C2P) and receives USDT at a wallet address. You add one field, onwardPayout, and follow one webhook.
- Collect
The pay-in carries onwardPayout with the user’s network and address.
- Convert
When the payment completes, its net VES is converted at your conversion price (market rate + your spread).
- Wait for the hold
The USDT stays held until the payment’s 24h hold ends: status waiting_release with sendAfter.
- Send
VEXPay sends the USDT minus the network payout fee to the address and fires payout.completed.
Step 01
Collect with an onward instruction
curl --request POST "${API_URL}/v1/payments/pago-movil/verify" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--data '{
"usdAmount": 20,
"reference": "40010003",
"externalRef": "topup-user-42",
"onwardPayout": { "network": "BEP20", "address": "0x2f5c0000000000000000000000000000000000aa" }
}'VEXPay validates the instruction before touching the bank: USDT and conversions must be enabled, the network’s payouts on, and the address valid for the network. A bad instruction answers 400 and nothing moves.
Step 02
Follow it to the wallet
| onwardPayout.status | What it means | Show your user |
|---|---|---|
| pending | The payment has not completed yet | Waiting for your payment |
| converting | Converting the net bolívares to USDT | Converting |
| waiting_release | Converted; held until sendAfter (24h balance hold) | Your USDT will be sent at sendAfter |
| sending | The USDT payout is on its way | Sending |
| completed | Delivered (txHash set) | Done — show the transaction |
| held / failed / canceled | Stopped (see reason); the money stays in your balance | Contact support |
Every change fires onward_payout.updated with the same object. Subscribe to it and show sendAfter to your user while the status is waiting_release, so they know when to expect the USDT.
Step 03
What it costs your user
- The bolívar pay-in fee, as for any payment.
- The conversion price: the market USDT rate plus your spread, fixed when the payment completes.
- The USDT payout fee of the network (network fee + VEXPay’s 0.25 USDT margin; for example 1.00 USDT on BEP20 or Polygon). GET /v1/crypto/networks shows the live fee.