On-Chain

Deribit BTC Max Pain — latest expiry + upcoming

Last finalized Deribit BTC options expiry (max_pain_strike, spot_at_expiry, spot_minus_max_pain_pct, put_call_ratio, total_notional_usd, is_monthly/is_quarterly) plus up to 10 upcoming expiries with current max-pain level, days_to_expiry and open_interest_contracts. days_to_expiry is clamped at 0 and cannot distinguish "settles later today" from "settled earlier today" — use settles_at (full ISO settlement timestamp) and hours_to_settlement (signed; negative = already settled, not yet finalized). settlement_time_utc names the assumed settlement time (08:00:00Z for DERIBIT_BTC, measured against the exchange: 868/868 open instruments at exactly 08:00:00 UTC). Markets without an evidenced settlement time return null for all three instead of a guess. Every expiry — upcoming included — now carries is_monthly, is_quarterly and expiry_type (daily | weekly | monthly | quarterly). These NEST rather than partition: quarterly is also monthly. expiry_type is the only field separating a Friday expiry from a mid-week one. All three derive from the calendar, which is why upcoming expiries can carry them at all. Read the open interest alongside the level: a daily expiry with 4,000 contracts and a monthly one with 150,000 are not the same observation. oi_available distinguishes "null" from "not collected". Note (2026-07-30): the monthly/quarterly flags were corrected — they previously marked a 7-day window rather than the actual last-Friday expiry. spot_at_expiry is the exchange settlement price (DERIBIT_BTC: Deribit delivery price, 30-min index TWAP before 08:00 UTC; IBIT: ETF close of the expiry day) — recomputed 2026-08-31 for all earlier rows, which had carried the BTCUSDT daily close. include_strike_ladder=true adds a strike_ladder per expiry: open interest per 2.5 % price band around the snapshot spot (±25 %, calls/puts separate, absolute contracts, share_pct), below_range/above_range sums, max_pain_recomputed and a day-over-day delta on the same band grid (null with delta_reason when no prior snapshot; settled expiry: anchored at the settlement price, delta_reason=settled). Open interest is a stock, not a side — no hedge direction follows; strike_ladder_note travels with the response. Omit the flag for the unchanged payload. Cron collects daily 02:00 UTC. [Free tier]

get/api/v1/onchain/max-pain/latest

Request

  • Base URL: https://tradingstrategies.work
  • URL: https://tradingstrategies.work/api/v1/onchain/max-pain/latest
  • Auth: HTTP bearer

Query parameters

market'DERIBIT_BTC'

Options market. Only DERIBIT_BTC is served: IBIT is still collected daily but no longer delivered (unlicensed source, no redistribution — 2026-09-24).

include_strike_ladderboolean

true ⇒ each expiry carries strike_ladder (OI per 2.5 % band around spot, ±25 %, calls/puts, absolute contracts, day-over-day delta). Omit for the unchanged payload.

expiry_datestring date

Optional: restrict upcoming[] (with strike_ladder/gex) to ONE open expiry — keeps ladder/GEX responses small; gex_totals still covers the whole book. A date that is not open returns invalid_input listing the open expiries; upcoming_filter echoes the choice.

include_gexboolean

true ⇒ (DERIBIT_BTC only) each upcoming expiry carries a gex block + gex_totals across the book: BS gamma notional (USD per 1 % move) per 2.5 % band from live Deribit mark IV. The dealer sign is an ASSUMPTION — both conventions published side by side; zero_gamma_level flips only under the SqueezeMetrics convention (short-all has no zero crossing by construction, its null is structural — zero_gamma_level.note says so). Tau floor 2 h; instruments without usable IV excluded and counted. gex_data_as_of names the live fetch (different observation time than the 02:00 UTC snapshot fields).

Response

Latest max-pain expiry snapshot + upcoming expiries.

Changes

No recorded changes to this operation across all 1 revision of this API.