---
title: "2D strike × expiry GEX matrix"
method: GET
path: "/gex/strike-expiry-heatmap"
tags: ["GEX"]
---

# 2D strike × expiry GEX matrix

`GET /gex/strike-expiry-heatmap`

## Request

- Base URL: `https://docs.backquant.com/v2`
- URL: `https://docs.backquant.com/v2/gex/strike-expiry-heatmap`
- Auth: API key in header `X-API-Key`

Rows are strikes, columns are expiries (sorted ascending DTE).

Filters apply BEFORE downsampling so the cap parameters operate on the already-narrowed grid:
* `dte_min` / `dte_max` — drop expiries outside the DTE window.
* `moneyness_min` / `moneyness_max` — drop strikes outside the   moneyness window (e.g. `0.8..1.2` keeps ATM ±20%).
* `max_strikes` — cap on strikes returned (kept closest to spot).
* `max_expiries` — cap on expiries (kept nearest by DTE).

## Query parameters

- `symbol` 'BTCUSDT' | 'ETHUSDT' | 'SOLUSDT' | 'HYPEUSDT': Trading symbol: BTCUSDT, ETHUSDT, SOLUSDT, or HYPEUSDT.
- `exchanges` string, nullable: Comma-separated venue filter
- `dte_min` integer, nullable: DTE lower bound
- `dte_max` integer, nullable: DTE upper bound
- `moneyness_min` number, nullable: Strike/spot lower bound
- `moneyness_max` number, nullable: Strike/spot upper bound
- `max_strikes` integer: Cap on number of strikes returned
- `max_expiries` integer: Cap on number of expiries returned

## Headers

- `X-API-Key` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `401`: Invalid or missing API key
- `404`: No data available for the requested resource
- `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)
