Free Crypto Options API
Max pain per expiry, put/call ratio, total open interest and the DVOL volatility index for BTC and ETH options, from Deribit, updated every 15 minutes. DVOL history starts in 2021; the free API returns the last six months.
Endpoints
/api/markets/options/{currency}Current summary: max pain per expiry, P/C ratio, total OI, DVOL.
/api/markets/options/{currency}/dvol?from=YYYY-MM-DD&to=YYYY-MM-DDHourly DVOL candles (ts, open, high, low, close), newest first; from and to select the window. History starts in 2021; the free API returns the last six months.
Examples
curl
curl https://xoomar.com/api/markets/options/BTC
Python
import requests
r = requests.get("https://xoomar.com/api/markets/options/BTC")
data = r.json()["data"]
print(f"BTC Total OI: {data['totalOI']}")
for exp in data["expiries"][:3]:
print(f" {exp['expiry']}: max pain ${exp['maxPain']}")Main features
- BTC and ETH options data from Deribit, where most crypto options open interest trades, updated every 15 minutes.
- Max pain per expiry: the strike at which the total payout to option holders at expiry would be smallest.
- Put/call open interest ratio overall and per expiry, plus the DVOL implied volatility index with hourly history.
Example
Request
curl "https://xoomar.com/api/markets/options/btc"
Response, live at 2026-10-15 17:12 UTC, trimmed
{
"data": {
"currency": "BTC",
"underlyingPrice": 82915.05,
"totalOI": 400805.2,
"pcRatio": 0.614,
"dvol": 39.04,
"expiries": [
{
"expiry": "2026-10-16",
"maxPain": 83000,
"totalOI": 17992.3,
"pcRatio": 1.299
},
{
"expiry": "2026-10-17",
"maxPain": 82000,
"totalOI": 1961.9,
"pcRatio": 2.743
}
],
"updatedAt": "2026-10-15T17:00:00.000Z"
},
"updatedAt": "2026-10-15T17:12:54.970Z",
"source": "xoomar.com",
"docs": "https://xoomar.com/markets/api",
"license": "https://xoomar.com/terms",
"attribution": "Credit XOOMAR with a link to the dataset page on xoomar.com when you republish this data",
"meta": {
"source": "Deribit",
"sourceAttribution": "Options data: Deribit.",
"notice": "10 requests a minute without a key, 30 with a free key. Get a free key at https://xoomar.com/signup?utm_source=api, register your app at https://xoomar.com/developers/register?utm_source=api, and credit the data as \"Data: XOOMAR\" together with the sourceAttribution line."
}
}expiries arrives nearest first. The dvol field is the latest hourly close; the full candles are at /api/markets/options/{currency}/dvol.
What people build with it
Expiry dashboards
Show spot next to each expiry's max pain and open interest ahead of the Friday expiries.
Volatility charts
Chart hourly DVOL next to realized volatility from your own price data.
Positioning views
Track the put/call open interest ratio per expiry to see where puts or calls are concentrated.
Research datasets
Store the 15-minute summaries on your side to build your own expiry history.
Fair use
No key needed to start. A 429 response carries a Retry-After header in seconds; cache responses on your side where you can. Need more volume? Write to info@xoomar.com.
Response shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs, license, attribution, meta }. In meta, source names who publishes the data and sourceAttribution is the credit line to show with it. The data field is an object with these fields:
| Field | Type | Description |
|---|---|---|
| currency | string | BTC or ETH |
| underlyingPrice | number | Deribit index price of the underlying as of updatedAt |
| updatedAt | string | The time the figures are as of, ISO |
| totalOI | number | Total open interest across all strikes, in contracts |
| pcRatio | number | Put/call open interest ratio across all expiries |
| dvol | number | null | Deribit implied volatility index (crypto VIX) |
| expiries | array | Per-expiry summaries for the nearest 10 expiries, nearest first |
| expiries[].expiry | string (date) | Expiry date YYYY-MM-DD |
| expiries[].maxPain | number | null | The strike at which the total payout to option holders at expiry would be smallest |
| expiries[].totalOI | number | Open interest for that expiry |
| expiries[].pcRatio | number | Put/call ratio for that expiry |
The summary refreshes every 15 minutes, from Deribit.
Numeric fields typed string in the table carry exact decimals; parse them with your language's decimal type. No key needed to start: 10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. A 429 response carries a Retry-After header in seconds. Credit XOOMAR with a link to the dataset page when you republish the data; the data terms are on the terms page.
A free account key raises the limit; send it in an X-API-Key header.
Frequently Asked Questions
What options data is available?
How often does it update?
What is max pain?
Is DVOL history available?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.