Data: what is published and how to fetch it
Everything shown on the ticker pages, screens and chart comes from one public series of derived aggregates, published after every trading day.
What is in the series
One CSV per ticker, one row per trading day, columns:
| Column | Meaning |
|---|---|
date | trading day, YYYYMMDD |
close | underlying close |
delta_neutral | delta neutral price |
gamma_neutral | price where summed gamma is zero |
gamma_max | gamma max price |
gamma_max_value | summed gamma at gamma max |
n_contracts | listed contracts on the ticker |
total_calls, total_puts | listed call and put contracts |
total_open_interest | open interest across the chain |
oi_calls, oi_puts | open interest split by option side |
max_pain_near | max pain for the nearest listed expiration |
max_pain_near_expiry | expiration used by max_pain_near |
max_pain_all | max pain with all listed expirations pooled |
gex_total | signed whole-chain gamma exposure at the close |
gex_flip | confirmed price where signed GEX crosses zero |
call_wall, put_wall | strikes carrying the largest call/put GEX magnitude |
History begins 2020-12-01. Roughly 5,600 tickers have a row on a given day; about 8,700 have appeared at some point.
How to fetch it
Fetch https://halfonadouble.com/api/v1/history/<SYMBOL>.csv, replacing
<SYMBOL> with an uppercase symbol from the ticker inventory.
This same-origin endpoint follows the active publication atomically and is the
supported route for browsers, crawlers and agents. It supports GET, HEAD,
range requests and conditional requests. Ticker files may be cached for up to
four hours. Data lands after each close, typically before 05:00 UTC the next
day.
The separate data host is an upstream storage implementation detail. Its blanket robots policy remains in place because the bucket also contains objects outside this public derived series; automated readers should use the same-origin endpoint above.
JSON API
The read-only OpenAPI description documents stable JSON representations for exact numeric retrieval:
- Publication metadata states the active methodology, data-through date and URL templates.
- Ticker inventory lists canonical page symbols and which ones have Markdown snapshots.
/api/v1/tickers/<SYMBOL>.jsonreturns one current snapshot and its displayed historical summaries./api/v1/analysis/<SYMBOL>.jsonreturns the approved same-date ticker aggregates, daily average-IV history and pooled all-expiration max pain payout curve when that symbol is covered by the analytics feed./api/v1/screens/<SCREEN>.jsonand level-distance rankings return the same ordered results shown on their canonical pages.
Ticker JSON history summaries include the latest daily open-interest change in
contracts, its z-score against the preceding 252 valid changes, and the actual
comparison-session count. The unusual-open-interest-accumulation screen
selects positive changes at or above +2σ.
Every response includes a schema version, data-through date, methodology, units or field-specific unit names, canonical links and explicit nulls.
Advanced options analytics
The site joins a separate versioned end-of-day feed only when its trading date
exactly matches the core Half on a Double publication. Public fields include
ticker-level IV rank and average-IV history, the pooled all-expiration max pain
payout curve, four coarse strike/spot or days-to-expiration band series,
volatility differences, activity ratios, normalized whole-chain exposures and
distances to reference levels.
The analysis JSON uses an explicit field allowlist; unknown producer fields
are withheld. public_schema_version: 4 identifies this aggregate-only
representation. Existing clients must tolerate unavailable analysis families.
The four band series are total option volume and net gamma exposure in fixed strike/spot bands (<70%, 70–90%, 90–110%, ≥110%), and put/call open-interest ratio and net delta exposure in fixed DTE bands (0–90, 91–365, >365 days). Each row contains only a band identifier and its pooled metric. A strike-band family is withheld unless every band has at least 10 contributing strikes; a DTE-band family is withheld unless every band has at least five expirations with both call and put open interest. Any malformed source row or mismatch with the public whole-ticker aggregate also withholds that entire family.
The max pain curve contains only settlement strike and total OI-weighted intrinsic payout per share; it omits the 100-share contract multiplier and does not isolate an expiration. Individual contracts, per-contract IV and Greeks, other strike/expiration surfaces, option premiums and pricing inputs are not published. The expected-move and straddle views are unavailable under this boundary. The eight long-option research screens publish matching tickers without their underlying contract identifiers, inputs or scenario details.
The contract-doublers catalyst screen separately publishes contract identifiers, expiration, strike, call/put type and the percentage change over five trading sessions. It includes calendar DTE at the latest close, DTE-weighted research priority points, qualifying counts, comparison dates and coverage. Priority points are not trade scores or catalyst probabilities. Starting and ending option premiums, bid/ask, contract IV and Greeks are omitted from its HTML, JSON and Markdown exports.
The public analysis inventory lists only available aggregate visualizations.
methodology in the publication metadata is part of the data contract. The September 2026
market-implied-carry-v1 generation recomputes the full history and replaces
the former fixed-0.25% series. Do not concatenate rows cached from the legacy
path with rows from the active generation.
Licence
The published levels are derived aggregates and are yours to use for personal, non-commercial research with a link back to the page or this site. Bulk republication, resale, or use in a product needs permission first; ask through the contact page. Full terms are in the terms of use.
What is not published
The underlying per-contract data (quotes, implied volatilities, greeks per strike) is licensed end-of-day options data and is not redistributed. Only quantities that cannot be converted back into that data are public.