XOOMAR

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

GET
/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.

1

Snapshot

Every 15 minutes the full BTC and ETH option book summaries are pulled: every strike, every expiry, with open interest and marks.

2

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.

3

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:

FieldTypeDescription
currencystringBTC or ETH
totalOInumberTotal open interest across all strikes, in contracts
pcRationumberPut/call open interest ratio across all expiries
dvolnumber | nullDeribit implied volatility index (crypto VIX)
expiriesarrayPer-expiry summaries, nearest first
expiries[].expirystring (date)Expiry date YYYY-MM-DD
expiries[].maxPainnumber | nullStrike minimizing total option payout at expiry
expiries[].totalOInumberOpen interest for that expiry
expiries[].pcRationumberPut/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?
Max pain per expiry, put/call OI ratio, total open interest, and underlying price. For BTC and ETH.
How often does it update?
Every 15 minutes. We poll Deribit's public book summary endpoint.
What is max pain?
The strike price that would cause the most options to expire worthless. It is NOT a price prediction, but a level of interest.
Is DVOL history available?
Yes. DVOL hourly candles are stored and will be exposed via the /dvol endpoint.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.