市场数据

加密订单流 API

追踪全市场的买卖压力:CVD、聚合订单簿、买卖比与平均成交规模。资金流数据已在所有覆盖的交易所间统一,您看到的是一个完整市场,无需逐个拼接订单簿。

订单簿和订单流所揭示的力量对比。四个市场数据族:累计成交量差、聚合深度、方向性压力和爆仓区域。

#面向 AI 智能体与 LLM 的加密订单流数据

“BTC 现在由买方还是卖方主导?”“CVD 与价格背离了吗?”“ETH 的订单簿买盘更厚还是卖盘更厚?”:AI 智能体通过 MCP 工具 get_pair_data 读取订单流,可选现货、永续或两者。

MCP tools/call
一次 MCP 调用获取 BTC 十二小时、15 分钟粒度的订单流。
{
  "name": "get_pair_data",
  "arguments": {
    "symbol": "BTCUSDT",
    "fields": ["cvd", "buy_sell_ratio", "orderbook"],
    "timeframe": "15m",
    "limit": 48
  }
}
  • 给 LLM 的提示:CVD 是累计值,其绝对水平本身没有意义;窗口内的斜率才说明是谁在推动价格。
  • 给开发者:/v1/cvd 与 /v1/orderbook 很适合作为你自己 AI 智能体的工具(tool calling);通过 MCP,工具会把你指定的市场映射到对应的接口。
  • 适用环境:Claude、ChatGPT、Cursor 及任何 MCP 客户端,包括支持 MCP 的 AI 智能体框架,如 LangChain 或 n8n。

通过 MCP 服务器指南接入你的 AI 智能体,或用开源的 Agent Skills 教它使用 BytNode。

#CVD

