Connection
URL:wss://ws.limitless.exchange
Namespace: /markets
Transport: WebSocket only (no polling fallback)
No client PING required. The server runs the Socket.IO heartbeat (server-initiated
ping / client pong) automatically. Every official Socket.IO client (JavaScript, Python python-socketio, Go, Rust) responds to it out of the box. Do not send your own PING frames. Keep the connection open and rely on the built-in heartbeat and the auto-reconnect flow in WebSocket quick start.{ISO-8601 timestamp}\nGET\n/socket.io/?EIO=4&transport=websocket\n — with the base64-decoded secret and pass three headers as extraHeaders:
TOKEN_ID and SECRET. If you use an official SDK, prefer its WebSocket client, which signs the handshake automatically from hmacCredentials (TypeScript) / hmac_credentials (Python) / WithHMACCredentials (Go).
Event reference
Unsubscribing
There is no genericunsubscribe event. Only two channels have an explicit unsubscribe: unsubscribe_market_lifecycle and unsubscribe_unrealized_pnl.
subscribe_market_prices, subscribe_positions, and subscribe_order_events have none. Each of those replaces its previous subscription on the same connection when you emit it again, so to drop a market you re-emit the subscribe with the smaller set. To stop everything, disconnect. An unsubscribe event name that the server does not register never gets an acknowledgement, so a client waiting on one times out.
Related
Each subscription has its own page pairing the subscribe call with the payloads it delivers:- Market data:
subscribe_market_prices,newPriceData,orderbookUpdate - Positions:
subscribe_positions,positions - Order events:
subscribe_order_events,orderEvent - Market lifecycle:
subscribe_market_lifecycle,unsubscribe_market_lifecycle,marketCreated,marketResolved - Unrealized PnL:
subscribe_unrealized_pnl,unsubscribe_unrealized_pnl,unrealizedPnlProjectionChanged