入门

应用与 AI 智能体的使用限制

限制取决于你的方案,并按账户计算,涵盖所有密钥。限制会事先公布,每次拒绝都会说明原因,且绝不会悄悄截断任何数据。本页中的数值与价格目录一致。

你的 AI 智能体共享这些限制:MCP 服务器代其发出的每个请求都按同一密钥的 REST 请求计算,占用相同的速率和月度配额;被拒绝时,AI 智能体收到 Error (HTTP 429)。对 /mcp 本身的调用不计数。

#各方案的限制

四个方案,四组限制。企业版需协商确定,没有默认值。

限制FreeTradersFinancialStartup
每月请求数10,000200,0002,000,00020,000,000
速率限制(每分钟)3060300600
允许的突发量102050100
市场数据族4 / 127 / 1212 / 1212 / 12
开放的 REST 端点3585135135
WebSocket 同时连接数—31020

目录中记录了 138 条路径。其中三条从不计入配额,仅受速率限制约束:/v1/health(唯一无需密钥的接口)、/v1/limits(你的密钥的限制),以及 POST /v1/ws/token(短期 WebSocket 令牌,遵循数据流权限)。/v1/status 按一次价格与成交量请求计数。合约在 x-family 中给出每个接口所属的市场数据族。

#速率限制与月度配额

两个计数器,都按账户计算:既不按地址,也不按密钥。轮换密钥或把流量分散到多个地址,都不会改变其中任何一个。在它们之前,边缘网关还按 IP 地址做防洪:每秒 20 个请求,突发上限 40 个,超出时返回 429 edge_rate_limited 并带 Retry-After: 1。它只拦截洪泛:共享出口地址(NAT、serverless)请据此规划。

  • 速率限制按分钟计算,并允许一定突发:一次发出少量请求可以通过,超过后后续请求会被平滑处理,然后被拒绝。拒绝时返回 429 rate_limited,其 Retry-After 给出距下一次允许请求的秒数(与 error.details.retry_after_s 的值相同)。
  • 月度配额按 UTC 自然月统计每一个计入配额的请求,并在每月第一天清零。用尽后,在配额重置或更换方案(即时生效)之前,都会返回 429,其 Retry-After 给出距离配额重置的秒数。
HTTP/1.1 429 Too Many Requests
Retry-After: 2
X-Deny-Reason: rate_limited

{
  "status": "error",
  "server_time": "2026-09-30T16:07:27.808Z",
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded: your plan allows a limited number of requests per minute. Retry after the Retry-After delay.",
    "details": {
      "retry_after_s": 2
    }
  }
}

X-Deny-Reason 响应头给出任何与方案相关的拒绝原因(rate_limited、quota_exceeded、plan_family、plan_websocket、missing_api_key、invalid_api_key 或 history_depth),正文在 error.code 中指明该原因(rate_limited、quota_exceeded、plan_family、plan_websocket、invalid_api_key、history_depth),并附英文的 error.message。所有使用计量密钥(控制台中创建的每把密钥都是)的响应都带有 IETF 标准响应头,分为两项策略:RateLimit-Policy: "rate";q=…;w=…, "quota";q=…;w=… 与 RateLimit: "rate";r=…;t=…, "quota";r=…;t=…。quota_exceeded 的 r 即月度配额余量。控制台显示同样的状态,达到 80% 时会提醒,首次请求被拒时再次提醒。

#市场数据族

每个端点恰好属于一个配额族,每个方案开放一组市场数据族。方案中缺少的市场数据族在所有通道上都不可用:REST 接口返回 403,快照会移除其字段并在 out_of_plan_fields 中列出,WebSocket 数据流会拒绝该频道。

