GET
/api/v1/options/{underlying}/max-painHobbyist tier+ · 30 req/minMax-pain strike per expiry for the N next upcoming expiries.
Max pain is the strike that would minimise total in-the-money OI at settlement. Retail folklore, not a forecast — useful as a sentiment anchor.
Path parameters
Segments of the URL path, validated server-side.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| underlying | enum | required | — | BTC or ETH. BTCETH |
Query parameters
All query parameters are optional unless marked required.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| expiries | number | optional | 3 | How many upcoming expiries to include (1-20). |
Response shape
Always wrapped in the standard envelope. Nullable fields are explicitly marked — treat missing numeric data as a real data-source gap, not as an error.
data payloadtypescript
// Wrapped in the standard envelope:
// {
// data: /* shape below */,
// meta?: { total?: number; limit?: number; offset?: number; ... }
// }
{ underlying, asOf, current: { expiry, strike, painUsd }, upcoming: Array<{ expiry, expiryMs, strike, painUsd }>, underlyingPrice }Example
Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.
Requestbash
curl -sS "http://localhost:3000/api/v1/options/BTC/max-pain?expiries=5"Responsejson
{ "data": { "underlying": "BTC", "asOf": 1744834800000, "current": { "expiry": "25APR25", "strike": 62000, "painUsd": 1200000 }, "upcoming": [], "underlyingPrice": 63150 }, "meta": { "total": 0 } }Next
Check the error code reference, or get an API key to try the request against your own account.