1. API
  2. What changed,

Changelog

What changed,
and when.

One entry per API version, newest first. Response shapes only gain fields inside a version; anything renamed or removed gets a new version and an entry here first.

API 1.16
  • Every endpoint's response sample is now a real captured payload (8 September 2026), shared with the endpoint records behind the developer pages; the note above each sample says which request produced it. Regenerated weekly.
  • Markdown twins of the developer docs: GET /developers/<family>.md and /developers/<family>/<endpoint>.md, and /llms-full.txt for the whole reference.
  • Access wording corrected: tokens are issued to any paid or trial plan from Basic; each endpoint follows the same tier as the web app.
API 1.15
  • Compact payloads for LLM consumers (GET /gex, GET /zero-dte, GET /flow). When the caller is the apexvol-mcp package or the hosted connector (X-ApexVol-Client header present) the strike lists are trimmed to the strikes around spot (gex 25 per side over gex_by_strike and gex_profile; zero-dte 30 per side over by_strike and chain_table) and flow rows are capped (all_flow 25, largest_flows and unusual_activity 10). Raw REST callers keep full payloads. ?detail=compact|full overrides either way; ?strikes_around= and ?limit= size the window. Every response carries a window block saying what was trimmed (rows_total, rows_returned, truncated). Scalars, key_levels, implications and summary blocks are never trimmed. Before: 148 KB (zero-dte), 89 KB (gex), 68 KB (flow) per call, about 37k, 22k and 17k tokens.
API 1.14
  • One realized-vol estimator: every realized figure is the standard deviation of close-to-close log returns over exactly N sessions, annualised by the square root of 252, in percentage points, and payloads say so (hv_basis). GET /vrp/<ticker> had taken the std over every row that 60 calendar days returned (about 42), so its 30-day figure sat 12 points from the exact-window figure on PLTR and TSLA (4 Sep); it now matches /volatility-cone 30d and /vrp/<ticker>/timeseries current.hv, and carries hv_window.
  • One IV per family, labelled (iv_basis). GET /vrp/<ticker> and the mispricing components quote the vendor's 30-day constant-maturity iv30d, the same series /vrp/<ticker>/timeseries plots and the terminal's IV chip reads; the IV-rank series ran 0.2 to 1.3 points higher on every name checked. GET /iv-rank/<ticker> stays on its own series (its rank and 52-week range are computed on it) and adds iv30d so the two can be reconciled. GET /volatility-cone/<ticker> labels its per-tenor chain-interpolated IVs and adds iv30d.
  • GET /iv-rank/<ticker>: iv_percentile is now the platform percentile (cores ivPctile1y, the figure the terminal shows) and equals iv_percentile_1y; iv_percentile_source names the series. It used to quote the IV-rank series' own one-year percentile beside a different one-year percentile (AAPL 61.9 and 69 in one payload).
  • Earnings awareness: GET /vrp/<ticker> and GET /volatility-cone/<ticker> carry earnings_in_window and an ex-earnings realized figure (realized_volatility_ex_earnings / volatility_risk_premium_ex_earnings on VRP; rv_ex_earnings per tenor and realized_vol_30d_ex_earnings on the cone) computed with the earnings-reaction session dropped, so a window that contains a report no longer reads as a rich or cheap verdict without saying why.
  • GET /hv-regimes/<ticker>?view=ex_earnings (basis hv, the default) works again. It asked the feed for a 30-day ex-earnings realized series that no feed carries (the live row has the pair only at 5 to 120 days, the history export has none), so it failed for every ticker. Both series are now computed from the daily closes with the platform's realized-vol estimator: regular is the last 30 close-to-close returns, ex-earnings the last 30 that are not an earnings-reaction session (tenor: 30d, source, hv_basis, reaction_sessions_excluded).