市场数据族FreeTradersFinancialStartup
价格与成交量 price_volume是是是是
衍生品 derivatives是是是是
微观结构 microstructure—是是是
原始逐笔 trades——是是
期权 options—是是是
快照 snapshot—是是是
指标 indicators是是是是
宏观 macro是是是是
链上 onchain——是是
情绪 sentiment——是是
ETF etf——是是
代币经济 tokenomics——是是
403 · plan_family
HTTP/1.1 403 Forbidden
X-Deny-Reason: plan_family

{
  "status": "error",
  "server_time": "2026-09-30T16:07:27.808Z",
  "error": {
    "code": "plan_family",
    "message": "The 'options' data family is not included in your plan. GET /v1/limits lists the families of your key; https://bytnode.com/pricing lists the plans that open it."
  }
}

目录中十个类别与这十二个市场数据族之间的对应关系见价格页面;每个接口所属的市场数据族见端点目录以及合约(x-family,即 GET /v1/limits 返回的标识符)。

#历史能回溯多远

历史深度取决于方案和周期。它是一个从当前时刻起的滚动窗口,而不是每次请求的上限:在 Free 方案中,无论如何分页,昨天的 1 分钟 K 线都超出方案范围。

周期FreeTradersFinancialStartup
1m1 小时24 小时3 天1 周
5m4 小时3 天1 周30 天
15m4 小时3 天1 周30 天
1h24 小时1 周30 天90 天
4h1 周30 天72 天全部
1d30 天全部全部全部
trades——1 小时24 小时
  • 30m 沿用 1h 的窗口,1w 沿用 1d 的窗口:因此凡是日线为“全部”的地方,周线也同样为“全部”。
  • 没有周期参数的接口(since_ms / until_ms 历史)受方案 1h 窗口的限制:Free:24 小时, Traders:1 周, Financial:30 天, Startup:90 天。日度序列(每天一个点或更慢:Fear & Greed、链上、ETF、宏观)改为遵循 1d 行——标为“全部”的方案不受限制。
  • 资金费率(费率与累计历史,八小时窗口,接受 since_ms / until_ms)遵循方案的 4h 窗口:Free:1 周, Traders:30 天, Financial:72 天, Startup:全部。
  • 逐笔成交路由(/v1/trades/spot、/v1/trades/futures、/v1/trades/large、/v1/trades-kline/futures/seconds)有自己的窗口,即上方的 ticks 行,并且只在开放该市场数据族的套餐中可用:Financial:1 小时, Startup:24 小时。快照中对应的字段(trades_spot、trades_futures、trades_kline_futures_seconds)在时间上受同一窗口限制。
  • 校验针对实际到达的最早边界:limit 乘以周期时长,或 since_ms,或已超出窗口的 until_ms。

超出范围会返回明确的 403,绝不会返回截断的响应:error.message 会说明请求了什么、方案允许什么,以及可使用的最大 limit。你自己填写的边界(since_ms、until_ms)享有两分钟的时钟偏差容忍;单独的 limit 则没有。既不带 limit 也不带 since_ms 时不会被拒绝:结果页只是停在窗口边缘,此时 next 为 null。

403 · history_depth
HTTP/1.1 403 Forbidden
X-Deny-Reason: history_depth

{
  "status": "error",
  "server_time": "2026-09-30T16:07:27.808Z",
  "error": {
    "code": "history_depth",
    "message": "History depth beyond your plan: 30 day(s) requested on 1h, your plan allows 1 day(s) (i.e. at most limit=24 on this timeframe, and no since_ms/until_ms bound beyond that window).",
    "param": "limit",
    "details": {
      "window_s": 86400,
      "earliest_ms": 1791763200000,
      "max_limit": 24,
      "timeframe": "1h"
    }
  }
}

数据本身包含的范围

在方案窗口之外,数据本身的历史深度取决于数据类型;对于K线和资金流数据,还取决于时间粒度。下表为 2026-10-15 在 BTCUSDT(期权和 ETF 为 BTC)上实测的最早数据;较晚上线的交易对从其上线日开始。这是每个序列的起始日期:从该日期至今,历史数据连续。

