Skip to main content
The Upside WebSocket API delivers real-time push streams for market data and account state without polling. Once you open a connection to wss://dev.upsidemax.xyz/ws, the server pushes updates as they occur — typically every block (~500 ms) for price channels. Private account channels such as order updates and fills are available to any subscriber who provides their account address, and authenticating first is strongly recommended for forward compatibility.

Connection lifecycle

1

Open the WebSocket connection

Establish a WebSocket connection to wss://dev.upsidemax.xyz/ws. No HTTP upgrade headers beyond the standard WebSocket handshake are required.
2

(Optional) Authenticate

Send an Auth message to associate the connection with your account. This is required before subscribing to private channels and recommended for all account-level subscriptions. See Authentication for details.
3

Subscribe to channels

Send a subscribe message for each channel you want to receive. You can subscribe to multiple channels on the same connection. See Subscription for the message format.
4

Receive push messages

The server pushes messages to you as events occur. Each message includes a channel field that identifies its source so you can route it to the correct handler.
5

Send Ping every 30 seconds to keep alive

Send a standard WebSocket ping frame (or the JSON {"msg": "Ping"} message) every 30 seconds. The server replies with a Pong to keep the connection alive.

Available channels

The table below summarises every channel available on the WebSocket API. Public channels are accessible without any prior authentication step. * Private channels currently accept the account address directly in the subscription parameters without requiring a prior Auth message. Authentication is still recommended for future compatibility.

Reconnection

If the connection drops, the client automatically reconnects after 5 seconds. On reconnect, your authentication and subscription state are automatically restored — you do not need to manually re-send your Auth message or re-subscribe to your channels.
The WebSocket endpoint does not guarantee message ordering across different channels. If you need causal ordering between, for example, openOrders and orderUpdates, correlate messages using their ts timestamps and bookVersion / order ID fields.

Channel quick-reference

l2Book

Full order book snapshots pushed on every block — bids and asks with price, size, and order count.

bbo

Best bid and best ask only — lower bandwidth than l2Book for top-of-book use cases.

trades

All public trades for a contract as they execute on-chain.

candle

Live OHLCV candle updates at any supported interval, with closed-bar events.

orderUpdates

Incremental order state changes — placed, filled, cancelled, and TP/SL events.

openOrders

Initial snapshot of all active orders followed by real-time incremental updates.

userFills

Every fill involving your account — whether you were the taker or the maker.

config

Lightweight notifications when contract configuration changes — new listings, freezes, or parameter updates.