API 1.13
  • Mispricing assessment (GET /mispricing-assessment, the MCP earnings analysis default): components.vrp and components.realized_vol were always 0 because the endpoint read keys the VRP provider never returned. Fixed; the VRP term (40% of mispricing_score) contributes again and the signal moves with it.
  • Upstream failures answer HTTP 424 instead of 502, same body ({success: false, error, upstream: true}). Cloudflare replaces an origin 502 with a plain-text page, so from 18 July to 6 September no client ever received the explanation (no two-sided quote to price, a history the feed does not carry); the MCP client printed Server error. 424 passes through unchanged. The options-flow 503 (dead volume feed) is not affected.
  • Unknown paths under /api/mcp/data answer {error: 'No endpoint at ...', did_you_mean: [...], docs, endpoint_count} instead of a bare Not found.
  • Bounded parameters: lookback_days, num_expirations, periods, days, days_ahead, num_quarters, quarters, years, days_before/after, hv_period, max_expirations, exclude_earnings_days and strikes_around are clamped to documented ranges; a value that is not a whole number answers 400 with a plain message instead of a Python error string.
  • Service note from 18 July removed: options flow is serving again (end-of-day figures while the market is closed).
  • Documented GET /api/event/earnings-breakevens (session surface).
  • Guides: plans, authentication, errors and rate limits now describe per-plan access (every paid plan since 4 August, each endpoint at its web feature tier) and the monthly allowance unit (upstream data requests, not calls; one call can spend more than one). New rows for 424 and 503 and the www. redirect trap.
  • GET /stock/<ticker> carries company_name (from the coverage registry) so clients stop printing the ticker twice; it never carried bid/ask, and the 0.1.3 client no longer prints $0.00 for them.
  • GET /options-by-delta/<ticker> declares iv_units: decimal and adds iv_pct (percentage points) beside the unchanged decimal iv.
  • apexvol-mcp 0.1.3: the flow, GEX and stock-price summaries read the keys the server sends (0.1.0 to 0.1.2 printed zero volume, a $0.00 gamma flip and N/A walls above correct data); the client version header reports the installed version (it was pinned at 0.1.0).
API 1.12
  • Earnings move basis: the data feed's impliedEarningsMove is a one-sigma figure, and every place that set it against a realized average (a mean absolute move, about 0.8 sigma) read roughly 25% rich. Every implied earnings move the API publishes is now the expected absolute move, 0.8 x the vendor figure, with the raw sigma beside it: implied_move / implied_move_sigma and move_ratio on the earnings calendar (rows carry implied_move_basis: expected_abs_move; the MCP earnings calendar follows); implied_move_pct / implied_move_sigma_pct on /api/event/earnings-from-cores; implied_move_model_pct / implied_move_model_sigma_pct on /api/event/earnings-verdict and current.implied_move_model_pct on /api/earnings-straddle/<ticker>, whose vendor-model fallback for implied_move_pct converts too; implied_earnings_move / implied_earnings_move_sigma in /api/main_data cores_extras, /api/iv-dashboard/init, the /api/expected-move orats_expected_move block, /api/price-context, the /api/zero-dte vol context and the /api/vol-term earnings block (which had been empty: it read a column the feed no longer fills); implied_earn_move / implied_earn_move_sigma on /api/iv-shift; implied_move / implied_move_sigma on /api/relative-value; imp_earn_move / imp_earn_move_sigma on the screener.
  • Earnings: implied_move_pct on /api/earnings-straddle/<ticker> (current) and /api/event/earnings-verdict (edge) is now the event-only move. It used to be the full ATM straddle of the first expiration on or after the report, which also holds every day of ordinary drift until that expiry; with the report weeks out that read several times the event. The straddle itself is still published beside it as straddle_move_pct with straddle_dte, and the split as diffusion_move_pct and event_variance_share. implied_move_source now reads chain_event, surface_event, impliedEarningsMove or straddle_total.
  • Earnings verdict: historical_avg_move_pct is the average close-to-open gap (historical_avg_move_basis: gap), matching the hit rate; the close-to-close figure is historical_avg_close_to_close_pct. The front-month straddle mispricing only scores when that month contains the report (straddle_mispricing_is_event). A report more than 30 days out returns verdict.preliminary: true with the move ratio reported but not scored. estimated_iv_crush_pct and estimated_iv_after_event come from the earnings expiration's surface rather than a fixed 40%. New signal NO_EARNINGS for names with no scheduled report and no history.
API 1.11
  • Hosted Claude connector documented: add https://apexvol.com/mcp-server as a custom connector in Claude (Settings → Connectors), sign in and approve: no install, no API token to paste. Use the apex form of the URL; www. fails the audience check. Approving creates a token labelled "Claude connector" on your account; revoke it under Account → API Access to disconnect.
  • The local apexvol-mcp client is now documented as the developer alternative rather than the only route.
API 1.10
  • Per-plan API access: every paid plan (Basic, Premium, Pro) now includes the API and MCP server. Each endpoint enforces the same plan tier as its web-app feature; the new access column names the plan an endpoint needs; utility endpoints (search, expirations, calendars) work on any plan.
  • New 403 payload upgrade_required with required_tier and your_tier when an endpoint sits above your plan.
API 1.9
  • Public launch: apexvol-mcp published to PyPI: install is now `pipx install apexvol-mcp` (git-URL installs retired).
  • Docs, OpenAPI 3.1 spec and the one-file Markdown reference are public; the Markdown reference now serves inline so it can be read in place.
  • Private-beta wording retired: API & MCP access is included with the Pro plan (rolling out to Pro accounts).
  • mcp_tools now enumerates the complete 43-tool registry per category.
