加密期权数据 API
跨多个交易所聚合的 BTC 与 ETH 期权市场数据:持仓量、成交量、看跌/看涨比率、最大痛点、隐含波动率与希腊值。一个 REST API 和一个 MCP 服务器,无需逐个拉取交易所数据并自行换算口径。
比特币和以太坊的看涨与看跌合约,跨多个交易所聚合,统一以美元计并按同一约定重新计算。十七条路由回答同一个问题:市场把风险放在哪里,以什么价格。
#面向 AI 智能体与 LLM 的加密期权数据
“BTC 周五到期的最大痛点在哪里?”“ETH 隐含波动率在上升吗?”“看跌/看涨比说明了什么?”:AI 智能体通过 MCP 工具 get_options_data 用本数据族作答,该工具接收资产而非交易对。
{
"name": "get_options_data",
"arguments": {
"asset": "BTC",
"fields": ["options_summary", "options_put_call_ratio", "options_iv"]
}
}- 给 LLM 的提示:最大痛点是统计意义上的重心,而非预测;这里只有 BTC 和 ETH 有期权:
BTCUSDT会被拒绝,资产应写BTC。 - 给开发者:
/v1/options/summary让使用 tool calling 的 AI 智能体一次请求就看到一个资产的全貌;MCP 工具还可通过expiries返回各到期日的数据。 - 适用环境:Claude、ChatGPT、Cursor 及任何 MCP 客户端,包括支持 MCP 的 AI 智能体框架,如 LangChain 或 n8n。
通过 MCP 服务器指南接入你的 AI 智能体,或用开源的 Agent Skills 教它使用 BytNode。
#基本原则
该市场数据族有三点不同于其他市场数据族。
- 仅两种资产:比特币和以太坊。其他资产上,这个市场缺乏深度。
- 通过
?asset=指定(必填),只填资产(BTC或ETH),而不是?symbol=。传入BTCUSDT或不传资产,都会返回 422。 - 希腊值会重新计算,采用统一约定,而不是直接取自各交易所:各交易所的符号和约定差异太大,无法直接相加。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
asset | string | 必填 | BTC 或 ETH。必填:缺少时返回 422。 |
timeframe | string | 接受时必填 | 所有 /history 路由以及 /v1/options/iv/klines、/v1/options/oi/change:5m、15m、30m、1h、4h、1d(本市场数据族不提供 1m);在 /v1/options/oi/change 上为变化的窗口。其他最新值路由(summary、oi、volume、iv、put-call-ratio、greeks、expiry、max-pain、oi/distribution)不接受该参数。 |
limit | integer | 100 | 用于 /history 接口。 |
expiry | string | — | 在 /v1/options/max-pain/history 上为必填,在 /v1/options/oi/distribution 上为可选筛选。可传日期(2026-10-30),或按返回形式传入到期日的日期时间。 |
since_ms / until_ms | integer | — | 带日期的窗口,该市场数据族的历史接口均支持。 |
#概览
此接口的全部 19 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
underlying_price_usd | USD | Index (spot) price of the underlying, from the options venues. Each expiry's ATM strike and greeks use that expiry's own forward price. Not the latest trade price: that is the `price` of `/v1/price-change`, i.e. the close of `/v1/klines?live=1`. |
oi_total_usd | USD | Total open interest, USD. |
oi_call_usd | USD | Call open interest, USD. |
oi_put_usd | USD | Put open interest, USD. |
volume_total_usd | USD | Total traded volume, USD. |
volume_call_usd | USD | Call volume, USD. |
volume_put_usd | USD | Put volume, USD. |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
put_call_label | `bullish` (put_call_ratio < 0.7), `neutral`, or `bearish` (put_call_ratio > 1). | |
iv_atm_30d_pct | percent (58.5 = 58.5 %) | At-the-money implied volatility at a constant 30-day maturity, annualised, in percent (55.2 = 55.2 %). Interpolated in total variance (IV² × time) between the two expiries around 30 days, so it does not jump when the nearest expiry rolls off; the ATM IV of each expiry is on `/v1/options/expiry`. |
nearest_expiry | The next expiry: its instant, the time left, max pain, put/call ratio, ATM IV. | |
nearest_expiry.expiry_at | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Expiry instant (08:00 UTC). Pass its date part (`YYYY-MM-DD`) as the `expiry` parameter. |
nearest_expiry.time_to_expiry_s | seconds | Time left before expiry, in seconds. |
nearest_expiry.max_pain_strike_usd | USD | Strike at which option holders lose the most at expiry (max pain). |
nearest_expiry.put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
nearest_expiry.iv_atm_pct | percent (58.5 = 58.5 %) | At-the-money implied volatility of THIS expiry, annualised, in percent (55.2 = 55.2 %). |
coverage | `oi_coverage_ratio`: share of the open interest covered by the venues that answered (1.0 = all). | |
coverage.oi_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the open interest covered by the contributing venues. |
一次调用获取全貌:持仓、成交量、看跌/看涨比、平值隐含波动率,以及最近到期日的详情。
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
"https://api.bytnode.com/v1/options/summary?asset=BTC"| 字段 | 类型 | 说明 |
|---|---|---|
asset (envelope) | string | BTC 或 ETH。 |
underlying_price_usd | float | 标的资产的指数(现货)价格。每个到期日的平值行权价和希腊值使用该到期日自身的远期价格。 |
oi_total_usd, oi_call_usd, oi_put_usd | float | 以美元计的持仓:总计、看涨、看跌。 |
volume_total_usd, volume_call_usd, volume_put_usd | float | 以美元计的成交额,分项相同。 |
put_call_ratio | float | 看跌与看涨之比。 |
put_call_label | string | 对该比率的定性解读。 |
iv_atm_30d_pct | float | 插值到 30 天的平值隐含波动率,以百分比表示(48.2 = 48.2%)。 |
nearest_expiry | object | 最近的到期日:日期、剩余天数、最大痛点,以及其自身的看跌/看涨比和波动率。 |
coverage | object | oi_coverage_ratio:被聚合的交易所所代表的持仓量占比,取值 0 到 1 的小数。 |
#持仓量与成交量
此接口的全部 8 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
oi_total_usd | USD | Total open interest, USD. |
oi_call_usd | USD | Call open interest, USD. |
oi_put_usd | USD | Put open interest, USD. |
oi_call | base asset quantity (BTC for BTCUSDT) | Call open interest, in coins (base asset). |
oi_put | base asset quantity (BTC for BTCUSDT) | Put open interest, in coins (base asset). |
coverage | `oi_coverage_ratio`: share of the open interest covered by the venues that answered (1.0 = all). | |
coverage.oi_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the open interest covered by the contributing venues. |
此接口的全部 7 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket; the value is the LAST options snapshot of the bucket. |
oi_total_usd | USD | Total open interest, USD. |
oi_call_usd | USD | Call open interest, USD. |
oi_put_usd | USD | Put open interest, USD. |
oi_call | base asset quantity (BTC for BTCUSDT) | Call open interest, in coins (base asset). |
oi_put | base asset quantity (BTC for BTCUSDT) | Put open interest, in coins (base asset). |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
持仓量,以资产单位和美元表示,按看涨和看跌拆分。
此接口的全部 6 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
window_start_at | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Instant of the reference snapshot: the latest one at least `timeframe` before `time`. |
window_s | seconds | Actual distance between the two snapshots, in whole seconds (`timeframe` or a little more: snapshots arrive every minute). |
oi_change_call_usd | USD | Change of call open interest from `window_start_at` to `time`, USD. |
oi_change_put_usd | USD | Change of put open interest from `window_start_at` to `time`, USD. |
oi_change_total_usd | USD | Change of total open interest from `window_start_at` to `time`, USD. |
此接口的全部 5 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket; the value is the LAST options snapshot of the bucket. |
oi_change_call_usd | USD | Change of call open interest from `window_start_at` to `time`, USD. |
oi_change_put_usd | USD | Change of put open interest from `window_start_at` to `time`, USD. |
oi_change_total_usd | USD | Change of total open interest from `window_start_at` to `time`, USD. |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
窗口内的变化,按需计算:最后一个值减去第一个值。每行带有 oi_change_call_usd 和 oi_change_put_usd。
此接口的全部 5 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
expiry_at | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Expiry instant (08:00 UTC). Pass its date part (`YYYY-MM-DD`) as the `expiry` parameter. |
strike_usd | USD | Strike price. |
oi_call_usd | USD | Call open interest at this strike, USD. `null` = no call listed. |
oi_put_usd | USD | Put open interest at this strike, USD. `null` = no put listed. |
持仓量按行权价和到期日的分布。它是市场真正投入资金的价位地图:标的必须穿越的行权价墙。
此接口的全部 6 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
volume_total_usd | USD | Total traded volume, USD. |
volume_call_usd | USD | Call volume, USD. |
volume_put_usd | USD | Put volume, USD. |
coverage | `oi_coverage_ratio`: share of the open interest covered by the venues that answered (1.0 = all). | |
coverage.oi_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the open interest covered by the contributing venues. |
此接口的全部 5 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket; the value is the LAST options snapshot of the bucket. |
volume_total_usd | USD | Total traded volume, USD. |
volume_call_usd | USD | Call volume, USD. |
volume_put_usd | USD | Put volume, USD. |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
#看跌/看涨比与最大痛点
此接口的全部 3 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
put_call_label | `bullish` (put_call_ratio < 0.7), `neutral`, or `bearish` (put_call_ratio > 1). |
此接口的全部 4 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket; the value is the LAST options snapshot of the bucket. |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
put_call_label | `bullish` (put_call_ratio < 0.7), `neutral`, or `bearish` (put_call_ratio > 1). | |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
看跌与看涨之比,按持仓量和成交量分别计算。低于 1 时看涨占优;高于 1 时下行对冲占上风。
此接口的全部 7 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
expiry_at | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Expiry instant (08:00 UTC). Pass its date part (`YYYY-MM-DD`) as the `expiry` parameter. |
time_to_expiry_s | seconds | Time left before expiry, in seconds. |
max_pain_strike_usd | USD | Strike at which option holders lose the most at expiry (max pain). |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
oi_call_usd | USD | Call open interest, USD. |
oi_put_usd | USD | Put open interest, USD. |
此接口的全部 4 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | The instant of the options snapshot the max pain was computed on (one row per snapshot, about every minute; no `timeframe`). |
max_pain_strike_usd | USD | Strike at which option holders lose the most at expiry (max pain). |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
max pain 历史针对的是单个到期日:因此 expiry 为必填。可以按 /v1/options/max-pain 或 /v1/options/expiry 返回的形式传入(2026-10-01T08:00:00.000Z),也可以只传日期(2026-10-01):两者指同一个到期日。缺失时,请求返回 422 missing_parameter,错误信息会列出该资产的有效到期日。
什么是最大痛点
使到期合约总价值最低的行权价,也就是看涨与看跌买方亏损最多的价位。它是统计上的重心,而不是预测:其价值在于说明现有仓位在哪个价位形成张力。
#隐含波动率
此接口的全部 2 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
iv_atm_30d_pct | percent (58.5 = 58.5 %) | At-the-money implied volatility at a constant 30-day maturity, annualised, in percent (55.2 = 55.2 %). Interpolated in total variance (IV² × time) between the two expiries around 30 days, so it does not jump when the nearest expiry rolls off; the ATM IV of each expiry is on `/v1/options/expiry`. |
30 天恒定期限的平值隐含波动率,以百分比表示(iv_atm_30d_pct):在 30 天前后的两个到期日之间按总方差插值,因此最近到期日到期时不会跳变。它衡量市场为对冲支付了多少,与方向无关。每个到期日的平值波动率见 /v1/options/expiry。
此接口的全部 6 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the latest CLOSED bucket; the candle summarises its options snapshots. |
open_pct | percent (58.5 = 58.5 %) | 30-day ATM IV at the start of the bucket. |
high_pct | percent (58.5 = 58.5 %) | Highest 30-day ATM IV. |
low_pct | percent (58.5 = 58.5 %) | Lowest 30-day ATM IV. |
close_pct | percent (58.5 = 58.5 %) | 30-day ATM IV at the end of the bucket. |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
同一波动率,以按需生成的 OHLC K 线呈现,同样以百分比表示。每行带有 time、open、high、low、close。足以像绘制价格一样绘制波动率。与该市场数据族的所有历史接口一样,只提供已收盘的 K 线:进行中的那根从不出现。
#希腊值与到期日
此接口的全部 7 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
delta | delta | Aggregated delta of open options, OI-weighted (per unit of underlying). |
gamma | delta per USD | Change of delta for a 1 USD move of the underlying, OI-weighted. |
theta | USD per day | Time decay per day, OI-weighted. |
vega | USD per volatility point | Value change for +1 point of implied volatility, OI-weighted. |
coverage | `oi_coverage_ratio`: share of the open interest covered by the venues that answered (1.0 = all). | |
coverage.oi_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the open interest covered by the contributing venues. |
按持仓量加权聚合的 Delta、Gamma、Vega 和 Theta。它们按统一约定重新计算,因此可以跨交易所相加,而各交易所自行公布的数值做不到这一点。
此接口的全部 11 个字段(取自接口契约)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Point-in-time value: the instant of the options snapshot (all venues read together). |
expiry_at | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Expiry instant (08:00 UTC). Pass its date part (`YYYY-MM-DD`) as the `expiry` parameter. |
time_to_expiry_s | seconds | Time left before expiry, in seconds. |
oi_call_usd | USD | Call open interest, USD. |
oi_put_usd | USD | Put open interest, USD. |
put_call_ratio | puts / calls | Put/call open interest ratio (a quotient, not a share: 1.2 = 1.2 puts per call). Below 1 = more calls than puts. |
max_pain_strike_usd | USD | Strike at which option holders lose the most at expiry (max pain). |
top_call_strike_usd | USD | Strike with the largest call open interest. |
top_put_strike_usd | USD | Strike with the largest put open interest. |
iv_atm_pct | percent (58.5 = 58.5 %) | At-the-money implied volatility of THIS expiry, annualised, in percent (55.2 = 55.2 %). |
put_call_label | `bullish` (put_call_ratio < 0.7), `neutral`, or `bearish` (put_call_ratio > 1). |
按到期日汇总:每个日期的持仓、看跌/看涨比、最大痛点和波动率。在大额到期之前应查看此视图,因为届时仓位了结会对标的产生影响。