Socket.IO — a single, persistent, bidirectional connection carrying every real-time channel documented under WebSocket API. All communication happens through this single connection.
This is a Socket.IO server, not a raw ws endpoint. Connect with a Socket.IO client (socket.io-client or equivalent) — Socket.IO adds its own handshake and framing on top of the WebSocket protocol, so a plain browser WebSocket cannot speak to it directly.
Pass an https:// origin, not a ws:// URL. Socket.IO takes an HTTP(S) origin and negotiates its own wss:// upgrade — handing it ws://… skips the handshake it needs. Plain HTTP is redirected (301) to HTTPS on the hosted environments, and a browser on an HTTPS page is blocked from opening a non-TLS ws:// socket as mixed content either way.The path is /eventPage, not /ws or /socket.io. Connecting to the right host on the wrong path returns 404 on the handshake.
string
required
/eventPage — the single Socket.IO path the server listens on. There is no per-channel URL or namespace; every channel in the channel table is reached over this one connection.
string
Default namespace (/).
string
Heartbeat is handled by Socket.IO itself, not an application-level message — see Connection Keep-Alive for the ping/pong schedule and reconnect behavior.
string
Bearer JWT — the same token used for REST requests. Pass it as auth.token on the client, or as a token query parameter.
The connection succeeds with or without a token. Auth is checked per-channel, not at connect time. An unauthenticated socket connects normally and can use every public channel — but a subscribe on a channel that requires auth (see the table on the overview page) is rejected with the error response below. There is no separate “connect” failure to catch for a missing or invalid token.
A valid token authenticates the socket for the lifetime of the connection and automatically joins a private room scoped to your user id (user_{userId}) — how User Account Updates reach you and no one else. Room membership follows the socket’s connect → disconnect lifecycle, not any particular UI component mounting or unmounting.

Send

Every channel is subscribed to and unsubscribed from the same way: an event name plus channel-specific parameters. The event name, parameters, and acknowledgement shape differ per channel — see Orderbook & Market Updates, Public Trades, and User Account Updates for the concrete values.
string
required
The channel’s subscribe event name, e.g. SUBSCRIBE_MARKET.
varies
Channel-specific parameters — e.g. a comma-separated market id string for SUBSCRIBE_MARKET. Some channels take none.
function
Optional acknowledgement callback, invoked once with the subscribed response. Not every channel provides one.
string
required
The channel’s unsubscribe event name, e.g. UNSUBSCRIBE_MARKET. Every SUBSCRIBE_* event has a matching UNSUBSCRIBE_*.
varies
Same identifiers passed to subscribe (e.g. the market ids to drop).
Subscription state is per-connection and is not restored automatically on reconnect — re-subscribe to every channel you need after a reconnect.

Receive

Sent to the ack callback (when the client provided one) confirming a subscribe succeeded.
boolean
required
true on success.
string
Human-readable confirmation, e.g. "Successfully subscribed to 2 market(s)".
Emitted back to the socket confirming an unsubscribe. Example shape from the market-orderbook channel:
string[]
required
Market ids that were unsubscribed.
string[]
required
Internal room names left as a result.
boolean
Present when the failure surfaced through an ack callback. false indicates the subscribe/action failed.
string
required
Human-readable failure reason, e.g. "Authentication required".
string
Present when the failure surfaced as a generic error event rather than an ack callback — names the inbound event that failed.