---
title: Subscribing
description: Subscribe to channels, manage subscriptions, and configure Brotli compression.
---

# Subscribing

Subscribe to one or more channels using the `public/subscribe` method. All WebSocket subscriptions share this format.
Before subscribing, connect to the endpoint family that matches your channels:
- Use a `book` connection (`/ws`) for `BLOCK_BOOK_SNAPSHOT`
- Use a `nonbook` connection (`/nonbook/ws`) for every other channel
If you need both channel families, maintain one connection to each.

## Subscribe

<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">"TRADE_AGG"</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">"category"</span>: <span class="s-s">"*"</span>,
        <span class="s-p">"batchInterval"</span>: <span class="s-s">"200ms"</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>

### Request parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `jsonrpc` | string | Yes | JSON-RPC version. Always `"2.0"`. |
| `id` | int | Yes | Request ID. Must be unique across the lifetime of the connection. Echoed back in responses for correlation. |
| `method` | string | Yes | `public/subscribe`, `public/unsubscribe`, or `public/unsubscribe_all`. |
| `params.channels` | Channel[] | Yes | Channels to subscribe to. |
| `params.compression` | string | No | Message compression. Use `brotli` for compressed JSON payloads. |
| `params.version` | string | No | Protocol version. Use `v2` for metadata support. |

### Channel parameters

Every channel object requires these fields. Individual channel types accept additional type-specific parameters -- see their respective pages.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | Yes | Data type (e.g., `TRADE`, `TRADE_AGG`, `BLOCK_BOOK_SNAPSHOT`). |
| `exchange` | string | Yes | Exchange to subscribe to. Use `*` for all exchanges. |
| `symbol` | string | Yes | Symbol selector. For per-symbol subscriptions, use the exchange-native `rawSymbol` such as `BTCUSDT`. For coin-aggregated subscriptions on supported channels, pass the coin identifier such as `BTC`. |
| `category` | string | No | Market class filter. Use `SPOT` for spot markets or `PERPETUAL` for perpetual derivatives. Default: `*` (all categories). |
| `quote` | string | No | Quote denomination: `USD`, `COIN`, or `DEFAULT`. |

## Unsubscribe

Unsubscribe from specific channels:

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"jsonrpc"</span>: <span class="s-s">"2.0"</span>,
  <span class="s-p">"method"</span>: <span class="s-s">"public/unsubscribe"</span>,
  <span class="s-p">"params"</span>: {
    <span class="s-p">"channels"</span>: [
      {
        <span class="s-p">"type"</span>: <span class="s-s">"TRADE_AGG"</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>
      }
    ]
  }
}</pre>
</CodeBlock>

Or unsubscribe from everything:

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"jsonrpc"</span>: <span class="s-s">"2.0"</span>,
  <span class="s-p">"method"</span>: <span class="s-s">"public/unsubscribe_all"</span>,
  <span class="s-p">"params"</span>: {}
}</pre>
</CodeBlock>

## Compression

When you set `compression` to `"brotli"` in your subscription, the server compresses all data messages. Your client must decompress incoming messages before parsing them.

<Callout kind="warn">

Compression applies to data messages only -- heartbeat pong responses are not compressed.

</Callout>