跳转到主要内容
CSBoard API 强制执行每密钥的速率限制,以确保服务对所有用户保持稳定。如果您超出限制,会立即收到 429 响应——不会有请求被部分处理。请构建您的客户端以检查 Retry-After 头部并在重试前暂停,而不是在紧密循环中持续冲击端点。

各端点的限制

所有限制均为 每个 API 密钥,并以 60 秒滚动窗口重置。
限制端点
30 / 分钟挂单、价格、货币、余额和订单状态——所有标准 GET 端点
30 / 分钟POST /v1/orders(下达购买订单并消费真实资金)
1 / 分钟GET /v1/prices/snapshot.ndjson.gz(批量压缩快照)
从同一 IP 地址在一分钟内使用 无效或缺失的 API 密钥 发送超过 30 个请求,将触发自动 5 分钟的 IP 级封禁。在封禁期间,无论使用哪个密钥,来自该 IP 的每个请求都会返回 401 too_many_failed_auth。请轮换到有效密钥并等待冷却期结束后再重试。

429 响应格式

当您超出标准端点限制时,API 返回:
HTTP/1.1 429 Too Many Requests
Retry-After: 14
Content-Type: application/json

{ "code": "rate_limit_exceeded", "detail": "Rate limit exceeded. Retry after 14 seconds." }
Retry-After 头部的值是一个整数,表示在下次请求成功之前必须等待的 秒数 批量快照端点在被限流时使用不同的错误码:
{ "code": "snapshot_rate_limited", "detail": "Snapshot rate limit exceeded. Retry after 60 seconds." }

在客户端中处理 429

读取 Retry-After 并至少休眠相应秒数后再重试。下方示例展示了 bash 中的一个简单重试循环:
while true; do
  RESPONSE=$(curl -si https://csboard.com/v1/listings \
    -H "Authorization: Bearer csb_pub_...")

  STATUS=$(echo "$RESPONSE" | head -1 | awk '{print $2}')

  if [ "$STATUS" = "429" ]; then
    RETRY_AFTER=$(echo "$RESPONSE" | grep -i "retry-after" | awk '{print $2}' | tr -d '\r')
    echo "Rate limited. Waiting ${RETRY_AFTER}s..."
    sleep "$RETRY_AFTER"
  else
    echo "$RESPONSE" | tail -1  # print body
    break
  fi
done
在并行运行多个工作线程时,添加少量抖动(例如 sleep $((RETRY_AFTER + RANDOM % 5))),这样它们就不会在同一瞬间全部恢复并立即再次触发限制。

提高您的限制

默认限制适合大多数集成场景,但如果您有高吞吐用例——例如数据管道或高频交易机器人——请 联系我们 讨论为您的账户提高每密钥的限制。