Trading operations (
placeOrder, cancelOrder, …) run over the same socket as RPC calls rather than a subscription — see WebSocket → Placing orders.
l2Orderbook
Periodic full snapshots every ~200 ms.nLevels (integer 1–100, default 20).
l2OrderbookUpdates
Initial snapshot followed by event-driven incremental updates with the same shape asl2Orderbook.
trades
Live public trade stream. No snapshot on subscribe.contents is an array of fills from a single taker order match — all entries in one message share the same takerOrderId, timestamp, and sequenceNumber. timestamp is Unix microseconds.
markets
Global channel. Subscribe with noid.
markets map is keyed by marketId (as a string). Every emission is a full snapshot (isSnapshot: true); there are no partial diffs on this channel.
MarketInfo shape (same as REST GET /v1/markets); the fields above are an abridged sample. See the WebSocket section in the sidebar for the complete schema.
oraclePrices
Oracle and mark prices for all markets, from the on-chain Slinky aggregator. Global channel — subscribe with noid. Each update is a batch of all markets priced in that epoch.
epoch and markEpochNanos are Unix nanoseconds. markPrice of "0" means unavailable — do not fall back to price.
bbo
Best bid and offer (top of book).exchangeAttributeUpdates
Exchange-wide attribute state, discriminated by entrytype. Global channel — subscribe with no id.
feeTierConfigentries carry the full fee-tier table whenever an operator updates it. On subscribe you get a snapshot with the current table (isSnapshot: true).marketAttributesentries (streaming only) carry per-market Regular Trading Hours and off-hours trading-band events: RTH boundary crossings (isOutsideRth), VWAP settlement seals (sealedVwapSettlementPrice), and band-expansion events (boundEvent:expansionZoneEntered,expansionZoneExited,tradingBoundExpanded). Each carries atimestamp(Unix microseconds) and a per-marketmarketSequenceNum. Superseded by the dedicatedmarketAttributeschannel — prefer it for RTH / off-hours band state and events.
GET /v1/feetiers and GET /v1/markets.
marketAttributes
Per-market Regular Trading Hours (RTH) and off-hours trading-band state for every online market. Global channel — subscribe with noid; all subscribers get the same stream. Supersedes the marketAttributes entry variant on exchangeAttributeUpdates.
Every entry — snapshot and streaming alike — is the market’s complete current attribute block: marketId, marketDisplayName, offHoursInitialMarginFraction, isOutsideRth, currentSettlementPrice, both trading-band edges (upperTradingBound / lowerTradingBound) and their next-level edges (nextUpperTradingBound / nextLowerTradingBound), and per-side expansion-zone state (isUpperInExpansionZone / isLowerInExpansionZone plus the …ZoneEnteredAt / …ExpectedExpansionAt clocks). Fields that don’t currently apply are null, never omitted; field semantics match GET /v1/markets. 24/7 crypto markets are included with isOutsideRth: false and every band field null, and never produce streaming updates.
On subscribe you get one full block per online market (isSnapshot: true) — a complete bootstrap, no REST read needed. Streaming updates (isSnapshot: false) each carry one market’s full post-event block on an RTH boundary crossing, VWAP seal, or off-hours bound event — replace your local entry for that marketId wholesale. Streaming entries add a timestamp (Unix microseconds) and per-market marketSequenceNum; boundEvent / boundSide annotate what fired and are absent on RTH-flip / VWAP-seal updates.
null:
GET /v1/markets.
predictedFunding
Predicted next-hour funding rate for a single market. A new{market, rate1h} payload is delivered each time the funder recomputes the prediction.
The initial response on subscribe carries the latest cached prediction; contents is empty when no prediction has been published yet. Unlike most channels, payloads are not wrapped in an isSnapshot envelope.
account
Account state snapshot and updates (positions, balances, margin). Re-snapshots every 5 seconds.contents.type is one of PLACED, CANCELED, MARGIN_CANCELED, REJECTED, TPSL_PLACED, TPSL_CANCELED, TPSL_TRIGGERED, LIQUIDATION, ADL. netQuoteBalance is stamped on every frame; avgFillPrice is present whenever the order has any filled quantity.
positions
Open positions only.userFills
Per-user fill stream. Snapshot on subscribe, then live updates.orders
Open and recently closed orders (up to 100 closed orders in snapshot).createdAt / updatedAt are Unix microseconds.
Order statuses: OPEN, FILLED, CANCELED, MARGIN_CANCELED, REJECTED, TPSL_PLACED, TPSL_CANCELED, TPSL_TRIGGERED.
funding
Funding-payment stream for an account. The snapshot on subscribe contains up to 100 of the most recent funding payments from the last 30 days; for older history queryGET /v1/funding with an explicit from. Live updates deliver one event per (market, account) at each funding payment time.
Sign convention on payment: positive = received, negative = paid. time is the Unix-microsecond funding payment time.
accountAttributeUpdates
Per-account attribute state, discriminated by entrytype:
leverageentries carry effective leverage per market.feeTierentries carry account-level fee tier state.leverageRejectentries (streaming only) report asetLeveragerequest the engine refused — theREJECTEDhalf of the setLeverage lifecycle, carryingrejectReason(UNDERCOLLATERALIZED,INVALID_LEVERAGE, orUNKNOWN_MARKET) and the originatingrequestId; an applied change arrives as aleverageentry instead.
leverage entry per market plus, when available, one feeTier entry; streaming delivers one entry per changed attribute.
accountTransferUpdates
Account transfer events — deposits, withdrawals, internal transfers, and referral claims. The snapshot on subscribe contains the most recent events newest-first (isSnapshot: true); each streaming update carries a single event (isSnapshot: false) as it is applied by the engine.
Amounts and balances are human-readable decimal strings in quote currency; globalSequenceId gives strict ordering across all engine events. The equivalent REST read is GET /v1/accountTransferUpdates.
candles
OHLCV candlesticks. Snapshot of up to 200 candles plus real-time updates. Subscriptionid is <market>/<timeframe>.
Available timeframes: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w.