WebSocket API

Order Book Channel

Snapshot and incremental depth updates for a market

Channel name: book

Subscription

{ "op": "sub", "channel": "book", "params": { "market": "BTC-PERP" } }

params.market is required.

Message Types

Snapshot

Sent immediately after subscribing. Contains the order book state from the last throttled emission, not the real-time state at subscription time. Because updates are diffs computed against this same baseline, the snapshot and subsequent updates are always consistent — preventing checksum mismatches. The snapshot may lag the real-time book by up to 25ms; the first update message corrects any drift.

{
  "channel": "book",
  "filter": "BTC-PERP",
  "type": "snapshot",
  "data": {
    "bids": [
      ["50000.00", "1.5"],
      ["49999.00", "2.3"]
    ],
    "asks": [
      ["50001.00", "1.2"],
      ["50002.00", "3.1"]
    ],
    "checksum": 1226559413
  },
  "ts": "1234567890000000000",
  "gsn": 12345
}

Update

Incremental updates to individual price levels.

{
  "channel": "book",
  "filter": "BTC-PERP",
  "type": "update",
  "data": {
    "bids": [["50000.00", "2.0"]],
    "asks": [],
    "checksum": 1588788772
  },
  "ts": "1234567891000000000",
  "gsn": 12346
}

Fields

FieldTypeDescription
channelstringAlways "book"
filterstringMarket ID (e.g. "BTC-PERP")
typestring"snapshot" or "update"
data.bidsstring[][]Bid levels as [px, sz] pairs, sorted high to low
data.asksstring[][]Ask levels as [px, sz] pairs, sorted low to high
data.checksumnumberCRC32-IEEE checksum for integrity validation
tsstringTimestamp in nanoseconds
gsnnumberGlobal sequence number

Update Rules

  • Size "0" removes the level.
  • Size > 0 inserts or replaces the level.
  • Apply updates in stream order for each filter (market).
  • Updates are throttled to one per 25ms per market. Events within the same 25ms window are coalesced into a single diff.

Integrity

Validate checksum after every message. On mismatch, resubscribe to rebuild local state.

See Order Book Checksum.

On this page