The WebSocket connections go through the following lifecycle:
- Establish a WebSocket connection with the endpoint
wss://ws.testnet.bsx.exchange
- testnetwss://ws.bsx.exchange
: mainnet
- Subscribe to a channel:
{"op": "sub", "channel": "book", "product": "BTC-PERP"}
- Receive subscription confirmation messages:
{
"channel": "book",
"product": "ETH-PERP",
"type": "subscribed"
}
- And receive data:
// Response
{
"channel": "book",
"product": "BTC-PERP",
"type": "snapshot",
"data": {
"bids": [
["36000", "50"],
["36200", "20"],
["36300", "10"]
],
"asks": [
["36500", "10"],
["36650", "20"],
["36800", "50"]
],
"timestamp": "1701798871000000000" // nanosecond timestamp
},
"timestamp": "1701798871000000000" // nanosecond timestamp
}
- To unsubscribe from a channel, send an
unsub
message
{"op": "unsub", "channel": "book", "product": "BTC-PERP"}
and receive the unsubscribe confirmation
{
"type": "unsubscribed",
"channel": "book",
"product": "BTC-PERP"
}
Connection heartbeat
The WebSocket feed uses PING/PONG messages to keep the connection alive. The server will close an idle connection after 10 minutes.
In order to sustain a connection, send ping messages at regular intervals (every 15 seconds): {'op': 'ping'}
. You will see an {'type': 'pong'}
response.
Connection end
Before web-socket server closes the connection, it should return message(s) indicate why it closes the connection. Example:
{
"type": "message",
"message": "bye - service is shutting down"
}