更新日期: 2026 年 10 月 14 日
API 更新日志
OptionData 数据 API(市场结构、期权链、实时 WebSocket、历史 SQL)的请求、响应与接口契约变更记录。破坏性变更已标注。
34 条更新
- 变更历史 SQL破坏性尚未发布
试用历史 SQL:过去 7 天,每次响应最多 1,000 行
试用订阅现可查询滚动 7 天窗口(连续 168 小时,约五个交易日),每次响应最多返回 1,000 行(原为 10 行)。试用成功响应包含 meta.lookback_days: 7。
- 与付费订阅相同,窗口之外的成交会在连接与聚合前被排除。此前查询更早日期的试用查询现在只返回窗口内的成交。
- 试用响应的
meta.capped仍为 true。付费访问、15 分钟延迟与测试模式模拟样例不变。
- 新增通用尚未发布
403 SUBSCRIPTION_REQUIRED 说明原因及恢复权限的位置
期权链、市场结构与历史 SQL 接口在 HTTP 403 SUBSCRIPTION_REQUIRED 响应中新增 reason "NO_ACTIVE_SUBSCRIPTION" 与 billing_url "/billing"。期权链与市场结构将其放在 error 对象内;历史 SQL 将其与 errorCode、errorMsg 并列。
- 现有字段与状态码不变。
billing_url是 www.optiondata.io 上的路径,账户所有者可在该页面恢复 Pro 权限。
- 现有字段与状态码不变。
- 修复实时 WebSocket尚未发布
AGGREGATED 模式的 market_cap 与 updated_timestamp 以数字发送
AGGREGATED 模式下,实时流此前以 JSON 字符串发送 market_cap 与 updated_timestamp,现按字段说明以 JSON 数字发送。RAW 模式的 updated_timestamp 此前已为数字。
- 字段数值不变。使用数字解析转换这两个字段的客户端无需修改;将原始值按字符串处理的客户端需改为接受数字。
- 修复市场结构尚未发布
无法连接快照服务时返回可重试的 503
当市场结构接口对快照服务的请求在收到任何响应前失败时,返回 HTTP 503 与错误代码 UPSTREAM_UNAVAILABLE。此前这类请求返回 HTTP 500 与 INTERNAL_ERROR。
- 请稍后重试同一请求。快照服务超时或返回错误状态时,此前已返回 503。
- 修复通用2026 年 10 月 14 日
API 密钥无法及时验证时返回可重试的 503
当账户服务无法及时确认 API 密钥时,期权链、市场结构与历史 SQL 接口返回 HTTP 503、错误代码 UPSTREAM_UNAVAILABLE 以及 Retry-After 响应头。此前这类请求返回 HTTP 500 与 INTERNAL_ERROR。
- 请在 Retry-After 指定的秒数后重试同一请求。无效或已撤销的密钥仍返回 401 UNAUTHORIZED。
- 期权链使用 { error: { code, message } },历史 SQL 使用 errorCode;市场结构此前已在快照服务不可用时使用 UPSTREAM_UNAVAILABLE。
- 新增实时 WebSocket2026 年 10 月 8 日
实时流新增按到期日精确筛选
WebSocket 与 SSE 实时流新增 expiration_date 查询参数:一个或多个 YYYY-MM-DD 格式的到期日,以逗号分隔。现有参数保持不变。
- 当记录的
expiration_date等于所列日期之一时通过筛选。与expiry_days不同,该筛选不会随交易日推移而变化,因此 symbols、put_call、strike 与expiration_date组合可跟踪单个合约。 - 日期必须为 YYYY-MM-DD 格式;其他格式的值不会匹配任何记录。该参数在 AGGREGATED 与 RAW 模式下均可用。
- 当记录的
- 变更市场结构2026 年 10 月 8 日
市场结构字段与数据时效说明完善
API 参考文档与 OpenAPI schema 现补充 RV20/RV30、波动率元数据、到期日范围和各部分独立的数据时间说明。本次为文档更新,不改变响应行为。
- rv20 与 rv30 为基于 20 或 30 个有效交易日对数收益率计算的年化已实现波动率,使用小数表示。
rv_as_of标明计算包含的最近已完成交易日。这些字段为可选字段,较早快照可能不包含。 - 到期日范围以
meta.effective_date为基准,按日历天计算:zero_dte为 0 天,weekly 为 1–7 天,monthly 为 8–31 天,all 包含所有尚未到期的到期日。 - 请分别检查
meta.structure_as_of、meta.flow_as_of与meta.intraday_gex_as_of。结构价位随完整期权链快照更新;交易时段资金流与日内 GEX 通常约每五分钟更新一次。显式指定的 date 不会被替换为其他交易日。
- rv20 与 rv30 为基于 20 或 30 个有效交易日对数收益率计算的年化已实现波动率,使用小数表示。
- 变更期权链2026 年 10 月 8 日
期权链数据时效与日期语义说明完善
API 参考文档与快速入门现明确区分最新可用交易日、成交驱动的更新和单个合约的数据时效。本次为文档更新;响应字段及预期约 90 秒的更新间隔保持不变。
- 将响应视为当前数据前,请检查
meta.trading_date与meta.as_of。meta.as_of表示响应所包含的最新期权链快照时间或成交时间,并不保证所有合约均为最新。有较长时间未成交的合约可能保留较早的期权链数值。 - 显式指定的 date 选择该交易日已存储的期权链,不提供日内回放。行权价筛选值必须为正数;strike 不能与
strike_min或strike_max同时使用。
- 将响应视为当前数据前,请检查
- 修复期权链2026 年 10 月 2 日
买价与卖价由当日成交补全
bid 与 ask 现为该合约在当日交易时段最近一笔成交时记录的最优买价与卖价。此前多数合约没有报价,历史交易日完全没有。
- 适用于最新交易日及所有历史日期。当日没有成交的合约,两个字段仍返回 null。
- 报价来自合约最近一笔成交,若合约最后成交较早,则报价也较早。
- 变更期权链破坏性2026 年 10 月 2 日
无效日期与缺失期权链返回错误
无法返回期权链的请求现在返回错误,而不是返回其他交易日的数据或空的 200 响应。
- date 或
expiration_date中不存在的日历日期(如 2026-02-30)返回 400 INVALID_REQUEST。此前可能返回之后某个交易日的期权链。 - 没有已存储交易日的日期(周末、节假日、未来日期或超出保留期)返回 404 SNAPSHOT_NOT_FOUND;该交易日没有期权链的标的返回 404 SYMBOL_NOT_FOUND。
- 期权链存在但筛选条件没有匹配合约时,仍返回 200 与空的 data 数组。
- date 或
- 修复期权链破坏性2026 年 10 月 2 日
不可用的报价与希腊值返回 null
合约没有已存储报价时,bid 与 ask 返回 null 而非 0;没有模型值时,implied_volatility 与希腊值一同返回 null 而非 0。
- 对这些字段计算前请先处理 null。单个 0 值(例如 bid 为 0、ask 为正)仍是真实数值。
- 新增历史 SQL2026 年 10 月 2 日
历史 SQL 返回截断标记与错误码
成功响应包含 meta.truncated:查询结果超过 meta.row_limit 时为 true。所有错误响应现在都包含 errorCode。
meta.capped含义不变:表示适用试用行数上限,并不代表结果被截断。- 新增 errorCode:INVALID_REQUEST、INVALID_SQL、UNAUTHORIZED、SUBSCRIPTION_REQUIRED、RATE_LIMITED 与 METHOD_NOT_ALLOWED。
- 修复通用2026 年 10 月 2 日
不支持的 HTTP 方法返回 405
以错误的方法调用 HTTP 数据接口时返回 405 METHOD_NOT_ALLOWED 与 Allow 响应头,而不是网站首页。
- 适用于
/api/option-chain与/api/historical/sql(POST)以及/api/v1/market-structure/{symbol}(GET)。OPTIONS 返回 204 与 Allow 响应头。
- 适用于
- 变更期权链2026 年 10 月 1 日
最新期权链约每 90 秒更新一次
美股交易时段内,不带 date 的请求返回的期权链约每 90 秒刷新一次:有成交的合约会获得更新的报价、希腊值、隐含波动率、成交量、持仓量和最新价。
- 请求与响应结构不变。建议轮询间隔不短于 1–2 分钟,并在处理前比较
meta.as_of。
- 请求与响应结构不变。建议轮询间隔不短于 1–2 分钟,并在处理前比较
- 变更历史 SQL破坏性2026 年 9 月 12 日
付费历史 SQL 访问限制为过去 15 天
付费(active)订阅仅能查询过去 15 天的成交,即连续 360 小时,包含周末与节假日。现有 15 分钟延迟保持不变。
- 连接与聚合前会排除更早的成交。跨越边界的查询仅包含范围内的成交;仅查询更早成交的行查询不返回数据。
- 请将使用更早日期的查询更新为近期日期。付费成功响应包含
meta.lookback_days: 15。 - 试用访问、行数限制与测试模式模拟样例不变。
- 修复实时 WebSocket2026 年 8 月 19 日
连接数上限重试现已受到保护
当 API token 已有五条实时连接时,新的 WebSocket 或 SSE 握手现返回带 Retry-After 的 HTTP 429,已有连接保持打开。
- 请遵守 Retry-After 并使用指数退避后再重试。请关闭未使用的连接,使单个 token 保持在五条连接上限以内。
- 第六次握手请求到达时,服务端不再驱逐已有连接。
- 修复历史 SQL2026 年 8 月 15 日
数值溢出现返回可操作的查询错误
超出支持数值范围的历史 SQL 表达式现返回 HTTP 422、errorCode = INVALID_QUERY 和 reason = NUMERIC_OVERFLOW,而不再返回 HTTP 500。
- 请在乘法或聚合前转换定点数操作数;例如,计算权利金时可使用 SUM(toFloat64(price) * size * 100)。
- 响应仍会保护隐私,不会包含提交的 SQL 或数据库内部错误文本。
- 修复历史 SQL2026 年 8 月 13 日
无效的历史 SQL 现返回 INVALID_QUERY
包含未知字段、函数、别名或不兼容数据类型的查询现返回 HTTP 422 和 errorCode = INVALID_QUERY,而不再返回 HTTP 500。
- 响应现包含 UNKNOWN_IDENTIFIER 等安全的 reason 和可操作的 errorMsg,且不会暴露数据库内部错误文本。
- 重试前请先修正 SQL。可通过 errorCode 区分 INVALID_QUERY、QUERY_TOO_BROAD、QUERY_TIMEOUT 与 INTERNAL_ERROR。
- 新增通用2026 年 8 月 10 日
HTTP 数据 API 新增 Bearer 认证
历史 SQL 与期权链现支持通过 Authorization: Bearer 传递 API 密钥,与市场结构 API 保持一致。
- 请通过 Authorization: Bearer YOUR_API_KEY 传递在 OptionData Portal 中生成的 API 密钥。
- 未提供 Authorization 请求头时,仍可在 JSON 或表单请求体中使用
api_key字段,以保持向后兼容。 - 提供 Authorization 时,其优先级高于
api_key。使用不支持的认证方式或错误的请求头格式会返回 HTTP 401。
- 变更历史 SQL破坏性2026 年 8 月 10 日
稳定的历史 SQL 执行错误契约
历史 SQL 执行失败现返回一致的 HTTP 状态码、错误代码与消息。
- 扫描数据量过大的查询会返回 HTTP 422 和 errorCode = QUERY_TOO_BROAD。请缩小日期、标的或其他筛选范围后重试。
- 执行超时返回 HTTP 504,并使用 errorCode = QUERY_TIMEOUT。
- 其他意外执行失败返回 HTTP 500,并使用 errorCode = INTERNAL_ERROR。
- 修复期权链2026 年 8 月 10 日
修正期权链 as_of 时间戳
期权链 meta.as_of 现会正确返回响应中最新数据对应的 UTC 时间戳。
- 此前的时间值可能相差四至五小时。此修复会自动生效,客户端无需修改。
- 响应结构不变:
meta.as_of仍为可空的 UTC ISO 8601 字符串。
- 变更历史 SQL破坏性2026 年 8 月 10 日
强制至少延迟 15 分钟
历史 SQL 现在仅返回执行时间至少已过去 15 分钟的成交记录。
- 该时间边界适用于所有历史 SQL 查询,包括嵌套查询、联接与聚合。
- 在美东时间 10:00:00,最新可见执行时间为 09:45:00。数据可能延迟超过 15 分钟,但不会短于最低延迟。
- 成功响应元数据新增
meta.minimum_data_delay_minutes= 15,并返回对应的X-OptionData-Historical-Sql-Minimum-Data-Delay-Minutes响应头。 - 如需不受历史时间边界限制的当日实时成交,请使用实时 WebSocket API。
- 新增市场结构2026 年 7 月 27 日
盘中 GEX 汇总与更新时间
v1 响应新增可为空的五分钟完整期权链 GEX 汇总及其更新时间戳。
- 成功响应现包含 data.
intraday_gex: { spot,call_gex,put_gex} | null 与meta.intraday_gex_as_of: string | null。 - 常规交易时段内,资金流与盘中 GEX 可每五分钟刷新。GEX 包含零成交合约;资金流字段仍仅包含有成交的合约。
structure_as_of表示按行权价 GEX、关键墙位、Gamma Flip、Max Pain、OI 与到期日的最近计算时间。这些值不会随五分钟资金流更新而刷新。- 这是 v1 架构的增量变更;现有 structure 与 flow 字段含义保持不变。
- 成功响应现包含 data.
- 新增市场结构2026 年 7 月 24 日
市场结构 API 响应架构 v1
新增完整期权链标的快照 v1 成功与错误响应契约。
- 新增端点:GET
/api/v1/market-structure/:symbol。使用 Authorization: Bearer YOUR_API_KEY 认证;添加 date=YYYY-MM-DD 可读取保留的历史快照。 - 成功响应使用 { data: { symbol,
symbol_meta, structure, flow }, meta: {effective_date,structure_as_of,flow_as_of} }。 - 错误响应使用 { error: { code, message } }。稳定错误代码包括 INVALID_REQUEST、UNAUTHORIZED、SUBSCRIPTION_REQUIRED、SNAPSHOT_NOT_FOUND、SYMBOL_NOT_FOUND、RATE_LIMITED、UPSTREAM_UNAVAILABLE 和 INTERNAL_ERROR。
- data 与 meta 对象包括按行权价与到期日统计的看涨/看跌 GEX、GEX/OI 墙、按范围计算的 Gamma Flip 与 Max Pain,以及最新期权资金流指标。
- 标的元数据完整内嵌:标的类型、名称、交易所、板块、市值、股本、财报、价格、平均成交量、历史波动率、IV30、IV Rank/Percentile、偏斜、蝶式与期限斜率。
- 看跌 GEX 使用负号。净 GEX、总 GEX、看跌/看涨比率与 Gamma 状态可由行权价数据推导,因此不会在响应中重复存储。
- 新增端点:GET
- 变更期权链破坏性2026 年 7 月 9 日
精简期权链响应结构
破坏性变更:成功响应现在使用 { data, meta: { trading_date, as_of } },错误响应使用 { error: { code, message } }。
meta.trading_date表示响应对应的市场交易日。meta.as_of表示响应中最新的数据更新时间,格式为 UTC ISO 8601;时间不可用时可为 null。- 合约行移除了 symbol、
expiry_days和 mark。close 更名为last_price;strike 与expiration_date现在为非空字段。 - 响应中移除了 status、
api_version、beta、notice、entitlement、source、returned、filters 和 statistics,同时移除了test_mode请求参数。 - 错误响应现在提供稳定的 code 与 message。错误代码包括 INVALID_REQUEST、UNAUTHORIZED、SUBSCRIPTION_REQUIRED、REQUEST_TOO_BROAD、RATE_LIMITED、INTERNAL_ERROR 和 QUERY_TIMEOUT。
- 迁移方式:直接读取 data,不再检查 status === "SUCCESS";将
meta.date替换为meta.trading_date,并将 close 替换为last_price。 - 结果超过最大支持期权链大小的请求会返回 HTTP 422 和 REQUEST_TOO_BROAD,而不是返回部分数据。
- 变更历史 SQL2026 年 7 月 3 日
扩展历史 SQL 校验规则
不支持的多表与表函数查询形式现会返回校验错误。
- 不支持 FROM
table_a,table_b这类逗号分隔联接。 - 请直接使用文档中的表名,不要添加数据库前缀;指向其他数据库的引用会被拒绝。
- 不支持 url()、remote()、merge() 等表函数,也不支持 # 注释。
- 文档中的单表 SELECT 示例不受影响。
- 不支持 FROM
- 新增期权链2026 年 7 月 1 日
行权价筛选
期权链请求新增行权价筛选参数。
- 新增请求参数:strike 用于精确匹配,
strike_min与strike_max用于闭区间筛选。 - strike 不能与
strike_min或strike_max同时使用。 - 每个值均可使用数字;在表单编码请求中也可使用数字字符串。
- 新增请求参数:strike 用于精确匹配,
- 移除期权链破坏性2026 年 6 月 26 日
移除 limit 请求参数
API 不再接受客户端传入的 limit 参数。
- 请使用 date、
expiration_date、put_call、strike、strike_min或strike_max缩小标的请求范围。 - 自 2026 年 7 月 9 日起,超过最大响应大小的请求会返回错误,而不是部分数据。
- 请使用 date、
- 移除期权链破坏性2026 年 6 月 25 日
移除行权价与到期日区间参数
移除旧版行权价与到期日区间参数。
- 移除请求参数:
min_strike、max_strike、min_expiry_days与max_expiry_days。 - 行权价筛选于 2026 年 7 月 1 日通过 strike、
strike_min与strike_max恢复。
- 移除请求参数:
- 移除期权链破坏性2026 年 6 月 25 日
移除 flow 字段与 include_flow
响应中移除了可选的 flow 字段以及 include_flow 开关。
- 移除
include_flow请求参数,以及 premium、size、trade_count、latest_trade_price、latest_trade_time与vol_oi_ratio响应字段。 - 此次变更后,close 字段继续提供每份合约的最新成交价。
- 移除
- 变更通用破坏性2026 年 6 月 22 日
API 基础地址迁移至 www
API 规范主机名现为 www 子域名。
- 基础地址现为
https://www.optiondata.io;此前为https://optiondata.io。 - 请将
POST /api/historical/sql与POST /api/option-chain请求更新为新的基础地址。
- 基础地址现为
- 新增期权链2026 年 6 月 21 日
响应中新增 Beta 元数据
每个期权链响应现在都会标注其 Beta 状态。
- 响应包含
meta.api_version="v1"、meta.beta= true 与meta.notice。 - 响应同时包含
X-OptionData-Option-Chain-Beta: true。 - 这些 Beta 字段随后在 2026 年 7 月 9 日的响应架构变更中移除。
- 响应包含
- 修复实时 WebSocket2026 年 3 月 5 日
修正文档中的情绪筛选值
文档中的中性情绪筛选值为 NEUTRAL。
- 请使用
NEUTRAL;此前文档曾将该值误写为NEUTRUAL。
- 请使用
- 移除实时 WebSocket破坏性2026 年 2 月 24 日
移除实时逐笔字段
实时逐笔交易消息中移除了若干字段。
- 移除字段:
bid_size、ask_size、vega、theta、rho 与 exchange。
- 移除字段:
本日志仅记录数据 API 的架构与接口变更。产品、账单与平台更新请查看博客。