Skip to main content
One connection carries every channel. Use it instead of polling, the private channel gives you a live copy of your orders, positions and balances without a single GET.

Authenticating the handshake

The upgrade request carries the same three DX-ACCESS-* headers as REST. The canonical string is fixed:
with an empty body. A bad signature is rejected with 401. There is no anonymous WebSocket access.
The ±5 second clock window applies here too. Because it is checked once at handshake, a long-lived connection is unaffected by later drift, but a reconnect with a stale clock will fail.

Commands

Client to server:
cmd is subscribe, unsubscribe, list_subscriptions, or update_subscription. id is yours and is echoed back. Per-market public channels need market_ids on subscribe; one subscription can span markets from different assets. The two global channels (oracle, rounds) and the private user channel have no market set — in a mixed subscribe the market_ids you send apply to the per-market channels and are ignored for these three. market_ids is only required when the request includes a per-market channel; omitting it otherwise is fine, and omitting it when one is present is wscode 9. The reply assigns a subscription id, one per channel:
To refresh an orderbook without tearing down the subscription:
Actions: get_snapshot, add_markets, delete_markets. The ack is type: "updated" with the resulting market set, then any snapshots.

Data envelope

seq is per subscription and contiguous from 1.
A gap in seq means you lost data. Public channels have no replay. Prefer update_subscription with action: "get_snapshot" to re-baseline without dropping the subscription; a full unsubscribe/resubscribe also works and starts a fresh seq from 1.Track seq per sid and treat any hole as a re-baseline, not as something to paper over. The private user channel is the exception: it has its own channel_seq and supports replay.

Command errors

Live channels

Six channels are implemented: orderbook_snapshot, orderbook_delta, trades, user, oracle, and rounds. The ticker display feed is deferred, subscribing returns wscode 4. See Channels for what each one carries.
oracle and rounds are global across every asset. One subscription receives ticks from all three price feeds and lifecycle events from all nine series, interleaved, and there is no server-side filter. Every frame names its origin — feed on oracle, category on rounds — so scope them client-side. See Series, assets, and categories.

Next