入门

使用限制

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

#各方案的限制

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

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

目录中记录了 121 条路径,其中两个是不计配额的探测接口(/v1/health 和 /v1/status),不计入任何人的用量。只有前者无需密钥。

#速率限制与月度配额

两个计数器,都按账户计算:既不按地址,也不按密钥。轮换密钥或把流量分散到多个地址,都不会改变其中任何一个。

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

{"status":"error","timestamp":1775648290510,"detail":"Debit depasse : votre offre autorise un nombre limite de requetes par minute.","retry_after":1}

X-Deny-Reason 响应头给出任何与方案相关的拒绝原因(rate、quota、family、websocket 或 key),正文的 detail 中也会用文字说明。正常响应中没有计数类响应头:配额状态在控制台中查看,达到 80% 时提醒,首次请求被拒时再次提醒。

#数据族

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

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

{"status":"error","timestamp":1775648290510,"detail":"Cette famille de donnees n est pas incluse dans votre offre."}

目录中十三个数据族与这十二个配额族之间的对应关系见价格页面;路径与数据族之间的对应关系见端点目录。

#历史能回溯多远

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

周期FreeTradersFinancialStartup
1m1 小时24 小时3 天1 周
5m4 小时3 天1 周30 天
15m4 小时3 天1 周30 天
1h24 小时1 周30 天90 天
4h1 周30 天72 天全部
1d30 天全部全部全部
ticks——1 小时24 小时
  • 30m 沿用 1h 的窗口,1w 沿用 1d 的窗口:因此凡是日线为“全部”的地方,周线也同样为“全部”。
  • 没有周期参数的接口(since_ms / until_ms 历史、日度序列、资金费率)受方案 1h 窗口的限制:Free:24 小时, Traders:1 周, Financial:30 天, Startup:90 天。
  • 逐笔接口(/v1/raw/spot-ticks、/v1/raw/futures-ticks、/v1/raw/trades)有各自的窗口,即上表中的 ticks 行,并且只在开放该数据族的方案中可用:Financial:1 小时, Startup:24 小时。
  • 校验针对实际到达的最早边界:limit 乘以周期时长,或 since_ms,或已超出窗口的 until_ms。

超出范围会返回明确的 403,绝不会返回截断的响应:detail 会说明请求了什么、方案允许什么,以及可使用的最大 limit。

403 · 深度
HTTP/1.1 403 Forbidden

{"detail":"Profondeur d'historique hors offre : 30 jour(s) demandes en 1m, votre offre en autorise 1 heure(s) (soit limit=60 au maximum sur ce timeframe, et aucune borne since_ms/until_ms au-dela de cette fenetre)."}

数据本身包含的范围

在方案窗口之外,可用深度取决于数据族:恐惧与贪婪指数自 2018 年起,链上估值和宏观数据跨越数年,交易所间价差仅有两天。/v1/macro/intraday/series 目录给出了每个宏观品种的确切范围。

#数据流连接

WebSocket 数据流自 Traders 方案起开放。密钥在握手时校验:不含数据流的方案会收到 403,连接不会建立。同时连接数上限适用于整个账户,涵盖所有密钥;超出的连接以代码 4003 关闭,并在原因中给出上限。

限制超出时
Simultaneous connections per account: 3 on Traders, 10 on Financial, 20 on Startup以 4003 关闭,原因中给出上限
方案不含数据流(Free)握手时返回 403,X-Deny-Reason: websocket
订阅方案外数据族的频道op: error,订阅不生效
建立连接:每秒 1 次,突发 10 次握手时返回 429
发送队列 256 帧丢弃最旧的帧,seq 出现跳跃
允许溢出 10 次以 4003 关闭,原因为 “client too slow”

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

#深度上限

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

范围类型说明
REST endpointslimit通常为 1000;多空比和交易所间价差为 500;逐笔数据为 10000。确切上限见各接口的参数表。
Snapshotone ceiling per fieldK 线 1000 根,按分钟的序列 1440 分钟,聚合成交 3600 秒,逐笔数据 10000 条;CVD 200 个窗口,交易所间价差 50 个。超出会返回 400 或 422;超出方案窗口会返回 403。
Indicatorsresults + warm-up ≤ 1000每次调用最多五十个实例。拒绝时会说明在所请求结果数量下可使用的最大周期。

#如何应对

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

无论是 429 还是 503,Retry-After 响应头都会给出延迟。与方案相关的 403(数据族、深度、数据流)重放也不会改变:请阅读 X-Deny-Reason 和 detail,然后修正请求或更换方案。

Python
import time
import 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 in (429, 503):
            # The server knows when it will be ready: do not invent a delay.
            # On an exhausted monthly quota (X-Deny-Reason: quota), Retry-After
            # is an hour: no point insisting, the counter restarts on the 1st.
            wait = float(response.headers.get("Retry-After", 2 ** attempt))
            time.sleep(wait)
            continue

        # 403: the request is outside the plan (family, depth, key). Replaying
        # it as is will produce exactly the same response.
        response.raise_for_status()
        return response.json()

    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/delta?symbol=BTCUSDT

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

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

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