Perpetuals API
One coin's options max pain strike at each expiry, on one venue
The strike at which a coin's open options would be worth the least to their holders, at each expiry, with the call and put open interest behind it.
/api/external/perps/options-max-pain/{symbol}What it returns
The MAX PAIN strike at each of a coin's options expiries: the price at which the open contracts would expire worth the least to their holders — the level the open book points at — with the call and put open interest behind it, both in contracts and in US dollars. Nearest expiry first. Max pain is stated PER VENUE here: the source publishes no cross-venue figure and this API derives none, so venue selects which book and comparing venues means asking again per venue. Only the handful of coins with a listed options market answer; every other well-formed ticker is a 404. options-markets answers how big each venue's options book is, and options-history how it has moved. symbol is the coin ticker, matched case-insensitively — not an instrument id, not a token mint or contract address, and not scoped to any of this API's chains.
Chains
This endpoint is not tied to a chain: it takes no chain in its request.
Request
Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.
curl -H "x-dex-data-key: $DEXDATA_API_KEY" \ "https://api.dexdata.io/api/external/perps/options-max-pain/<symbol>"
| Parameter | Description |
|---|---|
venuequery · string · optional | Whose options book to read. There is no cross-venue value to ask for and no "all": the source states max pain one venue at a time, so compare venues by asking again per venue. Defaults to Deribit, the deepest book measured. A venue that lists the coin thinly still answers, sometimes with a single expiry.DeribitOKXBinanceBybit |
symbolpath · string · required | The coin (base asset) ticker, e.g. "BTC", "ETH" or "SOL" — not an instrument id such as "BTC-27JUN25-100000-C", and not a token mint or contract address. Case-insensitive. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
symbol | string | The coin ticker, any case on the way in (e.g. "BTC"); answered upper-cased. |
venue | string | The venue whose book this answer is, echoed back. |
expiries | object[] | One entry per expiry the venue lists, by expiry ascending — the nearest first. An expiry the source states no usable date for is left out rather than dated by guess. |
expiries[].expiry | string | The expiry date, YYYY-MM-DD, UTC. |
expiries[].maxPainPrice | number | null | The strike at which the contracts open at this expiry would be worth the least to their holders in total, in US dollars. Not a forecast and not a price target: it is where the open book currently sits. |
expiries[].callOpenInterest | number | null | Open call contracts at this expiry, in units of the coin. |
expiries[].putOpenInterest | number | null | Open put contracts at this expiry, in units of the coin. |
expiries[].callNotionalUsd | number | null | What those calls control: the open contracts at spot, US dollars. |
expiries[].putNotionalUsd | number | null | What those puts control: the open contracts at spot, US dollars. |
expiries[].callMarketValueUsd | number | null | What those calls are themselves worth — the premium on the open contracts, US dollars. Far smaller than callNotionalUsd, which is what they control. |
expiries[].putMarketValueUsd | number | null | What those puts are themselves worth — the premium on the open contracts, US dollars. Far smaller than putNotionalUsd, which is what they control. |
Start building with DexData today
Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.
Get a free API key