API 1.8
  • New endpoint: POST /hedge-recommendations (delta-hedge suggestions with stock + option legs). Fixed the get_hedge_recommendations MCP tool, which previously called a non-existent endpoint; risk tools now accept structured JSON positions and their summaries read the correct response fields. Removed the unused server-to-server token endpoints POST /api/mcp/validate-token and POST /api/mcp/token-info (never called by the MCP client; validation happens inline on every /api/mcp/data request). GET /chain now defaults to 1 expiration and a 20-strikes-per-side window (was 3 full expirations); pass num_expirations / strikes_around=0 to widen; responses declare iv_units on IV analytics; rate-limit and monthly-budget headers (X-RateLimit-*, X-Monthly-Budget-Remaining, Retry-After) on all /api/mcp/data responses; 500s no longer echo internal exception text. Five new MCP tools (get_ticker_analytics, get_earnings_move_analysis, get_max_pain, get_volume_profile, get_zero_dte) now cover all 14 previously tool-less data endpoints; every /api/mcp/data endpoint is reachable from Claude. Ported from the platform: VRP timeseries + per-expiration endpoints, and the earnings-intelligence suite (earnings-verdict, seasonality, post-earnings-drift, iv-crush). /screen upgraded from 3 scans to the full 11-preset catalog with market-cap and earnings-proximity filters. Simulator ported to the public API: POST /simulate-chain (Black-Scholes chain what-if), POST /pop (probability of profit), and GET /chain-at-time/<ticker> (historical EOD chain snapshots) with matching MCP tools, 37 tools total. New GET /cores/<ticker> exposes the full 340+-field our institutional data feed cores row with field selection, plus a machine-readable OpenAPI 3.1 spec at /docs/api/openapi.json generated from these docs. Token hygiene: new tokens now expire after 1 year by default (expires_in_days on creation, 0 = never), and POST /api/account/api-tokens/<id>/rotate swaps a token for a fresh secret in one step. Final coverage batch: economic calendar, ticker search/validation, pairwise correlation compare, skew and HV-regime deep views, our institutional data feed monies surfaces (implied vs forecast), VIX snapshot, and market-wide relative-value scans: 59 endpoints, 43 MCP tools.
API 1.7
  • Docs clarity: token-handling guidance (pasting into your config/private setup chat is safe; only rotate if exposed publicly), index-symbol caveat (chain price is the forward, not spot; ~20–30pt skew on indices), and corrected the private-beta install to the git+ form (not yet on PyPI).
API 1.6
  • Added 6 MCP data endpoints completing analytics coverage: greeks-exposure, volume-profile, max-pain, correlation, hv-regimes, price-context.
API 1.5
  • Added 5 MCP data endpoints (skew, relative-value, zero-dte, dividend, borrow-rate); fixed term-structure, greeks-heatmap, earnings-history and mispricing-assessment; added captured Response samples to the MCP page.
API 1.4
  • Public documentation site launched: each analytics section now has its own crawlable page under /docs/api with curl, Python, and Claude/MCP examples. Internal sections remain in the gated reference.
API 1.3
  • Reference trimmed to the customer-facing analytics and MCP surface; internal platform and account-management endpoints are no longer listed. Removed retired fair-value and forward-vol endpoints.
API 1.2
  • Documentation moved from the .docx artifact to this page. MCP/API private beta: self-service token management added at Account → API Access (up to 3 active tokens, secret shown once); user tokens require the beta flag on the owning account. MCP build_strategy width parameter now accepts fractional dollar widths (e.g. 2.5).
API 1.1
  • options_chain feature key defined (Basic, API-only): /api/volume-profile and /api/max-pain are now live for Basic+ subscribers (previously returned 404 due to the undefined key). Feature-key map updated to 38 keys. MCP fixes: /api/mcp/* surfaces are now CSRF-exempt (Bearer/hash auth; POSTs previously failed with 400), and all six MCP POST endpoints (build/analyze/optimize-strategy, portfolio-greeks, scenario-analysis, stress-tests) had their request/response plumbing repaired and verified end-to-end.
API 1.0
  • Initial complete documentation: 46 API modules, ~240 routes, tiers & quotas, rate limits, error model, MCP integration (31 data endpoints, 29 Claude tools), full endpoint index.

Response shapes only ever gain fields inside a version; a renamed or removed field gets a new version and an entry here first. The site-wide changelog covers the terminal and the pages.

Included with
every paid plan.

From $55 a month, tier-matched: your token queries the data your plan includes and Pro unlocks the full surface.

Real market data, not a sandbox. See it live on AAPL.

7 days free, cancel anytime Card required · no charge for 7 days
Start trial →