---
title: "OPEX calendar with per-expiry context"
method: GET
path: "/options/opex"
tags: ["Options"]
---

# OPEX calendar with per-expiry context

`GET /options/opex`

## Request

- Base URL: `https://docs.backquant.com/v2`
- URL: `https://docs.backquant.com/v2/options/opex`
- Auth: API key in header `X-API-Key`

Curated calendar of upcoming options expirations with everything needed for OPEX-day workflows in one call:

* Token + ISO date + DTE + classification (daily / weekly /   monthly / quarterly) + `is_anchor` flag.
* OI block: `call_oi`, `put_oi`, `total_oi`, `pcr`,   `notional_oi_usd` (= total_oi × spot, since each crypto   options contract is 1 unit of underlying).
* IV block: `atm_iv`, `skew_25d`, `put_25d_iv`, `call_25d_iv`.
* Gamma block: `net_gex`, `call_resistance`, `put_support`   (computed per expiry from the strike × expiry heatmap), and   `max_pain` (`{strike, value}` from the shared per-expiry   cache used by `/v2/gex/max-pain` and `/v2/options/expiry-  summary`).

`next_anchor` points at the closest monthly/quarterly. Filter with `?types=monthly,quarterly` for the institutional-roll view or `?horizon=` to bound the look-ahead window.

## Query parameters

- `symbol` 'BTCUSDT' | 'ETHUSDT' | 'SOLUSDT' | 'HYPEUSDT': Trading symbol: BTCUSDT, ETHUSDT, SOLUSDT, or HYPEUSDT.
- `horizon` integer: Look-ahead window in days (1–365). Drops expiries beyond this.
- `types` string, nullable: CSV filter on the `type` field: any subset of daily,weekly,monthly,quarterly. Default returns all types.

## Headers

- `X-API-Key` string, nullable

## Response `200`

Successful Response

- OpexResponse
  - `success` true
  - `data` OpexData, required
    - `symbol` string, required
    - `horizon_days` integer, required
    - `spot_price` number, nullable
    - `expirations` OpexExpiration[], required
      - `expiry` string, required
      - `expiry_date` string, nullable
      - `dte` integer, nullable
      - `type` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'unknown', required
      - `is_anchor` boolean, required
      - `oi` OpexOI, required
        - `call_oi` number, nullable
        - `put_oi` number, nullable
        - `total_oi` number, nullable
        - `pcr` number, nullable
        - `notional_oi_usd` number, nullable
      - `iv` OpexIV, required
        - `atm_iv` number, nullable
        - `skew_25d` number, nullable
        - `put_25d_iv` number, nullable
        - `call_25d_iv` number, nullable
      - `gamma` OpexGamma, required
        - `net_gex` number, nullable
        - `call_resistance` number, nullable
        - `put_support` number, nullable
        - `max_pain` GexMaxPainBlock
          - `strike` number, nullable
          - `value` number, nullable
    - `count` integer, required
    - `type_counts` ExpirySummaryTypeCounts, required
      - `daily` integer
      - `weekly` integer
      - `monthly` integer
      - `quarterly` integer
    - `next_anchor` OpexNextAnchor
      - `type` string, required
      - `expiry` string, required
      - `expiry_date` string, nullable
      - `dte` integer, nullable
    - `filtered_types` string[], nullable
  - `meta` V2Meta, required: The meta block returned alongside every v2 response. Every field after `version`/`timestamp` is optional because endpoints attach different combinations — e.g. `/v2/status` skips `symbol`, the chain endpoint sets `extra.filter_hash`, etc. Listing them here means SDKs get a typed accessor for each instead of a generic `meta: dict`.
    - `version` '2.0', required: API version tag.
    - `timestamp` string, required: ISO 8601 wall-clock when the response was built.
    - `request_id` string, nullable: X-Request-ID for tracing across logs / Sentry.
    - `symbol` string, nullable: Symbol the response is about, if applicable.
    - `spot_price` number, nullable: Current spot price for the symbol.
    - `computed_at` string, nullable: ISO 8601 of when the underlying cache value was last written.
    - `freshness_seconds` number, nullable: `now - computed_at` in seconds; useful for staleness alarms.
    - `source` string[], nullable: Upstream venue list the data flowed through.
    - `exchanges_filtered` string[], nullable: Echo of the `?exchanges=` filter when one was applied.
    - `rate_limit` object, nullable: `{limit, remaining, reset}` echo of the rate-limit headers.
    - `extra` object, nullable: Open dict for endpoint-specific metadata (filter_hash, etc.).

## Other responses

- `401`: Invalid or missing API key
- `404`: Not Found
- `422`: Validation error on query parameters
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/backquant/apis/backquant-api-v2.md) · [All operations](https://skmtc.dev/backquant/apis/backquant-api-v2/llms.txt) · [OpenAPI document](https://skmtc.dev/backquant/apis/backquant-api-v2/revisions/3c1c96b3cc24?raw)
