> ## Documentation Index
> Fetch the complete documentation index at: https://docs.backquant.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Venue coverage

> Which exchanges BackQuant ingests for options chains, GEX, IV, levels and the tape - plus how to filter by venue.

BackQuant ingests crypto options from multiple exchanges and folds them
into one canonical surface. Filterable venue IDs on public v2 are:

`deribit` · `bybit` · `okx` · `binance` · `derive` · `thalex` · `delta_india` · `delta`

## Venues at a glance

| Venue ID          | Tape        | Chain / OI / GEX | How we ingest                                              | Notes                                                                                                       |
| ----------------- | ----------- | ---------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **`deribit`**     | ✅ live WS   | ✅ primary depth  | Public WS + REST                                           | Deepest BTC/ETH books; primary bid/ask for IV                                                               |
| **`bybit`**       | ✅ live WS   | ✅ multi-venue OI | V5 `publicTrade.{coin}.option` + chain REST                | BTC/ETH                                                                                                     |
| **`okx`**         | ✅ live WS   | ✅ multi-venue OI | V5 `option-trades` (`BTC-USD` / `ETH-USD`)                 | Size coin-normalized at ingest                                                                              |
| **`binance`**     | ✅ REST poll | ✅ multi-venue OI | `eapi` trades on a hot list (\~30s)                        | No live options WS from our infra; top-volume strikes (\~95% of venue premium)                              |
| **`derive`**      | ✅ live WS   | ✅ when enabled   | WS `trades.{coin}` + ticker cache                          | **Flag-gated on compute** (`DERIVE_*`); BTC/ETH/SOL/HYPE. **HYPE tape is live-only** (no Timescale history) |
| **`thalex`**      | ✅ live WS   | ✅ always-on      | Book channel `book.{INSTR}.none.10.100ms` `trades[]`       | BTC/ETH; USD-settled premium                                                                                |
| **`delta_india`** | ✅ live WS   | ✅ always-on      | `api.india.delta.exchange` + `socket.india.delta.exchange` | BTC/ETH minis; see [units](#delta-exchange-units)                                                           |
| **`delta`**       | ✅ live WS   | ✅ always-on      | `api.delta.exchange` + `socket.delta.exchange`             | Global Delta book (thinner than India)                                                                      |

### Coins

| Coin              | Chain / GEX                                   | Flow tape                                     |
| ----------------- | --------------------------------------------- | --------------------------------------------- |
| **BTC**, **ETH**  | Full multi-venue                              | Full multi-venue (all eight IDs when live)    |
| **SOL**, **HYPE** | When Derive / Deribit linear HYPE are enabled | FLOW falls back to `std` if no aggressor tape |

## Where venues show up

| Endpoint family                                        | Per-venue filter?                                  | Default behaviour                              |
| ------------------------------------------------------ | -------------------------------------------------- | ---------------------------------------------- |
| [Tape REST](/api/v2/tape/overview)                     | ✅ `?venues=...`                                    | Union of all tape venues                       |
| [Tape WebSocket](/api/v2/tape/websocket)               | ✅ `tape.{coin}.{venue}` or `.agg`                  | Subscribe `tape.{coin}.agg` for the union      |
| [Flow by strike](/api/v2/tape/flow-by-strike)          | ✅ `?venues=...`                                    | Cumulative aggressor map on open contracts     |
| [GEX](/api/v2/gex/levels) / strike profiles / heatmaps | ✅ `?exchanges=...` where supported                 | Multi-venue OI roll-up; Deribit-rooted pricing |
| [IV](/api/v2/options/iv/surface)                       | Per-venue quotes where a venue quotes the contract | Blended OI-weighted across quoting venues      |
| [Open interest](/api/v2/options/oi/by-expiry)          | Multi-venue, with an explicit `by_venue` split     | **Coin-unit OI** summed across venues          |

When a metric is “multi-venue blended,” OI from every venue that lists
the coin is summed on normalized instrument names. Bid/ask depth for
IV remains Deribit-primary.

Strike-profile payloads advertise `available_exchanges` with the full
chain set (including Thalex / Derive / both Delta IDs) even on thin
books, so UI filters stay stable.

## What `?exchanges=` actually does

The filter **re-aggregates the surface from the per-venue breakdown**. It is
not a scaling of the blended number, so `?exchanges=deribit,bybit` returns
exactly what those two books contribute, and the parts add back up to the
unfiltered response.

Two quantities behave differently, and the distinction matters when you
compare a filtered result against the total:

* **Exposures** (GEX, DEX, charm, vega) are `greek x open interest`, so they
  are linear in OI. A venue's share of the open interest is exactly its share
  of the exposure, and the per-venue parts sum back to the total.
* **Implied volatility does not split.** IV is a quote, not a quantity. A
  venue-filtered IV surface or expected move reports **that venue's own mark
  IV**, never a share of the cross-venue blend. Unfiltered, the blend is
  OI-weighted across the venues quoting that contract. A venue that does not
  quote a contract is left out of that contract's IV rather than counted as
  zero.

Unknown venue names are ignored, and a filter naming only unknown venues
returns every venue instead of an empty response.

<Note>
  A venue returning **zero** is not the same as a venue being **off**. Zero
  means it lists no contracts on that surface right now; off means the feed is
  disabled. `GET /v2/status` reports `chain` and `tape` per venue as
  `on` / `off` / `unknown` so you can tell which you are looking at.
</Note>

## Per-venue open interest: `by_venue`

Open-interest surfaces carry an explicit split so you never have to infer one
from repeated filtered calls:

```json theme={null}
"by_venue": {
  "deribit": { "call_oi": 100.0, "put_oi": 70.0, "total_oi": 170.0,
               "notional_oi_usd": 10914460.0 },
  "bybit":   { "call_oi": 20.0,  "put_oi": 15.0, "total_oi": 35.0,
               "notional_oi_usd": 2247330.0 }
}
```

* Open interest is **coin-native** on every venue, so the cross-venue sum is
  meaningful without conversion. `notional_oi_usd` is `total_oi x spot` using
  the same spot the response reports.
* **All eight venues are always present**, zero-filled, so your parsing never
  has to handle a missing key.
* Delta India and Delta Global are **independent books** and are summed, never
  deduplicated.
* `by_venue_unattributed` is `null` when the split reconciles with the
  response totals, which is the normal case. A non-null value means some open
  interest could not be attributed to a venue, and is shown rather than
  quietly dropped.

Available on [OI by expiry](/api/v2/options/oi/by-expiry),
[expiry summary](/api/v2/options/expiry-summary) and
[GEX strike profile](/api/v2/gex/strike-profile). On the strike profile the
split covers the strikes actually returned, so it tracks any strike or
moneyness filter you applied. Requesting a single `expiry=` token returns
whole-expiry venue OI with a `by_venue_note` saying so, because no finer
per-(strike, expiry) split is published.

## Delta Exchange units

Delta lists **mini** options. The public API always exposes **coin**
size and USD premium already normalized. You do not need to re-apply
`contract_value` on the public fields.

| What you see on the API   | Meaning                                                  |
| ------------------------- | -------------------------------------------------------- |
| Chain OI (`oi` / totals)  | **Coin** of BTC or ETH                                   |
| Tape `amount`             | **Coin**                                                 |
| Tape `premium_usd`        | USD premium for that print                               |
| Upstream `contract_value` | BTC `0.001` / ETH `0.01` coin per contract (ingest only) |

Ingest mapping (for transparency):

```text theme={null}
amount      = size × contract_value
premium_usd = price × amount
```

where upstream `size` is contracts and upstream `price` is USD per coin.
Use the API’s `amount` and `premium_usd` as-is.

Thalex is USD-settled: `premium_usd = price × amount` with `amount`
already coin-equivalent.

## Settlement and expiry labels

| Venue class                                                         | Settle time (UTC)           |
| ------------------------------------------------------------------- | --------------------------- |
| Deribit-style CEX dailies (Deribit, Bybit, OKX, Binance, Thalex, …) | **08:00**                   |
| Delta India / Delta Global                                          | **12:00** same calendar day |

Public expiry tokens (e.g. `18AUG26`) follow the **Deribit-session**
calendar used across GEX, OPEX countdowns, and TRACE:

* Countdowns and 0DTE / front-expiry selection use the **08:00 UTC** cliff.
* After that session roll, remaining Delta inventory for that calendar
  day is **rolled into the next session expiry** in the aggregated
  chain so strike / GEX / OI surfaces stay on one expiry ladder.
* Filter and response tokens stay Deribit-style; you do not get a
  separate public “India 12:00” expiry id.

## Why Binance isn't on the live options WS

The public Binance options WebSocket host is not reachable from our
infrastructure. We poll REST trades for the most-active BTC/ETH
contracts (\~30s). The hot list refreshes about every 5 minutes by 24h
volume. Low-volume strikes may be missed.

## See also

<CardGroup cols={2}>
  <Card title="Tape overview" href="/api/v2/tape/overview" icon="table-list" />

  <Card title="Flow by strike" href="/api/v2/tape/flow-by-strike" icon="chart-column" />

  <Card title="Positioning" href="/concepts/positioning" icon="scale-balanced" />

  <Card title="Data freshness" href="/concepts/data-freshness" icon="clock" />
</CardGroup>
