Skip to main content
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.
Parameters: nLevels (integer 1–100, default 20).

l2OrderbookUpdates

Initial snapshot followed by event-driven incremental updates with the same shape as l2Orderbook.

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 no id.
The 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.
Each market entry carries the full 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 no id. 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 entry type. Global channel — subscribe with no id.
  • feeTierConfig entries carry the full fee-tier table whenever an operator updates it. On subscribe you get a snapshot with the current table (isSnapshot: true).
  • marketAttributes entries (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 a timestamp (Unix microseconds) and a per-market marketSequenceNum. Superseded by the dedicated marketAttributes channel — prefer it for RTH / off-hours band state and events.
The equivalent REST reads are 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 no id; 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.
Subscribe snapshot — one entry per online market (off-hours market shown):
Streaming update at the RTH open — the market re-enters regular hours and every band field clears to null:
The equivalent REST read is 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.
Streaming 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 query GET /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 entry type:
  • leverage entries carry effective leverage per market.
  • feeTier entries carry account-level fee tier state.
  • leverageReject entries (streaming only) report a setLeverage request the engine refused — the REJECTED half of the setLeverage lifecycle, carrying rejectReason (UNDERCOLLATERALIZED, INVALID_LEVERAGE, or UNKNOWN_MARKET) and the originating requestId; an applied change arrives as a leverage entry instead.
The snapshot returns one 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. Subscription id is <market>/<timeframe>. Available timeframes: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w.