/api/sd/options/overview
GETDegradedSTALE

Options overview (all venues)

Option open interest, 24h volume, put/call ratios, max pain, ATM implied volatility, 25-delta skew and IV term structure for one coin, aggregated over six venues with a per-venue breakdown.

GET/api/sd/options/overview
Degraded. The endpoint reports data quality STALE

Request

Query parameters

NameTypeRequiredDefaultAllowed valuesDescription
coinstringRequired——Coin symbol, case-insensitive (for example `BTC`). Missing or malformed values return 400. Example: BTC

Example request

curl -s "https://www.coinboss.com/api/sd/options/overview?coin=BTC"

Response fields

The field table is generated from real responses, so it lists exactly what the endpoint returns. Paths use a[] for array items and {*} for objects keyed by a dynamic name such as a coin or an exchange.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
schemastring—Schema id of this response. It changes only when an existing field changes meaning or type.
nownumbermsServer time when the response was built.
coinstring—Coin symbol (upper case).
index_pricenumber|nullUSDSpot index price used for USD conversion (median of the venues' own index prices in aggregates).
n_contractsnumber|null—Number of option contracts included.
oi_usdnumber|nullUSDOpen interest as USD notional: coin quantity × spot index price. One-sided.
call_oi_usdnumber|nullUSDCall open interest, USD notional.
put_oi_usdnumber|nullUSDPut open interest, USD notional.
oi_coinnumber|nullcoinOpen interest in units of the underlying coin.
call_oi_coinnumber|nullcoinCall open interest in units of the underlying coin.
put_oi_coinnumber|nullcoinPut open interest in units of the underlying coin.
vol_usd_24hnumber|nullUSD24h notional volume: traded coin quantity × current spot index price. Not premium turnover.
call_vol_usd_24hnumber|nullUSD24h notional volume of calls.
put_vol_usd_24hnumber|nullUSD24h notional volume of puts.
vol_coin_24hnumber|nullcoin24h traded quantity in units of the underlying coin.
call_vol_coin_24hnumber|nullcoin24h traded quantity of calls, in coin.
put_vol_coin_24hnumber|nullcoin24h traded quantity of puts, in coin.
vol_premium_usd_24hnumber|nullUSD24h premium turnover (option price × quantity) where the venue publishes it; `null` elsewhere. Never added to notional volume.
pcr_oinumber|nullratioPut open interest ÷ call open interest, in coin units; `null` when the call side is 0.
pcr_volnumber|nullratioPut 24h volume ÷ call 24h volume, in coin units; `null` when the call side is 0.
n_expiriesnumber|null—Number of expiry dates included.
vol_exchangesarray—Venues contributing to the notional volume.
vol_exchanges[]string—Venues contributing to the notional volume.
vol_premium_exchangesarray—Venues that publish premium turnover.
vol_premium_exchanges[]string—Venues that publish premium turnover.
max_pain_nearestobject|null—Max pain of the nearest expiry that has open interest.
max_pain_nearest.expirystring—Expiry date (UTC), `YYYY-MM-DD`, or `all`.
max_pain_nearest.days_leftnumberdaysDays until expiry.
max_pain_nearest.strikenumberUSDStrike price.
max_pain_nearest.pain_usdnumberUSDTotal payout to option holders if the expiry settled at this strike.
max_pain_nearest.oi_usdnumberUSDOpen interest as USD notional: coin quantity × spot index price. One-sided.
max_pain_nearest.exchangesarray—Venues included in this row.
max_pain_nearest.exchanges[]string—Venues included in this row.
max_pain_mainobject|null—Max pain of the main expiry: the nearest expiry holding at least 5 % of total open interest.
max_pain_main.expirystring—Expiry date (UTC), `YYYY-MM-DD`, or `all`.
max_pain_main.days_leftnumberdaysDays until expiry.
max_pain_main.strikenumberUSDStrike price.
max_pain_main.pain_usdnumberUSDTotal payout to option holders if the expiry settled at this strike.
max_pain_main.oi_usdnumberUSDOpen interest as USD notional: coin quantity × spot index price. One-sided.
max_pain_main.exchangesarray—Venues included in this row.
max_pain_main.exchanges[]string—Venues included in this row.
atm_iv_nearestnumber|null%ATM IV of the nearest expiry.
atm_iv_mainnumber|null%ATM IV of the main expiry.
atm_iv_30dnumber|null%ATM IV interpolated linearly to a constant 30-day maturity; `null` when 30 days is not bracketed by two expiries.
skew_25d_mainnumber|nullpercentage points25-delta skew of the main expiry.
term_structurearray—ATM IV per expiry, nearest first.
term_structure[]object—ATM IV per expiry, nearest first.
term_structure[].expirystring—Expiry date (UTC), `YYYY-MM-DD`, or `all`.
term_structure[].days_leftnumberdaysDays until expiry.
term_structure[].atm_ivnumber%At-the-money implied volatility: mean mark IV at the strike closest to the forward price.
term_structure[].oi_usdnumberUSDOpen interest as USD notional: coin quantity × spot index price. One-sided.
exchangesarray—Venues included in this row.
exchanges[]object—Venues included in this row.
exchanges[].exchangestring—Exchange id (lower case).
exchanges[].oi_share_pctnumber%Share of the total open interest (USD notional) of the selection.
exchanges[].n_contractsnumber—Number of option contracts included.
exchanges[].oi_usdnumberUSDOpen interest as USD notional: coin quantity × spot index price. One-sided.
exchanges[].call_oi_usdnumberUSDCall open interest, USD notional.
exchanges[].put_oi_usdnumberUSDPut open interest, USD notional.
exchanges[].oi_coinnumbercoinOpen interest in units of the underlying coin.
exchanges[].call_oi_coinnumbercoinCall open interest in units of the underlying coin.
exchanges[].put_oi_coinnumbercoinPut open interest in units of the underlying coin.
exchanges[].vol_usd_24hnumberUSD24h notional volume: traded coin quantity × current spot index price. Not premium turnover.
exchanges[].call_vol_usd_24hnumberUSD24h notional volume of calls.
exchanges[].put_vol_usd_24hnumberUSD24h notional volume of puts.
exchanges[].vol_coin_24hnumbercoin24h traded quantity in units of the underlying coin.
exchanges[].call_vol_coin_24hnumbercoin24h traded quantity of calls, in coin.
exchanges[].put_vol_coin_24hnumbercoin24h traded quantity of puts, in coin.
exchanges[].vol_premium_usd_24hnumber|nullUSD24h premium turnover (option price × quantity) where the venue publishes it; `null` elsewhere. Never added to notional volume.
exchanges[].pcr_oinumberratioPut open interest ÷ call open interest, in coin units; `null` when the call side is 0.
exchanges[].pcr_volnumberratioPut 24h volume ÷ call 24h volume, in coin units; `null` when the call side is 0.
exchanges[].n_expiriesnumber—Number of expiry dates included.
exchanges[].oi_usd_inversenumber|nullUSDOpen interest of coin-settled contracts.
exchanges[].oi_usd_linearnumberUSDOpen interest of stablecoin-settled contracts.
exchanges[].oi_usd_reportednumber|nullUSDThe venue's own USD open-interest figure where it publishes one. For cross-checking only.
exchanges[].vol_usd_reported_24hnumber|nullUSDThe venue's own notional turnover where it publishes one. For cross-checking only.
exchanges[].index_pricenumberUSDSpot index price used for USD conversion (median of the venues' own index prices in aggregates).
exchanges[].received_atnumbermsTime the CoinBoss collector received the data.
exchanges[].observed_atnumber|nullmsTimestamp given by the source for the data.
exchanges[].age_snumbersSeconds since the row was received.
exchanges[].is_staleboolean—True when the data is older than its fresh window.
coverageobject—What is and is not included in the numbers. Compare this before comparing totals with another source.
coverage.included_exchangesarray—Sources whose fresh data is included.
coverage.included_exchanges[]string—Sources whose fresh data is included.
coverage.unavailablearray—Sources that could not be included, each with a reason. They are never counted as 0.
coverage.unavailable[]object—Sources that could not be included, each with a reason. They are never counted as 0.
coverage.unavailable[].exchangestring—Exchange id (lower case).
coverage.unavailable[].reasonstring—Machine-readable reason code.
coverage.unavailable[].detailstring—Human-readable explanation of the reason.
coverage.stale_excludedarray—Rows left out because their last update is outside the fresh window. empty in the samples used to generate this table
coverage.field_gapsarray—Columns a venue does not publish; they are `null` for that venue.
coverage.field_gaps[]object—Columns a venue does not publish; they are `null` for that venue.
coverage.field_gaps[].exchangestring—Exchange id (lower case).
coverage.field_gaps[].fieldsarray—Names of the missing columns.
coverage.field_gaps[].fields[]string—Names of the missing columns.
coverage.field_gaps[].kindstring—Contract family: `inverse` (coin-settled) or `linear` (stablecoin-settled).
methodobject—Plain-text statement of the formulas used for this response, one entry per field.
method.oi_usdstring—Formula note for `oi_usd`, plain text.
method.vol_usd_24hstring—Formula note for `vol_usd_24h`, plain text.
method.vol_premium_usd_24hstring—Formula note for `vol_premium_usd_24h`, plain text.
method.pcr_oistring—Formula note for `pcr_oi`, plain text.
method.pcr_volstring—Formula note for `pcr_vol`, plain text.
method.max_painstring—Formula note for `max_pain`, plain text.
method.atm_ivstring—Formula note for `atm_iv`, plain text.
method.atm_iv_30dstring—Formula note for `atm_iv_30d`, plain text.
method.skew_25dstring—Formula note for `skew_25d`, plain text.
method.oi_share_pctstring—Formula note for `oi_share_pct`, plain text.
method.index_pricestring—Formula note for `index_price`, plain text.
method.max_pain_mainstring—Formula note for `max_pain_main`, plain text.
method.oi_usd_reportedstring—Formula note for `oi_usd_reported`, plain text. may be absent
method.vol_usd_reported_24hstring—Formula note for `vol_usd_reported_24h`, plain text. may be absent
metaobject—Lineage and freshness of this response.
meta.schemastring—Schema id of this response. It changes only when an existing field changes meaning or type.
meta.sourcearray—Upstream public endpoints the data was collected from.
meta.source[]object—Upstream public endpoints the data was collected from.
meta.source[].exchangestring—Exchange id (lower case).
meta.source[].endpointstring—Public endpoint of the source the collector reads (shown for lineage; clients never call it).
meta.observed_atnumber|nullmsTimestamp given by the source for the data.
meta.received_atnumber|nullmsTime the CoinBoss collector received the data.
meta.fetched_atnumbermsTime this response was assembled.
meta.windowstring—Time window the numbers cover.
meta.qualitystring—FRESH, PARTIAL, STALE, BROKEN or UNAVAILABLE, judged from data timestamps and coverage.
meta.is_staleboolean—True when the data is older than its fresh window.
meta.cache_ttl_snumbersCache lifetime of this response.
meta.fallbackstring—What the endpoint returns when the collector or a source fails.

Generated 2026-11-11 23:00 UTC from 4 real responses.

Example response

/api/sd/options/overview?coin=BTC · Real response captured 2026-11-13 03:52:55 UTC. Long arrays and maps are shortened for display: exchanges had 6 items; meta.source had 6 items; term_structure had 12 items; coverage.field_gaps had 4 items; coverage.unavailable had 12 items; coverage.stale_included had 6 items.

  • {
    • "success": true,
    • "schema": "coinboss.sd.options/1",
    • "now": 1794541975252,
    • "coin": "BTC",
    • "index_price": 71498.15576087,
    • "n_contracts": 5792,
    • "oi_usd": 32670143083.84,
    • "call_oi_usd": 18276964561.96,
    • "put_oi_usd": 14393178521.88,
    • "oi_coin": 457419.65,
    • "call_oi_coin": 255899.54,
    • "put_oi_coin": 201520.11,
    • "vol_usd_24h": 4295495191.7,
    • "call_vol_usd_24h": 2031780368.24,
    • "put_vol_usd_24h": 2263714823.46,
    • "vol_coin_24h": 60122.56,
    • "call_vol_coin_24h": 28436.77,
    • "put_vol_coin_24h": 31685.79,
    • "vol_premium_usd_24h": 34033631.12,
    • "pcr_oi": 0.7875,
    • "pcr_vol": 1.1143,
    • "n_expiries": 12,
    • "vol_exchanges": [
      • "binance",
      • "bybit",
      • "coincall",
      • "deribit",
      • "gate",
      • "okx"
      ],
    • "vol_premium_exchanges": [
      • "binance",
      • "deribit",
      • "gate"
      ],
    • "max_pain_nearest": {
      • "expiry": "2026-11-13",
      • "days_left": 0.1716,
      • "strike": 75000,
      • "pain_usd": 15831410,
      • "oi_usd": 3892192707.39,
      • "exchanges": [ … 6 ]
      },
    • "max_pain_main": {
      • "expiry": "2026-11-13",
      • "days_left": 0.1716,
      • "strike": 75000,
      • "pain_usd": 15831410,
      • "oi_usd": 3892192707.39,
      • "exchanges": [ … 6 ]
      },
    • "atm_iv_nearest": 40.28,
    • "atm_iv_main": 40.28,
    • "atm_iv_30d": 37.2,
    • "skew_25d_main": 6.6,
    • "term_structure": [
      • { … 4 },
      • { … 4 }
      ],
    • "exchanges": [
      • { … 28 },
      • { … 28 }
      ],
    • "coverage": {
      • "included_exchanges": [ … 6 ],
      • "unavailable": [ … 2 ],
      • "stale_excluded": [],
      • "field_gaps": [ … 2 ],
      • "stale_included": [ … 2 ]
      },
    • "method": {
      • "oi_usd": "sum over contracts of oi_coin x that exchange's spot index price (USDT/USDC treated 1:1 as USD); oi_coin is open interest in units of the underlying coin after …",
      • "vol_usd_24h": "NOTIONAL 24h volume = sum of vol_coin (24h traded quantity in underlying coin) x the exchange's CURRENT spot index price; not premium turnover. Binance statisti…",
      • "vol_premium_usd_24h": "PREMIUM turnover (option price x quantity) as reported by the exchange: Deribit volume_usd, Binance amount, Gate sum(|size| x multiplier x price) from the 24h t…",
      • "pcr_oi": "put open interest / call open interest, both in underlying-coin units; null when call side is 0 or missing",
      • "pcr_vol": "put 24h volume / call 24h volume, both in underlying-coin units; null when call side is 0 or missing",
      • "max_pain": "per expiry: settlement price S among strikes with OI>0 minimizing pain_usd(S) = sum_calls oi_coin x max(S-K,0) + sum_puts oi_coin x max(K-S,0); ties take the lo…",
      • "atm_iv": "per exchange and expiry: reference price F = median of the exchange-published forward/underlying price of that expiry (the exchange index price where no forward…",
      • "atm_iv_30d": "30-day constant-maturity ATM IV: linear interpolation in days between the two expiries bracketing 30 days; null when 30 days is not bracketed",
      • "skew_25d": "IV(put with delta closest to -0.25, within +-0.10) - IV(call with delta closest to +0.25, within +-0.10), in percentage points, using exchange-published deltas …",
      • "oi_share_pct": "exchange oi_usd / sum of oi_usd over included exchanges x 100",
      • "index_price": "median of the included exchanges' own spot index prices",
      • "max_pain_main": "main expiry = nearest expiry holding >=5% of total OI notional (same rule as legacy /api/options/overview); max_pain_nearest = nearest listed expiry with OI",
      • "oi_usd_reported": "sum of the exchange's own USD figure where it publishes one (Binance sumOpenInterestUsd, OKX oiUsd), for cross-checking only; null elsewhere",
      • "vol_usd_reported_24h": "exchange-reported notional turnover where published (Bybit turnover24h), for cross-checking only; null elsewhere"
      },
    • "meta": {
      • "schema": "coinboss.sd.options/1",
      • "source": [ … 2 ],
      • "observed_at": 1794522472654,
      • "received_at": 1794522473814,
      • "fetched_at": 1794541975252,
      • "window": "latest",
      • "quality": "STALE",
      • "is_stale": true,
      • "cache_ttl_s": 60,
      • "fallback": "on collector failure the last stored rows are served: an exchange whose newest batch is older than 25 min (collector cycle is 10 min) is excluded from totals (l…"
      }
    }

Verified samples

Besides the example above, the probe calls this endpoint with these parameters and checks the schema each time.

ParametersHTTPLatencyResult
coin=ETH20066 msPass STALE
coin=SOL20022 msPass STALE
coin=PEPE2002 msPass UNAVAILABLE
—4001 msPass returns the expected error

Checked 2026-11-13 03:28:18 UTC

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
60s
Edge micro-cache
10s
Update frequency
Collector round every 10 minutes; a venue is fresh for 25 minutes after its last successful round.
Window
Latest snapshot; volume fields cover the trailing 24 hours as reported by each venue.
Data sources
Public REST option endpoints of Deribit, Binance, Bybit, OKX, Gate and Coincall, collected and stored by CoinBoss (sd_opt_latest, sd_opt_summary_hourly). No third-party aggregator is involved.
Exchange coverage
Six option venues. A coin that has no listed options on the selected venues returns HTTP 200 with null fields, `meta.quality = "UNAVAILABLE"` and the reason under `coverage.unavailable`. Venues without a public option feed are listed there as well.
Units
USD notional = contracts × contract size × spot index price of the venue. `*_coin` fields are in units of the underlying coin. Implied volatility is in percent (55 = 55 %). `vol_premium_usd_24h` is premium turnover, reported separately and never added to notional volume.
Method
pcr_oi = put OI ÷ call OI (coin units). Max pain = the strike that minimises the total intrinsic value paid to option holders at expiry. ATM IV = mean mark IV of the contracts at the strike closest to the forward price published by the venue for that expiry; `atm_iv_30d` is interpolated linearly between the two expiries that bracket 30 days. skew_25d = IV(put with delta closest to −0.25) − IV(call with delta closest to +0.25), in percentage points, using deltas published by the venues only.
Timestamps
Unix epoch milliseconds (UTC) unless the field description says otherwise
Response format
json
Stability
Stable
Available since
2026-11-11

Live status

DegradedChecked 2026-11-13 03:52:55 UTCHTTP 20057 msSchema matchesNewest data point 5.4h old

The endpoint reports data quality STALE

Availability, last 30 days

100% of 406 checks passed

Schema drift detected by the last probe
  • Returned but not documented: coverage.stale_included, coverage.stale_included[], coverage.stale_included[].exchange, coverage.stale_included[].age_s

Errors

Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →

CodeHTTPMeaningWhat to do
INVALID_PARAM400A required parameter is missing or a value is not accepted. `param` names the parameter when it is known.Do not retry unchanged; fix the request.
UNAUTHORIZED401The `CB-API-KEY` header was sent but the key is unknown or revoked. Public data needs no key — drop the header or use a valid key.Do not retry unchanged.
FORBIDDEN403The route is not part of the public API (internal or account-only).Do not retry.
NOT_FOUND404Unknown route, or the requested coin / exchange / fund does not exist.Do not retry; check the path and identifiers against the catalog.
RATE_LIMITED429More requests than the per-minute limit. `Retry-After` gives the seconds to wait.Wait for `Retry-After`, then retry with backoff.
INTERNAL500Unexpected server error. The message is generic by design; quote `request_id` when reporting it.Retry once after a few seconds; report it with the request id if it persists.
UPSTREAM_FAILED503The data source behind this endpoint did not answer in time. No stale or substitute numbers are returned in its place.Retry with backoff; check the status page.
UNAVAILABLE501 / 503The dataset is temporarily not ready (cache warming) or the endpoint has no lawful public source yet.Retry later; the catalog marks endpoints that are unavailable by design.
REQUEST_FAILED200Some older endpoints answer HTTP 200 with `success: false`. Always check `success`, not only the HTTP status.Depends on the message; treat as a failed request.

Try it

GET/api/sd/options/overviewDegraded
Parameters

string — Coin symbol, case-insensitive (for example `BTC`). Missing or malformed values return 400.

Request URLhttps://www.coinboss.com/api/sd/options/overview?coin=BTC
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.