---
title: Orderbook (WebSocket)
description: Real-time orderbook depth snapshots via WebSocket.
---

# Orderbook (WebSocket)

<div class="type-header">
<span class="type-tag">BLOCK_BOOK_SNAPSHOT</span>
</div>

Subscribe to live orderbook snapshots bucketed by price level. The server reconstructs the full book from exchange updates and streams aggregated depth at your chosen frequency and resolution.

## Type-specific parameters

These parameters are in addition to the common channel parameters.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `blockSize` | string | Yes | Price bucket size. Use the value from `GET /v1/block-sizes`. |
| `maxDepth` | string | No | Maximum number of price levels per side. |
| `groupByType` | string | No | Set to `"1"` to aggregate across symbols for the same coin. When enabled, keep using `symbol`, but pass the coin identifier (for example `BTC`). Default: `"0"` (no grouping). |
| `updateFrequency` | string | No | Minimum time between snapshots (e.g., `500ms`, `1s`, `5s`). |

## Subscribe

### Per-symbol orderbook

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"jsonrpc"</span>: <span class="s-s">"2.0"</span>,
  <span class="s-p">"id"</span>: <span class="s-n">0</span>,
  <span class="s-p">"method"</span>: <span class="s-s">"public/subscribe"</span>,
  <span class="s-p">"params"</span>: {
    <span class="s-p">"channels"</span>: [
      {
        <span class="s-p">"type"</span>: <span class="s-s">"BLOCK_BOOK_SNAPSHOT"</span>,
        <span class="s-p">"category"</span>: <span class="s-s">"*"</span>,
        <span class="s-p">"exchange"</span>: <span class="s-s">"BINANCE_FUTURES"</span>,
        <span class="s-p">"symbol"</span>: <span class="s-s">"BTCUSDT"</span>,
        <span class="s-p">"blockSize"</span>: <span class="s-s">"25"</span>,
        <span class="s-p">"maxDepth"</span>: <span class="s-s">"500"</span>,
        <span class="s-p">"quote"</span>: <span class="s-s">"COIN"</span>,
        <span class="s-p">"updateFrequency"</span>: <span class="s-s">"1s"</span>
      }
    ],
    <span class="s-p">"compression"</span>: <span class="s-s">"brotli"</span>,
    <span class="s-p">"version"</span>: <span class="s-s">"v2"</span>
  }
}</pre>
</CodeBlock>

### Coin-aggregated orderbook

Set `groupByType` to `"1"` to aggregate matching orderbook depth across symbols for the same coin into a single stream. For this mode, keep the `symbol` field and pass the coin identifier, for example `BTC`.

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"jsonrpc"</span>: <span class="s-s">"2.0"</span>,
  <span class="s-p">"id"</span>: <span class="s-n">1</span>,
  <span class="s-p">"method"</span>: <span class="s-s">"public/subscribe"</span>,
  <span class="s-p">"params"</span>: {
    <span class="s-p">"channels"</span>: [
      {
        <span class="s-p">"type"</span>: <span class="s-s">"BLOCK_BOOK_SNAPSHOT"</span>,
        <span class="s-p">"category"</span>: <span class="s-s">"*"</span>,
        <span class="s-p">"exchange"</span>: <span class="s-s">"BINANCE_FUTURES"</span>,
        <span class="s-p">"symbol"</span>: <span class="s-s">"BTC"</span>,
        <span class="s-p">"blockSize"</span>: <span class="s-s">"25"</span>,
        <span class="s-p">"maxDepth"</span>: <span class="s-s">"500"</span>,
        <span class="s-p">"quote"</span>: <span class="s-s">"COIN"</span>,
        <span class="s-p">"groupByType"</span>: <span class="s-s">"1"</span>,
        <span class="s-p">"updateFrequency"</span>: <span class="s-s">"1s"</span>
      }
    ],
    <span class="s-p">"compression"</span>: <span class="s-s">"brotli"</span>,
    <span class="s-p">"version"</span>: <span class="s-s">"v2"</span>
  }
}</pre>
</CodeBlock>

## Response

Each message contains one or more orderbook snapshots:

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"points"</span>: [
    {
      <span class="s-p">"series"</span>: {
        <span class="s-p">"type"</span>: <span class="s-s">"BLOCK_BOOK_SNAPSHOT"</span>,
        <span class="s-p">"symbol"</span>: <span class="s-s">"BTCUSDT"</span>,
        <span class="s-p">"exchange"</span>: <span class="s-s">"BINANCE_FUTURES"</span>,
        <span class="s-p">"normalizedSymbol"</span>: <span class="s-s">"BTC-USDT"</span>,
        <span class="s-p">"coin"</span>: <span class="s-s">"BTC"</span>,
        <span class="s-p">"blockSize"</span>: <span class="s-n">25</span>,
        <span class="s-p">"inverse"</span>: <span class="s-n">false</span>
      },
      <span class="s-p">"blockBookSnapshot"</span>: {
        <span class="s-p">"bids"</span>: [<span class="s-n">90000</span>, <span class="s-n">3.55</span>, <span class="s-n">89975</span>, <span class="s-n">12.81</span>, <span class="s-n">89950</span>, <span class="s-n">8.42</span>],
        <span class="s-p">"asks"</span>: [<span class="s-n">90025</span>, <span class="s-n">5.67</span>, <span class="s-n">90050</span>, <span class="s-n">14.23</span>, <span class="s-n">90075</span>, <span class="s-n">9.11</span>],
        <span class="s-p">"timestamp"</span>: {
          <span class="s-p">"seconds"</span>: <span class="s-n">1769058600</span>
        }
      }
    }
  ]
}</pre>
</CodeBlock>

For grouped subscriptions, the response is keyed by `series.coin`. In the live grouped BTC stream, `series.symbol` and `series.groupByType` were not present.

### Response fields

| Field | Type | Description |
| --- | --- | --- |
| `series.coin` | string | Coin identifier for the stream. Grouped subscriptions are keyed by this field. |
| `series.blockSize` | double | Price bucket size used for this snapshot |
| `blockBookSnapshot.bids` | double[] | Bid levels as alternating `[price, volume, price, volume, ...]`, closest to mid price first |
| `blockBookSnapshot.asks` | double[] | Ask levels as alternating `[price, volume, price, volume, ...]`, closest to mid price first |
| `blockBookSnapshot.timestamp` | Timestamp | Snapshot time |