数据1m – 30m1h4h1d · 1w
/v1/klines/history2026-05-282026-04-032025-09-302017-08-17
/v1/trades-kline/…/history
/v1/cvd/…/history

/v1/buy-sell-ratio/…/history

/v1/trades/avg-size/…/history
2026-06-052026-04-032025-09-302023-10-01
/v1/spread/interexchange/history2026-05-282026-04-032025-09-302023-10-01
/v1/orderbook/…/history1m 2026-09-26 · 5m, 30m 2026-09-18 · 15m 2026-09-022026-07-042025-10-072024-09-06
/v1/oi/history
/v1/oi/change/history
2026-05-28 19:10 · 2026-09-12 14:40 · 2026-10-19 09:31 · 2026-10-27 18:03 *2026-04-04 17:002025-10-072023-10-04
/v1/basis/history2026-05-28 19:10 · 2026-09-12 14:40 · 2026-10-19 09:31 · 2026-10-27 18:03 *2026-04-04 17:002025-10-072023-10-03
/v1/funding/rate/history
/v1/funding/cumulative/history
2025-09-30
/v1/liquidations/cumulative/history
/v1/liquidations/big-small-ratio/history
2026-05-28
/v1/options/…/history2026-06-08
/v1/macro/history
/v1/macro/net-liquidity/history
2021-06-01
/v1/macro/intraday/history1m 2026-06-23 · 5m, 15m 2026-06-152024-08-242024-08-242016-01-03
/v1/btc/mvrv/history2022-06-08
/v1/btc/nvt/history
/v1/btc/active-addresses/history

/v1/btc/revenue-per-difficulty/history
2024-06-08
/v1/btc/{fees,mempool,mining,network}/history
/v1/eth/…/history
2026-06-08
/v1/etf/fundamentals/history2026-02-04
/v1/tokenomics/history2017-08-17
/v1/fear-greed/history2018-02-01
/v1/global/history2026-06-06
  • 逐笔成交(/v1/trades/spot、/v1/trades/futures、/v1/trades/large)和每秒成交(/v1/trades-kline/futures/seconds):72 小时滚动窗口,而非起始日期。
  • 日线和周线K线可追溯至 2017 年,2023-10-01 之前无成交量(null)。宏观:按序列,自 2021-06 起(黄金自 2025-06-09 起);日内序列的日线数据始于 2016 至 2020 年之间(PAXGUSDT 2020-08-28)。期权自 5 分钟粒度起;/v1/options/max-pain/history 覆盖每个到期日自上线以来的数据。清算事件(/v1/liquidations/events)为最新事件,无日期范围。 * 持仓量与基差:时间为 UTC;1m–30m 列的第一个日期适用于最初的十二个交易对,第二个日期适用于 AVAX、HBAR、LINK、NEAR、TAO、UNI、XMR、ADA、GRAM 和 LTC,它们更早的读数为每小时一次,第三个日期适用于 2026-10-19 新增的 55 个交易对。对这 55 个交易对,K 线和指标与其他交易对一样可追溯,但 2026-10-19 之前没有成交量(null);资金费率可追溯至 2026-09-16;其他所有序列均从 2026-10-19 开始。第四个日期适用于 2026-10-27 新增的 27 个交易对:它们的 K 线和指标同样可追溯(MUSDT:1m K 线自 2026-10-21 起,5m 自 2026-09-23 起,15m 自 2026-07-16 起——其参考市场保留的数据点较少),但 2026-10-27 之前没有成交量(null);资金费率可追溯至各交易所公布的最早时间;其他所有序列均从 2026-10-27 开始。

#数据流连接

WebSocket 数据流从 Traders 方案起开放。密钥在握手时校验:不含数据流的方案收到 403,连接不会建立。同时连接上限按整个账户(所有密钥合计)计算;超出的连接以代码 4003 关闭,原因中给出上限(消费过慢的客户端以 4005 关闭)。握手时的 503 与你的方案无关:表示数据流服务已达容量上限(所有账户合计)。

