WebSocket

Private WebSocket

Upgrade to an authenticated WebSocket connection for private account streams.

Send X-API-KEY, X-TIMESTAMP, and X-SIGNATURE headers on the HTTP upgrade request. Sign the upgrade request with an empty body string.

Subscribe

{"action":"subscribe","channel":"orders"}
{"action":"subscribe","channel":"fills"}
{"action":"subscribe","channel":"balances"}

Unsubscribe

{"action":"unsubscribe","channel":"orders"}
{"action":"unsubscribe","channel":"fills"}
{"action":"unsubscribe","channel":"balances"}

Private channels are account-wide and do not use a market parameter.

Server frames

orders

{"channel":"subscribed","subscription":"orders"}
{"channel":"orders","data":{}}
{"channel":"error","message":"..."}

fills - private trade fills for the authenticated account:

{"channel":"subscribed","subscription":"fills"}
{
  "channel": "fills",
  "data": {
    "trade_id": "33b18c87-1088-4dc7-8bf2-42910a96be76",
    "order_id": "46402c10-64f3-5dcc-8702-9d21ed6aa7bc",
    "client_order_id": "7ec370f1-c77d-4276-b492-0d8a4ecb8ffd",
    "market": "BTCZAR",
    "side": "buy",
    "price": "1050000.00000000",
    "fill_delta": "0.02500000",
    "filled": "0.07500000",
    "remaining": "0.12500000",
    "quantity": "0.02500000",
    "total_value": "26250.00000000",
    "fee": "157.50000000",
    "timestamp": 1784289007
  }
}

The fills channel emits new private trade fills while you are subscribed. Use fill_delta for the amount filled by this execution, and filled / remaining for the updated order totals.

FieldDescription
trade_idUnique trade public UUID for this fill.
order_idUUID of the authenticated user's affected order.
client_order_idClient-supplied order ID, present only when the original order included one.
marketTrading pair symbol.
sideUser-side of the fill, buy or sell.
priceExecution price for this fill.
fill_deltaAmount filled by this execution.
quantitySame amount as fill_delta, included for consistency with trade history.
filledTotal order quantity filled after this execution.
remainingTotal order quantity remaining after this execution.
total_valueQuote value of this fill.
feeFee charged for this fill.
timestampUnix seconds when the fill executed.

balances - full snapshot pushed every second:

{"channel":"subscribed","subscription":"balances"}
{
  "channel": "balances",
  "data": [
    {"currency":"ZAR","available":"125000.00000000","reserved":"5000.00000000","total":"130000.00000000"},
    {"currency":"BTC","available":"0.45000000","reserved":"0.05000000","total":"0.50000000"},
    {"currency":"ETH","available":"3.20000000","reserved":"0.00000000","total":"3.20000000"}
  ]
}

available is free to use; reserved is locked in open orders; total is the sum of both. The balances channel mirrors GET /balances exactly.

Poll intervals

ChannelIntervalNotes
orders1 secondPushed when order status or filled quantity changes.
fills1 secondPushed once for each new private trade fill.
balances1 secondFull balance snapshot on every tick.
get/ws/private

Changes

No recorded changes to this endpoint across all 1 revision of this API.