GET/v1/cvddata_type · cvd完整参考
此接口的全部 9 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket the row covers: a 1h bucket at 14:00 covers 14:00:00 to 14:59:59.999.
cvd_seriesbase asset quantity (BTC for BTCUSDT)Cumulative volume delta inside the bucket, one point per step of finer candles (1 minute up to `1h`, 5 minutes in `4h`, 15 minutes in `1d`), starting from 0 at the bucket start. `null` when those finer candles do not cover the bucket (before 2026-06-05; in `1d`, before 2023-12; or a collection gap): `buy_volume`, `sell_volume` and `net_volume` then come from the bucket's own candle, as on `/v1/trades-kline`, and `sample_count` is 1.
net_volumebase asset quantity (BTC for BTCUSDT)buy_volume - sell_volume over the row, base asset units. Positive = net buying.
buy_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) buy volume, base asset units, aggregated across venues.
sell_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) sell volume, base asset units, aggregated across venues.
sample_countcountNumber of points in `cvd_series`; 1 when `cvd_series` is `null` (the bucket's candle alone).
buy_sell_coverage_ratiofraction (0.585 = 58.5 %)Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
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.
GET/v1/cvd/historydata_type · cvd_history完整参考
此接口的全部 9 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket the row covers: a 1h bucket at 14:00 covers 14:00:00 to 14:59:59.999.
cvd_seriesbase asset quantity (BTC for BTCUSDT)Cumulative volume delta inside the bucket, one point per step of finer candles (1 minute up to `1h`, 5 minutes in `4h`, 15 minutes in `1d`), starting from 0 at the bucket start. `null` when those finer candles do not cover the bucket (before 2026-06-05; in `1d`, before 2023-12; or a collection gap): `buy_volume`, `sell_volume` and `net_volume` then come from the bucket's own candle, as on `/v1/trades-kline`, and `sample_count` is 1.
net_volumebase asset quantity (BTC for BTCUSDT)buy_volume - sell_volume over the row, base asset units. Positive = net buying.
buy_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) buy volume, base asset units, aggregated across venues.
sell_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) sell volume, base asset units, aggregated across venues.
sample_countcountNumber of points in `cvd_series`; 1 when `cvd_series` is `null` (the bucket's candle alone).
buy_sell_coverage_ratiofraction (0.585 = 58.5 %)Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
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.
GET/v1/cvd/spotdata_type · cvd_spot完整参考
GET/v1/cvd/spot/historydata_type · cvd_spot_history完整参考
GET/v1/cvd/futuresdata_type · cvd_futures完整参考
GET/v1/cvd/futures/historydata_type · cvd_futures_history完整参考

累计成交量差:市价买入量减去市价卖出量的累计值。它衡量买方和卖方中是谁不得不吃掉订单簿,也就是谁在真正推动价格。

CVD、买卖比、平均成交规模和订单簿的市场写在路径中:不带后缀 = 所有市场(现货 + 永续合约),/spot、/futures(/v1/cvd、/v1/cvd/spot、/v1/cvd/futures,/history 同理);响应外层的 market 会重复说明。现货数量自 2026-09-27 起才有实测值:在此之前,现货和全市场下的买卖成交量由美元金额估算,并标记为 is_volume_estimated: true。/futures 提供完整的合约历史。

参数类型默认值说明
symbolstring必填资产。
timeframestring必填1m、5m、15m、30m、1h、4h、1d。
livebooleanfalse返回进行中的窗口。
since_ms / until_msinteger—仅用于历史接口。
limitinteger100用于历史接口,1 到 1000。
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
  "https://api.bytnode.com/v1/cvd?symbol=BTCUSDT&timeframe=1h"
字段类型说明
timestring窗口起始时间。
cvd_seriesfloat[]窗口内的累计序列,每个内部步长一个点,从旧到新。信息蕴含在其斜率中。
net_volumefloat整个窗口内的买入减卖出。
buy_volume / sell_volumefloat构成差值的两个成交量。
sample_countinteger序列中的点数。
is_volume_estimatedboolean当该行的现货数量由其美元金额估算时为 true(2026-09-27 之前的现货数据)。
is_closedboolean仅在 live=1 时为假。

#订单簿

GET/v1/orderbookdata_type · orderbook完整参考
此接口的全部 9 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket; the depth is the photo of the order book 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.
rangesOne entry per price range around the mid price, from the tightest (±0.25 %) to the widest (±10 %). Each range is cumulative: ±1 % includes everything inside ±0.5 %.
ranges.range_pctpercent (58.5 = 58.5 %)Half-width of the range around each venue's mid price ((best bid + best ask) / 2): `1.0` = bids down to -1 % and asks up to +1 %.
ranges.bids_quantitybase asset quantity (BTC for BTCUSDT)Resting BUY orders inside the range (price >= mid × (1 - range_pct/100)), summed across venues. `null` = no venue publishes its book that deep.
ranges.asks_quantitybase asset quantity (BTC for BTCUSDT)Resting SELL orders inside the range (price <= mid × (1 + range_pct/100)), summed across venues. `null` = not measured.
ranges.bids_usdUSDUSD value (Σ price × quantity) of the buy orders inside the range.
ranges.asks_usdUSDUSD value (Σ price × quantity) of the sell orders inside the range.
ranges.imbalance_ratiofraction from -1 to 1(bids_usd - asks_usd) / (bids_usd + asks_usd). Positive = more bids than asks. `null` when one side is not measured.
GET/v1/orderbook/spotdata_type · orderbook_spot完整参考
GET/v1/orderbook/futuresdata_type · orderbook_futures完整参考

所请求 timeframe 下订单簿最近一张已收盘的快照(1m = 最近一个已收盘的分钟),跨交易所求和,按价格区间统计:距中间价 ±0.25%、0.5%、0.75%、1%、2%、3%、5% 和 10% 范围内挂出的流动性。/v1/orderbook 汇总现货与永续合约订单簿;/v1/orderbook/spot 和 /v1/orderbook/futures 只给单一市场。

字段类型说明
timestring所拍摄分钟的起点;数值为该分钟结束时的订单簿。
is_closedboolean始终为 true:返回的每张快照都是最终值。
rangesarray每个价格区间一项,从最窄到最宽。
range_pct / bids_quantity / asks_quantity / bids_usd / asks_usd / imbalance_ratiofloat | null每个区间:其宽度(百分比)、两侧挂单数量(基础资产)、对应的美元金额,以及 imbalance_ratio = (bids_usd − asks_usd) / (bids_usd + asks_usd),取值 −1 到 1,买方占优时为正。没有任何交易所测得该区间时为 null。
GET/v1/orderbook/historydata_type · orderbook_history完整参考
此接口的全部 9 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket; the depth is the photo of the order book 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.
rangesOne entry per price range around the mid price, from the tightest (±0.25 %) to the widest (±10 %). Each range is cumulative: ±1 % includes everything inside ±0.5 %.
ranges.range_pctpercent (58.5 = 58.5 %)Half-width of the range around each venue's mid price ((best bid + best ask) / 2): `1.0` = bids down to -1 % and asks up to +1 %.
ranges.bids_quantitybase asset quantity (BTC for BTCUSDT)Resting BUY orders inside the range (price >= mid × (1 - range_pct/100)), summed across venues. `null` = no venue publishes its book that deep.
ranges.asks_quantitybase asset quantity (BTC for BTCUSDT)Resting SELL orders inside the range (price <= mid × (1 + range_pct/100)), summed across venues. `null` = not measured.
ranges.bids_usdUSDUSD value (Σ price × quantity) of the buy orders inside the range.
ranges.asks_usdUSDUSD value (Σ price × quantity) of the sell orders inside the range.
ranges.imbalance_ratiofraction from -1 to 1(bids_usd - asks_usd) / (bids_usd + asks_usd). Positive = more bids than asks. `null` when one side is not measured.
GET/v1/orderbook/spot/historydata_type · orderbook_spot_history完整参考
GET/v1/orderbook/futures/historydata_type · orderbook_futures_history完整参考

按 bucket 的同一快照(最新值与历史接口均须传 timeframe):每个 bucket 结束时的订单簿——是快照,而非平均值。每一行都是最终值,因此不接受 live。

字段类型说明
timestringbucket 的起点;数值为其结束时的订单簿。
rangesarray与上文相同的价格区间。
is_closedboolean始终为真:区间只在关闭后才提供(订单簿不接受 live)。

#方向性压力

与 /v1/cvd 一样,这些路由必须提供 timeframe(1m 至 1d),其最新值为最近一个已收盘的分桶——即相同 timeframe 下 /history 的第一行。市场体现在路径中:无后缀 = 现货 + 合约,/spot,/futures。

GET/v1/buy-sell-ratiodata_type · buy_sell_ratio完整参考
此接口的全部 8 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the latest closed bucket of `timeframe` — the first row of `/v1/buy-sell-ratio/history` for the same `timeframe`.
buy_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) buy volume, base asset units, aggregated across venues.
sell_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) sell volume, base asset units, aggregated across venues.
buy_ratiofraction (0.585 = 58.5 %)buy_volume / (buy_volume + sell_volume). Above 0.5 = buyers dominate.
sample_countcountNumber of points of the CVD series behind the bucket — the `sample_count` of `/v1/cvd` for the same bucket.
buy_sell_coverage_ratiofraction (0.585 = 58.5 %)Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
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.
GET/v1/buy-sell-ratio/historydata_type · buy_sell_ratio_history完整参考
此接口的全部 8 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket. The row covers the WHOLE bucket, from `time` to `time` + the envelope's `step` (excluded).
buy_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) buy volume, base asset units, aggregated across venues.
sell_volumebase asset quantity (BTC for BTCUSDT)Aggressive (taker) sell volume, base asset units, aggregated across venues.
buy_ratiofraction (0.585 = 58.5 %)buy_volume / (buy_volume + sell_volume). Above 0.5 = buyers dominate.
sample_countcountNumber of points of the CVD series behind the bucket — the `sample_count` of `/v1/cvd/history` for the same bucket.
buy_sell_coverage_ratiofraction (0.585 = 58.5 %)Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
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.
GET/v1/buy-sell-ratio/spotdata_type · buy_sell_ratio_spot完整参考
GET/v1/buy-sell-ratio/spot/historydata_type · buy_sell_ratio_spot_history完整参考
GET/v1/buy-sell-ratio/futuresdata_type · buy_sell_ratio_futures完整参考
GET/v1/buy-sell-ratio/futures/historydata_type · buy_sell_ratio_futures_history完整参考
字段类型说明
timestring分桶的起始时间。
buy_volumefloat该分桶内的买入量(与该分桶的 /v1/cvd 相同)。
sell_volumefloat卖出量。
buy_ratiofloatbuy / (buy + sell),0 到 1。高于 0.5 时买方占优。
is_volume_estimatedboolean当该行的现货数量由其美元金额估算时为 true(2026-09-27 之前的现货数据)。
sample_countinteger构成该分桶的分钟数(点数)。
is_closedbooleantrue:该分桶已收盘,其数值为最终值。
GET/v1/trades/avg-sizedata_type · trades_avg_size完整参考
此接口的全部 7 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the latest closed bucket of `timeframe` — the first row of `/v1/trades/avg-size/history` for the same `timeframe`.
avg_trade_sizebase asset quantity (BTC for BTCUSDT)Average trade size, base asset units (NOT dollars: multiply by the price for a notional).
volumebase asset quantity (BTC for BTCUSDT)Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum).
trade_countcountNumber of trades. `null` when the number is not known: history imported from an outside source carries the buy and sell volumes, not the trade count.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
sample_countcountNumber of source points in the bucket (one-minute points with data). For a state (basis, open interest) the value is the LAST of them — the bucket's close —; for a flow it is their total.
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.
GET/v1/trades/avg-size/historydata_type · trades_avg_size_history完整参考
此接口的全部 7 个字段(取自接口契约)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Start of the bucket of `timeframe`, the value aggregating the bucket's minutes; the row covers `time` to `time` + the envelope's `step` (excluded).
avg_trade_sizebase asset quantity (BTC for BTCUSDT)Average trade size, base asset units (NOT dollars: multiply by the price for a notional).
volumebase asset quantity (BTC for BTCUSDT)Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum).
trade_countcountNumber of trades. `null` when the number is not known: history imported from an outside source carries the buy and sell volumes, not the trade count.
is_volume_estimated`true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available).
sample_countcountNumber of source points in the bucket (one-minute points with data). For a state (basis, open interest) the value is the LAST of them — the bucket's close —; for a flow it is their total.
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.
GET/v1/trades/avg-size/spotdata_type · trades_avg_size_spot完整参考
GET/v1/trades/avg-size/spot/historydata_type · trades_avg_size_spot_history完整参考
GET/v1/trades/avg-size/futuresdata_type · trades_avg_size_futures完整参考
GET/v1/trades/avg-size/futures/historydata_type · trades_avg_size_futures_history完整参考

单笔成交的平均规模能刻画参与者:机构入场时上升,资金流变成散户碎单时骤降。

字段类型说明
avg_trade_sizefloat | null平均规模,按各交易所的成交笔数加权。
volumefloat聚合总成交量。
trade_countinteger聚合成交笔数。
timestring分桶的起始时间。
is_volume_estimatedboolean当该行的现货数量由其美元金额估算时为 true(2026-09-27 之前的现货数据)。
sample_countinteger构成该分桶的分钟数(点数)。
is_closedbooleantrue:该分桶已收盘,其数值为最终值。