限制超出时
Simultaneous connections per account: 3 on Traders, 10 on Financial, 20 on Startup以 4003 关闭,原因中给出上限
方案不含数据流(Free)握手时返回 403,X-Deny-Reason: plan_websocket
数据流服务的总容量(所有账户合计)握手时返回 503,稍后重试
订阅方案外市场数据族的频道op: error,订阅不生效
建立连接:每秒 1 次,突发 10 次握手时返回 429
发送队列 512 帧丢弃最旧的帧,seq 出现跳跃
允许溢出 10 次以 4005 关闭,原因为 “client too slow”

保持订阅的连接比反复轮询划算得多:如果你每秒调用同一个端点,数据流才是正确的选择。见 WebSocket 数据流。

#深度上限

与方案无关,每个接口都会限制其 limit。这些上限是技术性的;方案的窗口叠加其上,以两者中更严格的为准。

范围类型说明
REST endpointslimit所有接口为 1000;单个事件(逐笔、大额成交、清算)为 10 000。每个接口的准确上限见其参数表。
Snapshotone ceiling per field每个 @tf 字段最多 1000 根 K 线或分桶(klines、OI、订单簿、买卖比、成交规模、大小额爆仓),成交 K 线 1440,CVD 200,跨交易所价差 50;逐笔成交与爆仓事件 10 000。不带周期的字段(基差、OI 变化、累计爆仓……)只返回最新值:深度 1。超出返回 422;超出方案窗口返回 403。
Indicatorsresults + warm-up ≤ 1000每次调用最多五十个实例。拒绝时会给出在所请求的 limit 下可用的最大周期。

#如何应对

遵守公布的延迟,不要重放 403

无论是 429 还是 503,只要有 Retry-After 响应头,它就会给出延迟。与方案相关的 403(X-Deny-Reason 为 plan_family、history_depth 或 plan_websocket)重放也不会改变:请阅读 X-Deny-Reason 和 error.code,然后修正请求或更换方案。

Python
import time
import httpx  # pip install httpx


def get(client: httpx.Client, path: str, **params):
    """Retry on the delay the server announces, never on a 403."""
    for attempt in range(4):
        response = client.get(path, params=params)

        if response.status_code == 429 and response.headers.get("X-Deny-Reason") == "quota_exceeded":
            # The monthly quota is spent: Retry-After counts the seconds until the 1st
            # of the month. Do not sleep for days: stop, or change plan.
            raise RuntimeError(response.json()["error"]["message"])

        if response.status_code in (429, 503):
            # The server knows when it will be ready: do not invent a delay.
            wait = float(response.headers.get("Retry-After", 2 ** attempt))
            time.sleep(wait)
            continue

        body = response.json()
        if body["status"] == "error":
            # 401 / 403 / 422: the request itself is refused (key, plan, value).
            # Replaying it as is produces exactly the same response: keep the
            # stable code, it says what to change.
            raise RuntimeError(f'{body["error"]["code"]}: {body["error"]["message"]}')
        return body

    raise RuntimeError("the service is still unavailable after 4 attempts")

合并请求而不是重复请求

快照一次请求最多返回四十八个字段,只计一次。对于仪表盘,这意味着每个周期一次调用而不是十次,配额消耗也减少十倍。

对比
# Three calls where one is enough.
GET /v1/funding/rate?symbol=BTCUSDT
GET /v1/basis?symbol=BTCUSDT
GET /v1/oi/change?symbol=BTCUSDT

# The same result, in one request (from Traders upwards).
GET /v1/snapshot?symbol=BTCUSDT&funding_rate=1&basis=1&oi_change=1

不要重复请求不会变化的数据

恐惧与贪婪指数每天发布一个数据点。ETF 基本面按季度更新。日度宏观序列每天变化一次。按分钟查询它们只会消耗配额而得不到新信息:请按各市场数据族的更新节奏安排请求。