Skip to main content

Balance Updates WebSocket

Pushes a fresh balance snapshot whenever any of your wallet balances change — typically after order placements, fills, cancellations, or deposits/withdrawals.

TypeSocket.IO v4
Base URLwss://ws.coinswitch.co/
Handshake path/pro/realtime-rates-socket/spot/balance-updates
Namespace/balanceupdates
Event nameFETCH_BALANCE_UPDATES
AuthAPI key on the subscribe payload.

Subscribe payload

ParameterTypeRequiredDescription
eventstringYesMust be "subscribe" (case-sensitive).
apikeystringYesYour CoinSwitch API key.

Subscribe

import socketio

BASE_URL = "https://ws.coinswitch.co"
HANDSHAKE_PATH = "/pro/realtime-rates-socket/spot/balance-updates"
NAMESPACE = "/balanceupdates"

sio = socketio.Client()

@sio.event(namespace=NAMESPACE)
def connect():
sio.emit(
"FETCH_BALANCE_UPDATES",
{"apikey": "<your api key>", "event": "subscribe"},
namespace=NAMESPACE,
)

@sio.on("FETCH_BALANCE_UPDATES", namespace=NAMESPACE)
def on_balance_update(data):
print("Balance update:", data)

sio.connect(
BASE_URL,
namespaces=[NAMESPACE],
socketio_path=HANDSHAKE_PATH.lstrip("/"),
)
sio.wait()

Update payload

A flat object keyed by lowercase coin code, with one entry per asset that you hold:

{
"btc": {
"free_balance": 0.0001154,
"locked_balance": 0
},
"inr": {
"free_balance": 5003.373751312903,
"locked_balance": 705
}
}
FieldTypeDescription
<coin>.free_balancenumberAvailable balance — what you can spend on a new order.
<coin>.locked_balancenumberReserved against open orders. Released back to free_balance when those orders fill or cancel.

Each push replaces your previous snapshot entirely — you don't need to merge updates.