Skip to main content
Use the WebSocket instead of polling. One signed connection multiplexes the orderbook, public tape, your private feed, oracle ticks, and round lifecycle — across every asset the venue lists.

Handshake

Sign a fixed canonical string (empty body):
Send the usual DX-ACCESS-* headers on the upgrade. A bad signature is 401. There is no anonymous WebSocket access, even “public” channels ride an authenticated session.

Subscribe

Global channels (oracle, rounds) and the private user channel omit market_ids. Reply:
Each channel gets its own sid. Data frames carry { sid, seq, type, msg } with seq contiguous from 1 per subscription.
A gap in seq means you lost data. Public channels have no replay. Call update_subscription with action: "get_snapshot" to re-baseline without dropping the subscription.
The global channels are not filtered for you. oracle delivers ticks from all three price feeds and rounds delivers lifecycle events from all nine series on a single subscription. Branch on msg["feed"] and msg["category"] before you act on a frame. See Series, assets, and categories.

Complete runnable example

seq is per subscription and counts every frame the venue sent, including the ones you filter out. Do the seq bookkeeping before you discard a frame for belonging to another asset, or your gap detector will fire on every filtered tick and re-snapshot forever.

Next