GET/v1/gex/{symbol}/heatmap
Get 2D gamma exposure heatmap matrix
Returns 2D matrix of dealer gamma exposure across strikes and expiration dates. Parameter metric ('net', 'call', or 'put') is accepted for compatibility and echoed back; cells always compute call, put, and net gamma. Default ±35% strike band around spot applies when neither strikeMin nor strikeMax is specified; when one bound is given, the search is one-sided. Capped at 5,000 cells (sets truncated: true).
Endpoint Usage & Plan Rules
Plan Access
Included in Basic
Active subscription
Result Clamping
Not Clamped
Full response returned
Parameters
Required Parameters
| Name | Type | Location | Description |
|---|---|---|---|
| symbol | string | path | Underlying equity ticker symbol. |
Optional Parameters
| Name | Type | Location | Description |
|---|---|---|---|
| metric | string | query | Gamma exposure metric: 'net', 'call', or 'put' (reserved / no-op parameter accepted for compatibility; echoes back in response with no effect on computation as cells always provide call, put, and net gamma). |
| strikeMin | number | query | Lower strike price boundary in USD. strikeMin > strikeMax returns 400 invalid_range. |
| strikeMax | number | query | Upper strike price boundary in USD. |
| minDte | integer | query | Minimum DTE horizon filter (alias: dteMin, default 0). |
| maxDte | integer | query | Maximum DTE horizon filter (alias: dteMax, 0-730, default 60). |
Request Examples
curl -s -H "Authorization: Bearer $WSO_API_KEY" \
"https://api.wheelstrategyoptions.com/v1/gex/SPY/heatmap?metric=net"Try it
GET/v1/gex/{symbol}/heatmap
Included in BasicAdd your API key to send.
Response
Send a request to see the live response, its status, timing, and rate-limit headers.
Response Attributes (200 OK)
| Field | Type | Nullable | Description |
|---|---|---|---|
| symbol | string | No | Underlying equity ticker symbol. |
| stockPrice | number | No | Current stock spot price in USD. |
| metric | string | No | Gamma exposure metric: 'net', 'call', or 'put' (accepted for compatibility; echoed back with no effect on computation). |
| gammaFlip | number | Yes | Zero-gamma flip price level in USD. |
| callWallStrike | number | Yes | Major call wall strike price in USD. |
| putWallStrike | number | Yes | Major put wall strike price in USD. |
| asOf | string | Yes | ISO 8601 UTC timestamp of calculation. |
| expirations | string[] | No | List of expiration dates included along Y-axis. |
| cells | object[] | No | 2D matrix cells containing strike and expiration gamma values. |
| truncated | boolean | No | Indicates whether the 5,000-cell cap was hit; omitted when false. |
Response Example
json
{
"symbol": "SPY",
"stockPrice": 778.92,
"metric": "net",
"gammaFlip": 779.51,
"callWallStrike": 780,
"putWallStrike": 778,
"asOf": "2026-10-09T19:32:20.682Z",
"expirations": [
"2026-10-09",
"2026-10-12",
"2026-10-13"
],
"cells": [
{
"expiration": "2026-10-09",
"strike": 510,
"callGex": 0,
"putGex": 0,
"netGex": 0
},
{
"expiration": "2026-10-09",
"strike": 515,
"callGex": 0,
"putGex": 0,
"netGex": 0
},
{
"expiration": "2026-10-09",
"strike": 520,
"callGex": 0,
"putGex": 0,
"netGex": 0
}
]
}Error Responses
| Status | Description |
|---|---|
| 400 | Bad Request. The request body, query parameters, or path values violated validation constraints. |
| 401 | Unauthorized. Missing, malformed, or invalid API key credential. |
| 403 | Forbidden. Rejection reasons: `subscription_required`, `subscription_inactive`, `trial_ended`, `plan_upgrade_required` (with `required_plan`), `wrong_credential_type`, `origin_forbidden` (origin authentication failed). |
| 404 | Not Found. Requested resource, ticker symbol, or option contract does not exist. |
| 405 | Method Not Allowed. Returned with an `Allow` header when an unsupported HTTP method is used. Error code: `method_not_allowed`. (HEAD is served on all GET routes and counts against the rate limit like GET.) |
| 429 | Too Many Requests. Rejection reasons: `rate_limited` (per-minute limit), `too_many_concurrent_requests` (in-flight cap), `too_many_auth_failures`. |
| 500 | Internal Server Error. Unhandled internal server or database error. |
| 503 | Service Unavailable. Backing database, cache, or external provider connection unavailable. |