04
API Design
POST/api/v1/orders
Place an order. Body: {pair: "BTC-USD", side: "buy", type: "limit", price, quantity, client_order_id}. Idempotency via client_order_id. Returns {order_id, status}.
DELETE/api/v1/orders/{id}
Cancel resting order. Returns final status. Idempotent (cancelling already-filled order returns current state, not error).
GET/api/v1/orderbook?pair=BTC-USD&depth=100
Snapshot of order book top-N levels per side. Served from cached view for speed. Most pros use WS for incremental updates instead.
WSwss://ws.example.com/stream
Subscribe to channels: {orderbook: BTC-USD, trades: BTC-USD, ticker: *}. Server streams delta updates. Target latency < 10 ms per update.
GET/api/v1/account/balances
Returns all asset balances: {BTC: {available, reserved}, USD: {…}, …}. Reserved = held for open orders.
POST/api/v1/deposits/address
Get a unique deposit address for a coin. Backend either picks from pre-generated address pool or derives new one from master HD wallet. Address tied to user_id.
POST/api/v1/withdrawals
Request withdrawal. Body: {coin, amount, address, 2fa_code}. Goes through risk check, withdrawal queue, signing. External tx submitted after approval. Returns pending withdrawal_id.