Skip to main content
Your account funds are held as USDC and organized into four buckets. Funds only ever move by an explicit action — depositing, withdrawing, or transferring between buckets. There are no hidden cross-bucket sweeps.

The four buckets

BucketPurpose
walletSettlement bucket. Deposits land here, and withdrawals are drawn only from here.
perpsCollateral available to the perpetuals and dated-futures venue.
optionsCollateral available to the options venue.
spotPer-asset spot inventory (USDC plus any traded assets).
Trading in a venue draws on that venue’s bucket. You fund a venue by transferring wallet → perps, wallet → options, or wallet → spot, and you free up funds for withdrawal by transferring back to wallet first.
All balance and settlement endpoints require an authenticated session. See Authentication.

Check your balances

curl -b cookies.txt "https://<api-host>/wallet/balance"
{
  "onchainDepositTotal": "0",
  "walletBalance": "0",
  "perpsBalance": "0",
  "optionsBalance": "0",
  "pendingWithdrawalTotal": "0"
}
walletBalance
string
USDC in the settlement bucket — the only bucket you can withdraw from.
perpsBalance / optionsBalance
string
Collateral currently allocated to each trading venue.
pendingWithdrawalTotal
string
Amount debited from wallet and awaiting on-chain settlement.
Per-asset spot inventory is separate:
curl -b cookies.txt "https://<api-host>/wallet/assets"
# -> [{ "asset": "...", "bucket": "spot", "available": "...", "locked": "...", "total": "..." }, ...]

The money lifecycle

1

Deposit on-chain

Send USDC to your OCX deposit address on the supported network. The exchange watches the chain and credits your wallet bucket only after the deposit reaches the required number of confirmations (reorg-safe). Until confirmed, a deposit shows as pending and is not spendable. Each on-chain transaction is credited exactly once.
2

Transfer into a venue

Move funds from wallet into perps, options, or spot to trade there.
3

Trade

Place orders — collateral is drawn from the relevant venue bucket.
4

Transfer back and withdraw

Return funds to wallet, then request an on-chain withdrawal.

Transfer between buckets

curl -b cookies.txt -X POST "https://<api-host>/wallet/transfer" \
  -H "Content-Type: application/json" \
  -d '{ "from": "wallet", "to": "perps", "amount": "100" }'
{ "walletBalance": "1500.00", "perpsBalance": "500.00", "optionsBalance": "0" }
from
string
required
Source bucket — one of wallet, perps, options, spot.
to
string
required
Destination bucket, distinct from from.
amount
string
required
Positive amount, no greater than the source bucket’s available balance.
Transfers are atomic and double-entry ledgered — a matching debit and credit — so bucket balances are always reconstructable from history.

Withdraw

curl -b cookies.txt -X POST "https://<api-host>/wallet/withdraw" \
  -H "Content-Type: application/json" \
  -d '{ "amount": "50" }'
{ "withdrawalId": "..." }
Withdrawals draw only from the wallet bucket. If your funds are in perps, options, or spot, transfer them back to wallet first — otherwise the request is rejected. The amount is immediately debited from wallet into pendingWithdrawalTotal, and the on-chain payout is processed asynchronously.

History and settlement tracking

curl -b cookies.txt "https://<api-host>/wallet/history"
Settlement status values you may see: pending, processing, sent, confirmed, failed, insufficient_liquidity.
For live account updates, subscribe to the portfolio balances stream instead of polling — it pushes a snapshot on connect and an update whenever your cross-bucket balances change.