Last updated: Jul 24, 2026
API Changelog
Schema and contract changes to the OptionData data APIs — Market Structure, Option Chain, Realtime WebSocket, and Historical SQL. Breaking changes are marked.
For the current request/response schema, see each product page: Option Chain · Market Structure · Historical SQL · Realtime
- AddedMarket StructureJul 24, 2026
Market Structure API v1
Added a canonical full-chain symbol snapshot for GEX, Gamma Flip, Max Pain, volatility context, and strategy analysis.
- New endpoint: GET
/api/v1/market-structure/:symbol. Authenticate with Authorization: Bearer YOUR_API_KEY; add date=YYYY-MM-DD for a retained historical snapshot. - The self-contained data/meta response includes exact-root call/put GEX by strike and expiration, GEX/OI walls, Gamma Flip and Max Pain by scope, plus the latest traded-flow overlay.
- Symbol metadata is self-contained: underlying type, description, exchange, sector, market cap, shares, earnings, prices, average volume, historical volatility, IV30, IV Rank/Percentile, skew, butterfly, and term slope.
- Put GEX is signed negative. Net GEX, gross GEX, put/call ratios, and gamma regime are intentionally derivable from the strike data rather than duplicated in the payload.
- New endpoint: GET
- ChangedOption ChainBreakingJul 9, 2026
Option Chain response schema simplified
Breaking change: successful responses now use { data, meta: { trading_date, as_of } }, while errors use { error: { code, message } }.
meta.trading_dateis the returned market session.meta.as_ofis the latest data update represented in the response, formatted as a UTC ISO 8601 timestamp; it can be null when unavailable.- Contract rows removed symbol,
expiry_daysand mark. close was renamed tolast_price; strike andexpiration_dateare now non-null fields. - Removed response fields status,
api_version, beta, notice, entitlement, source, returned, filters and statistics. Thetest_moderequest parameter was also removed from the production endpoint. - Errors now provide a stable code and message. Codes include INVALID_REQUEST, UNAUTHORIZED, SUBSCRIPTION_REQUIRED, REQUEST_TOO_BROAD, RATE_LIMITED, INTERNAL_ERROR and QUERY_TIMEOUT.
- Migration: read data directly instead of checking status === "SUCCESS"; replace
meta.datewithmeta.trading_date, and replace close withlast_price. - Requests that exceed the full-chain response guardrail return HTTP 422 with REQUEST_TOO_BROAD instead of partial data.
- ChangedHistorical SQLJul 3, 2026
Query guardrails hardened
The historical SQL validator now rejects additional query shapes that previously slipped past the table whitelist.
- Comma-separated (implicit cross) joins such as FROM RawOptionTrades, other are now rejected.
- Database-qualified table names are rejected unless the database matches the configured
CLICKHOUSE_DATABASE. - Table-function bypasses (e.g. url(), remote(), merge()) are blocked; # comments are detected anywhere in the query.
- Whitelisted single-table SELECTs (the documented examples) are unaffected.
- AddedOption ChainJul 1, 2026
Strike price filters
Added strike filtering to the Option Chain request.
- New request params: strike (exact match),
strike_minandstrike_max(inclusive range). - strike cannot be combined with
strike_min/strike_max. - Values accept a number or a numeric string (form-encoded bodies).
- New request params: strike (exact match),
- RemovedOption ChainBreakingJun 26, 2026
Removed the limit request parameter
The API no longer accepts a client-supplied limit parameter.
- Use symbol, expiration, put/call, or strike filters to scope a request.
- Superseded on 2026-07-09: oversized broad requests now return an error instead of partial data.
- RemovedOption ChainBreakingJun 25, 2026
Removed strike/expiry range params
Removed the older strike and expiry range parameters.
- Removed request params:
min_strike,max_strike,min_expiry_days,max_expiry_days. - Strike filtering was later reintroduced in a simpler form on 2026-07-01 (strike /
strike_min/strike_max).
- Removed request params:
- RemovedOption ChainBreakingJun 25, 2026
Removed flow fields and include_flow
The optional flow fields and the include_flow toggle were removed from the response.
- Removed the
include_flowrequest param and its six flow response fields (premium,vol_oi_ratio, and four others). - close and
latest_trade_pricewere consolidated —latest_trade_pricepreviously appeared only withinclude_flow=true.
- Removed the
- ChangedGeneralBreakingJun 22, 2026
API base URL moved to www
The canonical API host is now the www subdomain.
- Base URL is now
https://www.optiondata.io(previouslyhttps://optiondata.io). - Update the endpoints for
POST /api/historical/sqlandPOST /api/option-chain.
- Base URL is now
- AddedOption ChainJun 21, 2026
Beta metadata in responses
Every Option Chain response now advertises its beta status.
- Responses include
meta.api_version("v1"),meta.beta(true), andmeta.notice. - A response header
X-OptionData-Option-Chain-Beta: true is sent. - The Option Chain API is in BETA — request/response fields and semantics may change.
- Responses include
- ChangedOption ChainJun 14, 2026
New source mart; schema simplified
Option Chain now queries a more compact execution-side mart.
- Switched from the legacy
mv_contract_day_flow(now retired) tomv_contract_rank_flow. - Fixes prior 500 errors where a day of rows exceeded the
max_rows_to_readscan cap.
- Switched from the legacy
- FixedRealtime WebSocketMar 5, 2026
Sentiment filter value corrected
Fixed a typo in the realtime sentiment filter value.
- The sentiment filter value
NEUTRUALwas corrected toNEUTRAL.
- The sentiment filter value
- RemovedRealtime WebSocketBreakingFeb 24, 2026
Removed realtime trade-data fields
Several fields were dropped from real-time trade messages.
- Removed fields:
bid_size,ask_size, vega, theta, rho, exchange.
- Removed fields:
This changelog covers data-API schema and contract changes. For product, billing, and platform updates, see the blog.