Prices
Bidirectional. The server sends connected immediately after the
upgrade. The client then sends subscribe with one or more
{ symbol, timeframe } channels and receives subscription_confirmed
followed by a candle_update whenever a subscribed candle changes
(the service polls its store every 250 ms, so updates arrive at most
four times a second per channel).
Keepalive is mandatory: the server sends ping every 30 s and closes
any socket that has not answered with pong before the next ping.
A client may also send ping and will receive pong.
{
"type": "<string>",
"connectionId": "<string>",
"message": "<string>"
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
},
"timestamp": "<string>"
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
},
"timestamp": "<string>"
}{
"type": "candle_update",
"symbol": "BTC",
"timeframe": "1m",
"candle": {
"symbol": "BTC",
"timeframe": "1m",
"openTime": "2026-09-09T14:03:00.000Z",
"closeTime": "2026-09-09T14:04:00.000Z",
"open": "113801.12",
"high": "113877.50",
"low": "113790.00",
"close": "113842.31"
}
}{
"type": "<string>",
"timestamp": "<string>"
}{
"type": "<string>",
"timestamp": "<string>"
}{
"type": "error",
"error": "VALIDATION_ERROR",
"message": "Invalid message format"
}{
"type": "subscribe",
"channels": [
{
"symbol": "BTC",
"timeframe": "1m"
}
]
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
}
}{
"type": "<string>"
}{
"type": "<string>",
"timestamp": "<string>"
}Sent once, immediately after the upgrade
Echoes the channels from the subscribe that was applied
Echoes the channels from the unsubscribe that was applied
The current state of one subscribed candle after a change
Keepalive every 30 s; answer with pong before the next one
Reply to a client ping
A rejected client frame; the socket stays open
Start receiving candle updates for one or more symbol/timeframe channels
Stop receiving candle updates for the listed channels
Optional client-initiated keepalive; the server answers with pong
Mandatory reply to the server's ping; a socket that misses one is closed
{
"type": "<string>",
"connectionId": "<string>",
"message": "<string>"
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
},
"timestamp": "<string>"
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
},
"timestamp": "<string>"
}{
"type": "candle_update",
"symbol": "BTC",
"timeframe": "1m",
"candle": {
"symbol": "BTC",
"timeframe": "1m",
"openTime": "2026-09-09T14:03:00.000Z",
"closeTime": "2026-09-09T14:04:00.000Z",
"open": "113801.12",
"high": "113877.50",
"low": "113790.00",
"close": "113842.31"
}
}{
"type": "<string>",
"timestamp": "<string>"
}{
"type": "<string>",
"timestamp": "<string>"
}{
"type": "error",
"error": "VALIDATION_ERROR",
"message": "Invalid message format"
}{
"type": "subscribe",
"channels": [
{
"symbol": "BTC",
"timeframe": "1m"
}
]
}{
"type": "<string>",
"channels": {
"symbol": "<string>",
"timeframe": "<string>"
}
}{
"type": "<string>"
}{
"type": "<string>",
"timestamp": "<string>"
}