Skip to content

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

  1. 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.
  2. 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_date is the returned market session. meta.as_of is 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_days and mark. close was renamed to last_price; strike and expiration_date are now non-null fields.
    • Removed response fields status, api_version, beta, notice, entitlement, source, returned, filters and statistics. The test_mode request 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.date with meta.trading_date, and replace close with last_price.
    • Requests that exceed the full-chain response guardrail return HTTP 422 with REQUEST_TOO_BROAD instead of partial data.
  3. 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.
  4. AddedOption ChainJul 1, 2026

    Strike price filters

    Added strike filtering to the Option Chain request.

    • New request params: strike (exact match), strike_min and strike_max (inclusive range).
    • strike cannot be combined with strike_min / strike_max.
    • Values accept a number or a numeric string (form-encoded bodies).
  5. 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.
  6. 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).
  7. 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_flow request param and its six flow response fields (premium, vol_oi_ratio, and four others).
    • close and latest_trade_price were consolidated — latest_trade_price previously appeared only with include_flow=true.
  8. 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 (previously https://optiondata.io).
    • Update the endpoints for POST /api/historical/sql and POST /api/option-chain.
  9. 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), and meta.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.
  10. 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) to mv_contract_rank_flow.
    • Fixes prior 500 errors where a day of rows exceeded the max_rows_to_read scan cap.
  11. FixedRealtime WebSocketMar 5, 2026

    Sentiment filter value corrected

    Fixed a typo in the realtime sentiment filter value.

    • The sentiment filter value NEUTRUAL was corrected to NEUTRAL.
  12. 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.

This changelog covers data-API schema and contract changes. For product, billing, and platform updates, see the blog.