Implied volatility surface for BTC and ETH from Deribit options (public API, no auth)
Implied volatility surface for BTC and ETH from Deribit options (public API, no auth). Returns ATM IV (annualized %), IV rank and IV percentile from Kronos iv_history (daily cron), term structure (weekly/1m/3m ATM IV + contango/backwardation/flat shape label), 25-delta risk reversal (BS-approximated strikes), 10-delta wing IVs, max-pain strike across top-5 expiries, and a vol-regime label. Falls back to OKX if Deribit is unreachable. $0.03 USDC via x402.
30000 (raw units)
price
11
calls / 30d
7
unique payers
2026-09-10
updated
Provider
kronossignals.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x36038e1d712c5e39f35952164ec58ec2b96caee7",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "30000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"method": "GET",
"pathParams": {},
"queryParams": {},
"type": "http"
},
"output": {
"example": {
"as_of": "2026-01-01T00:00:00.000Z",
"asset": "BTC-USD",
"atm_iv": 42.8,
"available": true,
"data_source": "deribit",
"disclaimer": "Options data from Deribit public API. Informational only.",
"iv_history_days": 45,
"iv_percentile": 61.2,
"iv_rank": 58.3,
"iv_rank_note": "Based on 45 trading days of ATM IV history.",
"max_pain_strike": 60000,
"skew_25d": 3.8,
"skew_note": "25-delta risk reversal: put IV minus call IV at BS-approximated 25-delta strikes.",
"term_structure": [
{
"atm_iv": 44.2,
"days_to_expiry": 3,
"expiry": "5JUL26",
"label": "weekly"
},
{
"atm_iv": 42.5,
"days_to_expiry": 29,
"expiry": "31JUL26",
"label": "1m"
},
{
"atm_iv": 40.1,
"days_to_expiry": 85,
"expiry": "25SEP26",
"label": "3m"
}
],
"term_structure_shape": "contango",
"underlying_price": 61200,
"vol_regime": "normal",
"vol_regime_note": "ATM IV 42.8%, term structure contango.",
"wing_10d_call_iv": 38.5,
"wing_10d_put_iv": 49.2
},
"example_kind": "illustrative_schema_only",
"example_note": "Placeholder values and timestamps, not market data.",
"type": "json"
}
},
"routeTemplate": ":var1",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"method": {
"enum": [
"GET"
],
"type": "string"
},
"pathParams": {
"type": "object"
},
"queryParams": {
"properties": {},
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://kronossignals.com/api/v1/options-iv/btc" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://kronossignals.com/api/v1/options-iv/btc");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://kronossignals.com/api/v1/options-iv/btc")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/393.json, and this resource appears in /discovery/resources and /discovery/search.