> ## 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.

# Tape overview

> Multi-venue crypto options trade tape: REST history, live WebSocket, and rollup analytics across Deribit, Bybit, OKX, Binance, Derive, Thalex, and Delta.

The **Options Tape API** is BackQuant's multi-venue, real-time and
historical record of every options trade we observe. The same
canonical payload powers cursor-paginated REST history and a live
WebSocket stream.

Use it for scoring methodologies, flow dashboards, and execution
analytics.

## What's in it

* **Every trade**, normalised: venue / coin / instrument / strike /
  expiry / direction / amount / price / index price / IV (when present) /
  premium in USD / block-trade flag / ms timestamp.
* **Eight venue IDs** ingested when live (see [Venue coverage](/concepts/venues)).
* **5-year retention** in the persistence layer (with noted exceptions
  such as Derive HYPE live-only). Backfill of history before
  `2026-05-17` is available on request via our archive partner.
* **Sub-second freshness** on the WebSocket for native WS venues. REST
  `/recent` reflects the latest trade soon after it lands in Postgres.
* **Filters** for venue, instrument, option type, strike range, premium
  minimum, and derived tags (`0dte`, `atm`, `whale`).
* **Analytics helpers**: time-bucket imbalance, strike heat, whale
  prints, and **[flow by strike](/api/v2/tape/flow-by-strike)** (cumulative
  aggressor map on open contracts).

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

  <Card title="WebSocket" href="/api/v2/tape/websocket" icon="bolt" />

  <Card title="Imbalance" href="/api/v2/tape/imbalance" icon="chart-area" />

  <Card title="Strike heat" href="/api/v2/tape/strike-heat" icon="fire" />

  <Card title="Whale prints" href="/api/v2/tape/whale" icon="fish" />

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

  <Card title="Customer delta flow" href="/api/v2/gex/delta-flow" icon="chart-line" />

  <Card title="Venue coverage" href="/concepts/venues" icon="building" />
</CardGroup>

## Venue coverage

| Venue            | Source                                     | Latency to tape        | Coverage                                              |
| ---------------- | ------------------------------------------ | ---------------------- | ----------------------------------------------------- |
| **Deribit**      | Native public WebSocket                    | \< 200 ms              | Full BTC + ETH chains                                 |
| **Bybit**        | V5 `publicTrade.{coin}.option`             | \< 200 ms              | Full BTC + ETH option chains                          |
| **OKX**          | V5 `option-trades` (`BTC-USD` / `ETH-USD`) | \< 200 ms              | Listed BTC + ETH instruments                          |
| **Binance**      | REST poll of hot contracts (\~30 s)        | \~ 30 s                | Top-volume strikes (\~95% of Binance options premium) |
| **Derive**       | WS `trades.{coin}`                         | \< 200 ms when enabled | BTC/ETH/SOL/HYPE; **flag-gated**; HYPE live-only      |
| **Thalex**       | Book channel trades                        | \< 200 ms              | BTC + ETH; always-on                                  |
| **Delta India**  | `all_trades` WS                            | \< 200 ms              | BTC + ETH minis; always-on                            |
| **Delta Global** | `all_trades` WS                            | \< 200 ms              | BTC + ETH; thinner book                               |

Filter with `?venues=deribit,bybit,okx,binance,derive,thalex,delta_india,delta`.

See [Venue coverage](/concepts/venues) for units and settlement behaviour.

## Units on the tape

| Field         | Meaning                                                        |
| ------------- | -------------------------------------------------------------- |
| `amount`      | **Coin-equivalent** size (normalized at ingest)                |
| `premium_usd` | Canonical USD premium - use this to rank and filter            |
| `price`       | Venue-quoted price (units vary by venue; prefer `premium_usd`) |

Cross-venue comparisons should use `amount` and `premium_usd`. See
[Venue coverage](/concepts/venues) for how each venue is normalized.

## Coins

* `BTC` and `ETH` are fully covered across the main venues.
* `SOL` and `HYPE` appear in schema / Derive paths; treat coverage as
  partial unless you have verified live prints.

## Tape vs derived GEX

| Surface                               | Live?              | History?                     | Positioning                                 |
| ------------------------------------- | ------------------ | ---------------------------- | ------------------------------------------- |
| **Tape** (this section)               | Yes, multi-venue   | Yes, cursor-paginated        | N/A (raw trades)                            |
| **Flow by strike**                    | Yes (\~90s cache)  | Cumulative on open contracts | Aggressor map for flow rebuilds             |
| **Live GEX / TRACE / greek profiles** | Yes, \~30s refresh | Rolling Redis window         | **flow** default; `?positioning=std` opt-in |
| **GEX history / stress-history**      | N/A                | Stored series                | **std** only                                |
| **WS `gex.levels.*`**                 | Yes (\~30s)        | No                           | **std** snapshot                            |

See [Positioning](/concepts/positioning).

## Quick start

<CodeGroup>
  ```bash curl - recent trades theme={null}
  curl https://api.backquant.com/v2/tape/recent?symbol=BTCUSDT&limit=5 \
    -H "X-API-Key: $BQ_API_KEY"
  ```

  ```bash curl - flow by strike theme={null}
  curl "https://api.backquant.com/v2/tape/flow-by-strike?symbol=BTCUSDT" \
    -H "X-API-Key: $BQ_API_KEY"
  ```

  ```python Python - WebSocket theme={null}
  import asyncio, json, os, websockets

  URL = "wss://api.backquant.com/v2/ws/options?api_key=" + os.environ["BQ_API_KEY"]

  async def main():
      async with websockets.connect(URL) as ws:
          welcome = json.loads(await ws.recv())
          print("welcome:", welcome["subscription_tier"])

          await ws.send(json.dumps({
              "action": "subscribe",
              "channels": ["tape.BTC.agg"],
          }))
          async for raw in ws:
              msg = json.loads(raw)
              if msg.get("event") == "trade":
                  t = msg["data"]
                  print(t["venue"], t["instrument"], t["direction"], "$", t["premium_usd"])

  asyncio.run(main())
  ```
</CodeGroup>

## See also

<CardGroup cols={2}>
  <Card title="Authentication" href="/authentication" icon="key" />

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

  <Card title="Rate limits" href="/concepts/rate-limits" icon="gauge" />

  <Card title="Response envelope" href="/concepts/response-format" icon="brackets-curly" />
</CardGroup>
