API Changelog
New endpoints, features, and improvements to the FlashAlpha Lab API.
Greeks Pricing Model Update on the Historical API
What's new: historical.flashalpha.com now serves greeks from the updated greeks pricing model, bringing historical greeks into closer parity with live. Measured against live samples (299,521 contracts in 24 samples over three sessions; SPX, SPXW, SPY and QQQ at 10:15 and 15:45 ET): historical delta is within 0.01 of live on 97.6% of contracts, implied volatility is within 0.03 vol points at the median, and net GEX is within 0.32% of gross exposure at the median. When the historical model is given the same quote and underlying price as live, it reproduces live greeks exactly (delta within 0.00000003 in all 24 samples). The remaining differences come from timing: the archive keeps one snapshot per minute, while live prices at the moment of each request.
What changes for you: greek values shift slightly, most for long-dated options on dividend-paying underlyings, and the exposures and levels built from them move with them. Rerun saved backtest results before comparing across this release. Endpoints, parameters, response shapes and API keys are unchanged; responses report endpoint_version: 2026.09.30.
New Greeks Pricing Model
What's new: greeks on the live and historical APIs are priced with a new model. Every contract uses the risk-free rate and dividend yield in effect for its session: the latest values published before that session opened. Index options (SPX, SPXW, NDX, RUT, OEX and the other index roots) price off the put-call parity forward built from all of the underlying's European roots, so OEX uses XEO quotes and SPXW is pooled with SPX. Historical greeks are computed when you request them, from the archived quote, underlying price and time to expiry at the requested minute, so every date in the archive is priced with the new model.
What changes for you: greek values, and the exposures and levels built from them (GEX, DEX, VEX, CHEX, gamma flip, walls), shift slightly. Long-dated contracts on dividend-paying underlyings move the most. Recompute saved results before comparing backtests across this release. Response shapes are unchanged. If the rate or dividend for a historical date is unavailable, the request returns 404 with error: no_data and reason: pricing_inputs_unavailable instead of an estimate. Responses priced with the new model report endpoint_version: 2026.09.30.
Preview: historical data priced with the new model is available now at https://historical-beta.flashalpha.com. Use the same API key, paths and parameters as historical.flashalpha.com, so you can run the same request against both and compare. The preview is for evaluation; keep production workloads on historical.flashalpha.com, which moves to the new model at release.
Historical Macro and HV Use Prior-Settled Daily Inputs
What's new: historical macro values, 0DTE VIX and daily realized-volatility inputs now use only dates before the requested ET date. This removes same-day closing values that were not yet known at the requested time. Date-only, EOD and after-close requests also use the prior session for these inputs. Quote and spot fields still follow the requested time. If a macro value is missing for the prior session, the response uses the most recent earlier one.
What changes for you: HV now uses the most recent run of daily closes in date order. Historical HV, directional RV and the VRP values built from them change. Recompute saved results before comparing backtests across this release. Response shapes are unchanged.
Daily-input timing →Gamma Flip Published More Often, Same Stress Test
The gamma flip level is now published on more chains. The stress check is unchanged: every single-strike gamma change of plus or minus 25% must keep the repriced first root close to the published level. What changed is the allowed distance. The check first requires the root to stay within 0.1% of spot around the level; if that fails it retries at 0.25% of spot, inside the same per-chain work budget. Local open-interest coverage must span the window that certified the level.
Level and regime are now reported separately. A level can be published while the dealer regime at spot is undetermined, which happens when spot sits almost on the flip: gamma_flip_status=available with a numeric gamma_flip and regime=unknown. Regime-dependent scores and setups stay unavailable until the side is certified. No new fields; existing fields and semantics are unchanged.
Unverified levels are now shown. When the root exists but a publication gate fails (sensitive_root, uncertain_root_path, quality_budget, insufficient_local_coverage, insufficient_quote_quality), gamma_flip carries the numeric root and gamma_flip_status names the gate; regime stays unknown. Treat these as indicative. On the validation replay this lifts numeric availability from 48% to 76% with every certified level unchanged. gamma_flip is null only when no supportable root exists.
Measured on the 4,575-chain validation replay: published levels rose from 1,613 to 2,213 (35% to 48%) with no previously published level lost, and 436,507 stress variants produced no location violation. Consecutive-minute jumps stay under 0.32% of spot. This remains a discrete sensitivity check, not a probability guarantee. Endpoint version 2026.09.11.
Gamma Flip Published Only When the Book Supports It
The gamma flip is the price at which total dealer gamma changes sign. We now solve for that price directly, by repricing every contract in the chain across a range of underlying prices. You get a real price rather than the nearest listed strike, and it agrees with the net_gex in the same response.
A level is only published when the book can support it. Three checks run first. Enough of the open interest between spot and the level must have usable gamma. On expiry day those same contracts must also have two-sided quotes with real time value left in them. And the level must not move more than 0.1% of spot if the gamma at any one strike changes by a quarter. Fail any of them and gamma_flip comes back null.
The new gamma_flip_status field tells you which. It reads available when we publish a level, and otherwise names the reason: no_boundary, stored_sign_mismatch, insufficient_local_coverage, insufficient_quote_quality, sensitive_root, uncertain_root_path, search_budget or quality_budget. It sits next to the flip everywhere the flip appears: exposure summary and levels, zero-DTE, VRP, earnings, strategy levels, flow levels on the default polarity, the screener and the MCP tools. Treat any value you do not recognise as unavailable.
What changes for you. gamma_flip can be null, so handle it. When it is, regime reads unknown instead of a direction, and anything that needs a known regime returns null as well: gex_conditioned, vanna_conditioned, regime.vrp_regime, the short_put_spread, short_strangle and iron_condor scores, and net_harvest_score. Earnings scoring drops its gamma term. Zero-DTE setups that need gamma are unavailable, and setup.primary can read wait. Anything measured on its own still works: net_gex, IV, RV, VRP and the calendar_spread score. An alert watching for a known gamma regime will not fire or clear on an unknown reading.
We tested this on 4,575 historical option books across seven symbols, checked against a separate implementation, with two holdout samples picked after the rules were fixed. Stressing one strike at a time, 647,574 times over, never moved a published level by more than 0.1% of spot. The trade is availability: about one book in three in that sample produced a level, and the rest returned a reason instead of a number.
Replay no longer substitutes a per-strike profile crossing for a withheld flip or treats an unknown regime as negative gamma. Expiry-date checks now use Eastern Time. Net GEX and option greeks are unchanged, and a withheld flip does not mean zero gamma exposure. The extra quality checks also add computation on full chains.
One exception. polarity=flow keeps its own crossing of the dealer-signed per-strike profile. Different quantity, no certificate, no status field.
Endpoint version 2026.09.09.
Dealer Regime Now Reads Canonical Net GEX
A contract with no two-sided market, or a mid outside the no-arbitrage bounds, cannot be solved for implied volatility and reaches the chain as an open-interest-only row with its greeks at zero. Every exposure endpoint already treated those rows as carrying no gamma exposure. Dealer regime did not: it substituted a dimensionless open-interest weight for the missing gamma, and because that substitute is several orders of magnitude larger per contract than real index gamma, the substituted rows could outweigh every priced contract on the board and set the published sign on their own.
The substitution is gone. Dealer regime is now classified from net_gex, computed through the same calculator the exposure endpoints use, and the regime label agrees with the figure it is derived from. Which exposure route it equals depends on the request: with no expiry parameter it matches /v1/exposure/summary, and with one it matches /v1/exposure/gex and /v1/exposure/dex for that expiration, because summary takes no expiry parameter and is always full-chain. The contract multiplier reaches the calculation for the first time, which matters for options on futures. Open interest from unpriceable contracts is untouched and still reaches max pain, pin scoring and open-interest concentration exactly as before.
Six new fields make the reading auditable rather than implicit: net_gex and net_dex for the exposure itself, plus contracts_total, contracts_with_gamma, oi_with_gamma_pct and gamma_calculation, so you can see what share of the book informed the classification. Thin gamma coverage lowers confidence; it never rejects the request.
What changes for you. regime will differ from what you saw before on chains where unpriceable open interest was driving it. net_gamma, net_delta and gamma_source all remain on the wire for compatibility, but two of the three have changed. net_gamma no longer includes the substituted values, so it is a different number on any chain that had unpriceable contracts. gamma_source still reports real / mixed / proxy by how much of the chain is priced, but proxy no longer means a proxy was used - it now means no contract in the chain could be priced at all. Only net_delta is unchanged. All three are deprecated in favour of the canonical pair and the coverage counts. score and confidence still read the legacy sum, which is now much smaller, so both read lower than before; their bands are being recalibrated separately. transition now means the sign is undefined rather than that exposure is small.
One thing that has not changed and is not a defect: the regime field on the exposure endpoints answers a different question. It is spot against the gamma flip, which is deliberately independent of the sign of net GEX, and the two readings can legitimately disagree.
Endpoint version 2026.08.31.
Reported Quarters Retired From the Upcoming Earnings Calendar
Calendar providers revise estimated report dates as a quarter approaches, which can leave more than one candidate date on file for the same fiscal quarter. Every quarter is now resolved across all of its recorded dates before anything is served, and a quarter is treated as behind you the moment its results are on record - either a realized post-earnings move or a reported EPS figure. Once a company has reported, that quarter is retired from the upcoming calendar and the next scheduled report takes its place.
This applies everywhere a next report date is used, not just the calendar view: the cross-sectional screener, the expected-move and IV-crush endpoints, event-scoped strategy scoring, and the days_to_earnings field on /v1/vrp. If you key logic on a symbol reporting within a window, that window now closes when the company reports.
Independent date reconciliation was widened at the same time, and now covers the great majority of reporters in a two week window rather than a curated sample. A stored date is only ever replaced from a confirmed external date; estimates are used to flag a disagreement for review, never to overwrite what we serve.
Earnings calendar → · Earnings API → · Data quality →Stricter Quote Validation on Volatility Wings and Surface
Every contract is now checked against vertical no-arbitrage before it can set a volatility figure: put prices must rise with strike and call prices must fall. Contracts whose quote is inconsistent with the current spot and time to expiry are excluded from the volatility slices, so a single stray quote can no longer determine a 25-delta or 10-delta wing, the ATM basket, or a point on the /v1/surface grid.
The same slices feed /v1/volatility, /v1/vrp and the screener volatility fields, so those improve too. Exposure endpoints (/v1/exposure/gex, dex, vex, chex), open interest and max pain are computed differently and are unchanged. If you store responses, expect small differences in the affected volatility fields from this date onward. Historical replay is unaffected.
Basic Daily Request Limit Raised to 250
The Basic plan now includes 250 requests/day, up from 100 - a 2.5x increase at the same price. Applied to every Basic account, new and existing, so the two-tier split between older and newer signups is gone: accounts previously on 250 keep it, and everyone else moves up to match. No action needed, and nothing changes on Free (5/day), Growth (2,500/day) or Alpha (unlimited).
See plans → · Rate limits →Real-Time WebSocket Streaming (Commercial)
500+ computed metrics (GEX, dealer positioning, flow, volatility, VRP, surfaces) pushed over a single WebSocket. Subscribe to (symbol, metric, cadence_ms) triples with dotted metric ids like exposure.gex.net_gex; receive sequenced, timestamped update frames with latest-wins delivery. Offered as a commercial bundle from $4,500/mo (dedicated node + streaming compute, 500 concurrent subscriptions included); the endpoint is provisioned per client during onboarding.
Flow Polarity - Flow-Signed Dealer Gamma
Add ?polarity=flow to /v1/flow/gex, /v1/flow/levels and /v1/flow/live to sign each strike's gamma by the measured dealer position from the classified session tape (quote-rule NBBO aggressor, Lee-Ready style) instead of the calls-positive/puts-negative convention. A positive net_gex means dealers are genuinely long gamma (pinning, vol suppression); negative means short (vol amplification). No OI assumptions, opening-position estimates, or decay heuristics. an Alpha+ mode (the base gex & levels endpoints stay Growth), replayable historically via ?at=. Existing calls are unchanged when the parameter is omitted.
Futures Support - ES & NQ Index Futures
Futures support is live: GEX/DEX/VEX/CHEX, vol surface, max-pain, and flow for ES & NQ index futures (options-on-futures, priced with Black-76). New pages /futures/es and /futures/nq.
Realized & Forecast Volatility Endpoints
Two new Alpha-tier volatility endpoints. Realized returns range-based estimators - Parkinson, Garman-Klass, Rogers-Satchell, and Yang-Zhang alongside close-to-close - over 10/20/30-day windows (5-8x more statistically efficient than close-to-close). Forecast returns conditional forecasts: EWMA (RiskMetrics), HAR-RV (Corsi), and GARCH(1,1) fitted by maximum likelihood with selectable Gaussian or Student-t innovations. Both draw daily OHLC history from the historical replay archive (also exposed directly as GET /v1/stock/{symbol}/prices on historical.flashalpha.com), so coverage is limited to ramped symbols.
Historical Option Bid/Ask Sizes + 0DTE Universe Flag
Historical option-quote responses now return real bidSize / askSize on every contract, and accept optional maxSpreadPct / maxSpreadAbs filters that drop wide, crossed, or one-sided ghost quotes (count reported in the X-Filtered-Out header). The symbol directory now flags has_0dte per symbol.
Stable Gamma Flip - Repriced Zero-Gamma Root
The gamma flip is now computed by repricing each contract’s gamma across candidate spot levels and solving for the zero crossing, replacing the per-strike sign-change heuristic that could jump hundreds of points on a sub-dollar move. The level is now stable under noise and sign-consistent with net GEX, and the same computation runs across every exposure surface, live and in historical replay. No response-shape change; the gamma_flip value is simply more stable.
MCP Server Expanded to 73 Tools + Persona Connectors
The MCP server now exposes 73 tools (56 live + 17 historical replay), up from the original 14. Flow analytics (get_flow_*), the screener (post_screener), multi-leg structures (post_structure_pnl/greeks), earnings, and strategy signals are now native MCP tools. New persona connectors ship the same toolset tuned per workflow, and 403/429 responses now return the required tier, a daily-limit breakdown, and an upgrade link.
Discrete Analytics: OI-Diff, Spot-Vol Correlation, VIX State, Universe, Dealer Premium
Five standalone analytics endpoints: open-interest day-over-day diff, spot/vol correlation, the VIX-vs-realized regime label (vix-state), the public symbol-universe directory, and dealer options premium. Most are Growth+; dealer-premium is Alpha.
VIX State docs → · Spot-Vol Correlation docs → · Universe docs →0DTE Live Flow
Same-day-expiry flow analytics: point-in-time snapshot, intraday series (?bar=30s|1m|5m|15m), dealer hedge-flow, a strike×time heatmap, and per-strike delta flow - with a composed headline narrative, setup classifier, and range/pin probabilities.
Historical Flow Replay
The live flow surface (levels, pin-risk, summary, flow-weighted GEX/DEX, dealer-risk, signals, and raw option/stock flow) is now mirrored on the historical host and addressable at any minute via ?at=, so flow-based backtests consume the past with the same shapes as live.
Strategy Signals, Multi-Leg Structures, SVI Surface & More
A large public-surface expansion: ten strategy-signal endpoints (flow-anomaly, dealer-regime, vol-carry, skew, term-structure, tail-pricing, and more), multi-leg structure P&L and Greeks, the raw SVI surface, expected move, cross-sectional dispersion, a liquidity score, the unified per-strike exposure sheet, exposure term-structure, and the skew term structure. Tiers range from Basic to Alpha by endpoint.
Skew-Term docs → · Exposure Sheet docs → · Strategy Signals docs → · Structures docs →Live Flow Analytics API
Introduces the /v1/flow/* family: simulation-aware dealer-flow levels, pin-risk, flow-weighted GEX/DEX, dealer-risk, and a live snapshot (Growth+), plus raw unusual options flow - recent, blocks, net-notional outliers, leaderboard, cumulative - and scored flow signals with block/sweep classification (Alpha+).
Call/Put Walls Restricted to the OTM Half
Call wall and put wall now require spot and only consider out-of-the-money strikes (call wall at or above spot, put wall at or below), preventing both walls from collapsing onto a single shared open-interest magnet. Dealer alignment and the narrative key levels inherit the fix.
Key Levels docs → · Call wall & put wall explained →Historical API OpenAPI 3.1 Spec + Captured Sample JSONs
Machine-readable OpenAPI 3.1 spec for the historical replay API. 18 paths covering the core analytics endpoints mirrored at historical.flashalpha.com, with at marked required on every analytics path. Drop into Swagger UI, openapi-generator, or feed to an LLM for code synthesis. Ships alongside eight real captured response samples at /docs/samples/historical-*.json (coverage, gex, vrp, max-pain, exposure-summary, optionquote, stock-prices, stock-summary), frozen at at=2024-08-05T10:30:00 (the August 2024 carry-unwind / VIX spike) so they're reproducible test fixtures rather than illustrative numbers. Bundled into /docs/samples.zip.
Historical Backtest Cookbook + Python Recipe
Six-step cookbook for running backtests against the Historical API: (1) discover coverage via /v1/tickers, (2) pick timestamps strictly before signal time, (3) fetch with ?at=, (4) cache by (symbol, at, endpoint), (5) join to your own returns, (6) never call live endpoints inside a backtest. Includes a runnable ~40-line Python recipe (gamma-flip detection across SPY July-Sept 2024) using the SDK base_url swap so the same strategy code runs both live and historical. Plus a pitfalls block covering svi_vol_gated: backtest_mode (SVI fits stamped EOD, use implied_vol intraday), vrp.percentile null caveats during warm-up, ET wall-clock timestamps, and the daily-bar vs minute-bar throughput tradeoff.
Historical Coverage Endpoint Requires Alpha-Tier Auth (Doc Fix)
The historical coverage endpoint requires an Alpha-tier API key passed as X-Api-Key. The docs previously labelled it public / no-auth, which was incorrect; the endpoint itself has always been Alpha-gated at the server. If you scripted a coverage check without the header, add it. While we were in there: every other historical doc page now also carries the OpenAPI alternate-link tag and a clear ALPHA badge, and contradictory pricing/tier language across articles, llms.txt, skill.md, and the SDK pages was reconciled to a single canonical source.
Earnings Analytics
An earnings analytics suite: confirmed calendar, pre-event expected move, historical reaction stats, IV-crush estimates, earnings VRP, dealer positioning into the print, strategy suggestions, and a cross-name earnings screener. Calendar and expected-move are Growth; the deeper analytics are Alpha.
Earnings API docs → · Trading earnings volatility guide →Live Options Screener
Real-time multi-factor options screener across ~250 symbols. Recursive AND/OR filter trees with cascading stock / expiry / strike / contract filters, custom formulas on any numeric field, and pre-computed strategy scores (harvest_score, dealer_flow_risk, iron_condor_score, calendar_spread_score). Growth: 20-symbol Tier 1 universe, 10 rows per query. Alpha: ~250 symbols, 50 rows + offset pagination, formulas, all Alpha fields. Served from an in-memory store refreshed every 5-10s.
Server Upgrade - Improved Response Times
Upgraded API infrastructure to higher-performance servers. All endpoints benefit from reduced latency and faster response times. No API changes required - existing integrations see the improvement automatically.
API Playground Upgrade
Searchable ticker dropdown loaded from /v1/tickers. Dynamic expiration dropdown from /v1/options. Tier-gated feature indicators. Default endpoint varies by auth state.
MCP Server - AI Agent Integration
MCP (Model Context Protocol) server for AI agents. Streamable HTTP transport at lab.flashalpha.com/mcp. 14 tools available covering all API endpoints. Compatible with Claude Code, Claude Desktop, Cursor, and Windsurf.
VRP Analytics Endpoint
Volatility risk premium dashboard. VRP spreads across 4 windows (5d/10d/20d/30d), z-score, percentile, directional VRP decomposition (put/call wing), term structure, GEX-conditioned regime analysis, strategy suitability scores, dealer flow risk, warnings, and macro context.
View documentation →Advanced Volatility Endpoint
SVI-calibrated volatility surfaces. Raw SVI parameters per expiry (a, b, rho, m, sigma), forward prices, total variance surface grid, butterfly and calendar arbitrage flags, variance swap fair values with convexity adjustment, and higher-order Greeks surfaces (vanna, charm, volga, speed).
View documentation →0DTE Analytics Endpoint
Same-day expiration analytics. Pin risk scoring, expected move that decays intraday, gamma acceleration, dealer hedging estimates at ±0.5%/±1%, per-strike 0DTE breakdown. Growth+ plan. API key regeneration added to account settings.
View documentation →API Playground
Interactive API testing tool. Two-panel layout with endpoint picker, parameter editor, cURL snippet generator, and live JSON response viewer. Works with your API key or in demo mode.
Try the playground →Option Chain Filtering & Full Chain GEX
Option chain filtering by expiry, strike range, and type (call/put). Full-chain GEX aggregation across all expirations for Growth+ plans. Single-expiry GEX remains free.
View documentation →FlashAlpha Lab API Launch
Initial launch of the FlashAlpha Lab API at lab.flashalpha.com. API key authentication with rate limiting. Free tier: 5 requests/day.
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.