Buy, sell, and swap

Wallet proforma then execute for buy, sell, and pocket-to-pocket moves.

Wallet conversion uses a proforma (quote) and a separate execute call. No funds move until you confirm the proforma.

Every proforma goes to:

POST /v1/wallet/transaction/proforma

Send X-SUBACCOUNT-ID for end-user wallets. The response carries the proforma id you execute afterwards. More bodies are in the REST reference.

Buy

Set operation and a pair. This example buys 100 EUR worth of BTC:

{
  "operation": "buy",
  "pair": "BTC/EUR",
  "amount": "100",
  "currency": "EUR"
}

Or name the pockets explicitly (fiat pocket → crypto pocket):

{
  "pocket": "<EUR pocket UUID>",
  "destination": { "pocket": "<BTC pocket UUID>" },
  "amount": "100",
  "currency": "EUR"
}

Sell

This example sells 0.001 BTC:

{
  "operation": "sell",
  "pair": "BTC/EUR",
  "amount": "0.001",
  "currency": "BTC"
}

With pockets, swap the source and destination and set amount / currency to the crypto you are selling:

{
  "pocket": "<BTC pocket UUID>",
  "destination": { "pocket": "<EUR pocket UUID>" },
  "amount": "0.001",
  "currency": "BTC"
}

Swap (crypto → crypto)

Move value between two crypto pockets. type: "SEA" (Send Exact Amount) fixes the amount that leaves the source pocket; REA (Receive Exact Amount) fixes the amount that arrives.

{
  "pocket": "<BTC pocket UUID>",
  "amount": "0.001",
  "currency": "BTC",
  "destination": { "pocket": "<ETH pocket UUID>" },
  "type": "SEA",
  "userCurrency": "EUR"
}

Execute

POST /v1/wallet/transaction
{
  "proforma": "<proforma id>"
}

Execute before expirationTime on the proforma. Some operations require x-totp and x-totp-type. For subaccounts, x-totp-type is always gauth.

Listen for settlement

Prefer WebSocket wallet-transaction-v1 over tight polling. See Notifications.

Spot Trading API uses a different order model (POST /v1/trading/order) with its own balances. Wallet pair and Pro symbol share the BTC/EUR format; MCP tools use BTC-EUR. Do not mix formats on the same call.

On this page