How it works
- Estimate: get a live conversion quote (expires after 30 seconds)
- Buy or sell: submit the order - pay currency is debited and receive currency is credited immediately (same as retail)
- Fund the programme: use your USDC
availablebalance with Fund and withdraw (POST /wallet/fund)
trade.approved when an order completes. Failed trades return an HTTP error and do not create an order.
The buy and sell responses include the trade details only - there is no status or reason field because settlement is immediate.
Typical path: deposit ZAR, fund the programme
Get an estimate
Fetch a quote before submitting an order. Re-call if more than 30 seconds pass.POST /business/trading/estimate
amount is in cents of currency (what you are converting from). convertTo is the destination asset. Defaults: currency = ZAR, convertTo = USDC.
The response includes pay, receive, payAmount, receiveAmount, price, and expiresAt. Fees are included in receiveAmount; quote expires after 30 seconds.
Buy ZAR → USDC
You need sufficient ZARavailable balance (from an approved deposit). Defaults: currency = ZAR, receive = USDC.
POST /business/trading/buy
amount is how much you pay, in cents of currency. Defaults: currency = ZAR, receive = USDC.
Response
100000 amount cents = 1,000.00 ZAR. receiveAmount is USDC cents after fees at the quoted rate.
Sell USDC → ZAR
Move value back to fiat when needed.POST /business/trading/sell
amount is how much crypto you sell, in cents of currency. Defaults: currency = USDC, receive = ZAR.
Webhook events
Subscribe to
trade.approved or trade.*. See Webhooks.
After trading
Confirm USDC with Check balance, then fund the programme with Fund and withdraw. Cap individual cards withPOST /cards/{cardId}/limits.