Free Crypto Options API
Max pain, DVOL history, put/call ratio, and OI by strike for BTC and ETH options from Deribit. Laevitas charges $100+/month for similar data.
Endpoints
/api/markets/options/{currency}Current summary: max pain per expiry, P/C ratio, total OI, DVOL.
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 intelligence from Deribit, where the large majority of crypto options OI trades, refreshed every 15 minutes.
- ✓Max pain computed per expiry: the settlement price that minimizes total option payout, recalculated from open interest across every strike.
- ✓Put/call OI ratio overall and per expiry, plus the DVOL implied volatility index (the crypto VIX) with hourly history to 2021.
- ✓Our own accumulating strike-level history: Deribit shows you now, we keep every 15-minute snapshot.
- ✓Verified against source: our total OI matched Deribit live within 0.004% at audit time.
How It Works
Deribit gives the current order book; the history moat is ours.
Snapshot
Every 15 minutes the full BTC and ETH option book summaries are pulled: every strike, every expiry, with open interest and marks.
Computation
Max pain is computed per expiry by summing call and put payouts at each candidate strike and taking the minimum, a calculation we unit-test. P/C ratios and totals are aggregated in the same pass.
DVOL archive
A separate hourly job appends Deribit DVOL index candles for both currencies; history reaches back to 2021.
Real Example
Request
curl "https://xoomar.com/api/markets/options/btc"
Response (captured live, trimmed)
{
"data": {
"currency": "BTC",
"underlyingPrice": 65872.82,
"totalOI": 425799.5999999999,
"pcRatio": 0.615,
"dvol": 42.44,
"expiries": [
{
"expiry": "2026-06-13",
"maxPain": 63000,
"totalOI": 5927.3,
"pcRatio": 2.507
},
{
"expiry": "2026-06-14",
"maxPain": 63000,
"totalOI": 1947.4000000000005,
"pcRatio": 2.023
}
],
"updatedAt": "2026-06-12T14:00:00.000Z"
},
"updatedAt": "2026-06-12T15:08:35.188Z",
"source": "xoomar.com",
"docs": "https://xoomar.com/markets/api"
}expiries arrives nearest-first. The dvol field is the latest hourly close; full candles live at /api/markets/options/{currency}/dvol.
What People Build With This
Expiry pinning watch
Price tends to gravitate toward max pain into large expiries. Compare spot to nearest-expiry max pain on Friday mornings.
Volatility regime filters
DVOL above its historical bands means expensive options and fat tails; bots widen stops or stand aside.
Skew and positioning reads
A per-expiry P/C ratio jumping above 1 flags hedging demand concentrated at that date.
Free Greeks-adjacent data
Strike-level OI snapshots accumulate into the dataset that paid terminals charge three figures monthly for.
Pricing and Fair Use
Free. No API key, no signup, no credit card. We rate limit per IP to keep the service fast for everyone; a 429 response carries a Retry-After header telling you exactly when to retry. Cache responses on your side where you can. If you are building something that needs guaranteed volume, contact us first instead of hammering the endpoint.
Response Shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an object with these fields:
| Field | Type | Description |
|---|---|---|
| currency | string | BTC or ETH |
| 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, nearest first |
| expiries[].expiry | string (date) | Expiry date YYYY-MM-DD |
| expiries[].maxPain | number | null | Strike minimizing total option payout at expiry |
| expiries[].totalOI | number | Open interest for that expiry |
| expiries[].pcRatio | number | Put/call ratio for that expiry |
Snapshots refresh every 15 minutes from Deribit public data. Strike-level rows are stored hourly and accumulate into our own history.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication, no API key, no signup. Attribution is appreciated: xoomar.com/markets.
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.