全部文章
API 参考Polymarket API速率限制CLOB

Polymarket API 速率限制:完整参考

Polymarket 把它的速率限制分散在好几个页面上,分属两套完全不同的系统,而且使用的是几乎没人预料到的 10 秒窗口。这里把它们全部整理成一组表格,并说明超出限制时实际会发生什么。

阅读约 11 分钟更新于 2026年9月24日

如果你曾试图回答一个简单的问题,我每秒可以向 Polymarket 发送多少个请求?,你就会发现这个问题没有简单的答案。限制分散在两套独立的系统中,发布在不同的页面上,而且是以 10 秒窗口表示的,而不是大多数 API 使用的每秒或每分钟数字。

如果要查某个具体路由的限制,每个端点在 Polymarket API 参考中也都有自己的页面。

本页把所有有文档记录的限制集中在一处,解释这两套系统,并展示越过限制时实际会发生什么。所有数字都来自 Polymarket 官方文档,截至 2026 年 9 月有效。

简短回答

除以 10。1,500 req / 10s 的限制就是每秒 150 个请求。Polymarket 的全局上限是 15,000 req / 10s(1,500 rps),但每个端点系列下面都有一个低得多的限制,而真正会拦住你的是端点限制。

两套不同的速率限制系统

这是让大多数开发者栽跟头的部分。Polymarket 运行着两个相互独立的限流器,在其中一个之下并不能保护你不被另一个限制。

Cloudflare IP 限制按签名者令牌桶
作用范围你的 IP 地址你的签名者地址
适用于所有 API 和端点仅 CLOB 下单和撤单请求
机制滑动窗口令牌桶(补充速率 + 突发)
超出限制时请求被限流:延迟并排队请求被拒绝,返回 429
因何而异端点你的 30 天交易量档位
两个限流器是叠加的。以读取为主的机器人通常只会遇到第一个;交易机器人两个都会遇到。

是限流,不是拒绝

这是关于 Cloudflare 层最值得理解的一点。当你超出基于 IP 的限制时,Polymarket 会延迟并排队你的请求,而不是直接拒绝。你不会看到一连串 429,你会看到延迟悄悄上升。一个看起来正常、但响应时间从 40ms 变成了 3 秒的机器人,通常就是超出了速率限制。

Gamma API 速率限制

Base URL 为 https://gamma-api.polymarket.com。Gamma 提供市场和事件元数据,是大多数人探索平台时最先访问的端点。

端点限制每秒
通用4,000 req / 10s400 rps
/events500 req / 10s50 rps
/markets300 req / 10s30 rps
/markets + /events 列表900 req / 10s90 rps
/comments200 req / 10s20 rps
/tags200 req / 10s20 rps
/public-search350 req / 10s35 rps

/markets 是你会遇到的最严格的限制

每 10 秒 300 次请求,/markets 是整个平台上常用端点中限制最严格的,比它上面的 Gamma 通用限制严格 13 倍。如果你在循环中对完整市场列表分页,最先出问题的就是它。

Data API 速率限制

Base URL 为 https://data-api.polymarket.com。持仓、成交历史和投资组合数据。注意这个 API 比 Gamma 或 CLOB 严格得多:通用限制是每 10 秒 1,000 次,只有 Gamma 的四分之一。

端点限制每秒
通用1,000 req / 10s100 rps
/trades200 req / 10s20 rps
/positions150 req / 10s15 rps
/closed-positions150 req / 10s15 rps
健康检查(/ok)100 req / 10s10 rps

Data API v2

Data API v2 于 2026 年 9 月 4 日在 https://data-api.polymarket.com/v2 上线,有自己的限制。v1 仍在提供服务,但已冻结:新的端点和字段只会出现在 v2 上。

端点限制每秒
通用(所有 /v2 端点)800 req / 10s80 rps
/v2/trades300 req / 10s30 rps
/v2/positions、/v2/positions/combos200 req / 10s20 rps
/v2/activity、/v2/activity/combos200 req / 10s20 rps
/v2/prices-history200 req / 10s20 rps
/v2/status100 req / 10s10 rps

价格历史换了主机,限制收紧了 5 倍

data 主机上的 GET /v2/prices-history 取代了托管在 CLOB 上的路由。CLOB 版本允许每 10 秒 1,000 次请求;v2 路由只允许 200 次。只迁移调用而不迁移请求节奏,你撞上上限的速度会快五倍。v2 还用 429 加 Retry-After 表示负载过高,并使用不透明游标分页:没有 offset。

CLOB API 速率限制

Base URL 为 https://clob.polymarket.com。订单簿本身。CLOB 的通用额度是所有 Polymarket API 中最高的(每 10 秒 9,000 次),但它分为四个限制差异很大的组。

通用

端点限制每秒
通用9,000 req / 10s900 rps
GET 余额授权额度200 req / 10s20 rps
UPDATE 余额授权额度50 req / 10s5 rps

市场数据

这里要注意的规律是:单数端点为每 10 秒 1,500 次,复数批量端点为每 10 秒 500 次。在你想起一次批量调用就能覆盖许多代币之前,这看起来像是降级。批量请求每次的成本是单数的 3 倍,但每次调用完成的工作要多得多:永远优先用 /books,而不是循环调用 /book。

端点限制每秒
/book1,500 req / 10s150 rps
/books500 req / 10s50 rps
/price1,500 req / 10s150 rps
/prices500 req / 10s50 rps
/midpoint1,500 req / 10s150 rps
/midpoints500 req / 10s50 rps
/prices-history1,000 req / 10s100 rps
市场 tick size200 req / 10s20 rps

账本

端点限制每秒
/trades、/orders、/notifications、/order900 req / 10s90 rps
/data/orders500 req / 10s50 rps
/data/trades500 req / 10s50 rps
/notifications125 req / 10s12.5 rps

认证

端点限制每秒
API 密钥端点100 req / 10s10 rps

交易:突发与持续

交易端点是唯一有两个 Cloudflare 限制的端点:一个针对短时尖峰的突发限制,以及一个按 10 分钟计算的持续限制。你必须同时保持在两者之下。

端点突发持续
POST /order5,000 req / 10s120,000 req / 10 min
DELETE /order5,000 req / 10s120,000 req / 10 min
POST /orders2,000 req / 10s21,000 req / 10 min
DELETE /orders2,000 req / 10s15,000 req / 10 min
DELETE /cancel-all250 req / 10s6,000 req / 10 min
DELETE /cancel-market-orders1,500 req / 10s21,000 req / 10 min

每 10 秒 250 次的 DELETE /cancel-all 值得特别指出。每个重新报价周期都调用 cancel-all 的做市商会很快耗尽这个额度,而每 10 分钟 6,000 次的持续限制,平均下来每秒只有 10 次 cancel-all 调用。

Bridge、Relayer 及其他

端点限制
通用速率限制(全局上限)15,000 req / 10s
健康检查(/ok)100 req / 10s
Bridge API(https://bridge.polymarket.com)50 req / 10s
Relayer /submit25 req / 1 min
用户盈亏 API200 req / 10s

Relayer 的限制与众不同

Relayer /submit 是唯一一个按每分钟而不是每 10 秒计算的有文档限制,每分钟 25 次,是平台上最严格的数字。如果你通过 relayer 提交交易,大约每 2.4 秒只能提交一次。

按签名者令牌桶(CLOB 交易)

在 Cloudflare 之外,Polymarket 还会用按签名者令牌桶评估 CLOB 的下单和撤单请求。每个签名者地址有一个下单桶和一个撤单桶;消耗其中一个不会影响另一个。与 Cloudflare 层不同,超出这些限制会返回真正的 429。

请求消耗的是令牌,而不是每个请求计为一个单位:

桶请求令牌消耗
下单POST /order1
下单POST /orders批量中的订单数
撤单DELETE /order1
撤单DELETE /orders提交的订单 ID 数
撤单DELETE /cancel-all1 + 实际被取消的订单数
撤单DELETE /cancel-market-orders1 + 被取消的匹配订单数

批量请求要么全部通过,要么全部拒绝

只有当桶中的令牌足够覆盖每一项时,批量请求才会被接受。否则整个请求都会被拒绝,什么都不会处理。令牌消耗超过你档位突发容量的批量请求,无论等多久都永远不会被接受:它必须被拆分。

交易量档位

你的桶大小取决于 maker 钱包在滚动 30 天窗口内的累计交易量。档位分配每三小时刷新一次。

档位30 天交易量下单速率/秒下单突发撤单速率/秒撤单突发
Standard—406080120
Copper$30,000+6090120180
Bronze$50,000+80120160240
Silver$100,000+200300400600
Gold$500,000+4006008001,200
Platinum$2.5M+4506759001,350
Diamond$5M+5257871,0501,575
Elite$10M+6009001,2001,800
Standard、Copper、Bronze、Silver 和 Gold 档位允许撤单余额为负;Platinum、Diamond 和 Elite 的下限为零。

用 burst_seconds = burst / rate_per_sec 计算一次完整突发能持续多久。对于 Standard 签名者是 60 / 40,即 1.5 秒的全速下单,之后就会被限制在每秒 40 个的补充速率。

读取速率限制响应头

按签名者限流器会在每个被评估的请求上返回响应头。这是监控额度最省成本的方式,不需要额外的 API 调用。

响应头含义
Poly-RateLimit-Remaining本次请求后适用桶中的令牌余额
Poly-RateLimit-Reset当前等待期结束时的 Unix 时间戳
Poly-RateLimit-Tier所适用的档位
Retry-After重试延迟秒数,仅在 429 响应中出现
Poly-RateLimit-Warning当实时执行本会拒绝该请求时为 true

Poly-RateLimit-Reset 不是桶补满的时间

在 429 时,它告诉你的是你刚才尝试的那个请求何时会有足够的令牌,而不是桶何时补满。你通常不需要等你以为的那么久。此外,在允许撤单余额为负的档位上,cancel-all 之后 Poly-RateLimit-Remaining 可能变为负数。

正确处理 429

正确的重试策略取决于你撞上的是哪个限流器,弄错了只会让情况更糟。有 Retry-After 时遵守它;没有时回退到带随机抖动的指数退避。随机抖动很重要:没有它,你的每个 worker 都会在同一时刻重试,立刻再次触发限制。

const MAX_RETRIES = 5;

async function polyFetch(url: string, init?: RequestInit): Promise<Response> {
  for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
    const res = await fetch(url, init);

    // Watch the budget even on success — this is your early warning.
    const remaining = res.headers.get("Poly-RateLimit-Remaining");
    if (remaining !== null && Number(remaining) < 10) {
      console.warn(`Low token budget: ${remaining} (tier ${res.headers.get("Poly-RateLimit-Tier")})`);
    }

    // Warning mode: not rejected yet, but it would have been.
    if (res.headers.get("Poly-RateLimit-Warning") === "true") {
      console.warn("Request would be rejected under live enforcement — slow down.");
    }

    if (res.status !== 429) return res;
    if (attempt === MAX_RETRIES) return res;

    // Prefer the server's own answer, else exponential backoff.
    const retryAfter = res.headers.get("Retry-After");
    const baseMs = retryAfter
      ? Number(retryAfter) * 1000
      : Math.min(2 ** attempt * 250, 8000);

    // Full jitter — spreads a fleet of workers out instead of resynchronising them.
    await new Promise((r) => setTimeout(r, Math.random() * baseMs));
  }

  throw new Error("unreachable");
}

不要原样重试过大的批量请求

如果一个批量请求消耗的令牌超过你档位的突发容量,重试是徒劳的:它永远不可能作为单个请求被接受。把它拆分。这是退避会无限循环的唯一一种情况。

从设计上保持在限制之下

  • 用批量代替循环。一次 /books 调用代替五十次 /book 调用,在每 10 秒 500 次的额度中只消耗一次请求,而不是在每 10 秒 1,500 次的额度中消耗五十次,余量提升 17 倍。
  • 缓存元数据。/markets 返回的市场元数据在一个市场的生命周期内几乎不变,但 /markets 是 Gamma 中最严格的限制,每 10 秒 300 次。获取一次,缓存起来,别再在热循环中反复请求。
  • 用 WebSocket 获取实时状态。用定时器轮询 /book 是耗尽请求额度最常见的方式。改为订阅数据流,让服务器推送变化。
  • 给定时任务加入随机抖动。如果每个 worker 都在整分钟准时唤醒,你就会制造一个远高于平均速率的同步尖峰。随机化启动偏移。
  • 关注延迟,而不只是错误率。由于 Cloudflare 是限流而不是拒绝,p99 延迟上升是你超出 IP 限制的第一个信号,远早于任何东西以错误的形式出现。
  • 跟踪响应头。读取 Poly-RateLimit-Remaining 不花任何成本,它能准确告诉你还剩多少额度。

速率限制不等于数据访问

最后一点值得明确说明,因为这是我们见到的最常见的误解:没有任何速率限制档位能给你历史订单簿深度。Polymarket 的 API 提供的是订单簿的当前状态。它不提供上周二 14:03:17 订单簿是什么样子的历史存档,而市场一旦结算,它的订单簿就返回 404。

这是一个结构性缺口,而不是限流问题,再多的退避逻辑也解决不了。如果你想回测一个策略,你需要有人当时记录下来的时点快照,而这正是 PolyTest 存在的意义:240M+ 条 Polymarket 加密货币 Up/Down 市场的历史快照,带完整订单簿深度、亚秒级精度,没有缺口。

套餐请求数 / 分钟突发 / 秒历史数据
免费版302近期市场
Builder2501214 天
Pro75040完整历史
Enterprise定制定制完整历史 + 批量导出
PolyTest 自己的限制,供对比参考。用 GET /api/v1/limits 以编程方式查看你的限制。见速率限制和价格。

常见问题

Polymarket API 每秒的速率限制是多少?
Polymarket 按 10 秒窗口公布限制,所以要除以 10。全局上限是每 10 秒 15,000 次(1,500 rps),但每个端点的限制要低得多,它们才是真正的约束:CLOB 的 /book 和 /price 允许每 10 秒 1,500 次(150 rps),Gamma 的 /markets 端点只允许每 10 秒 300 次(30 rps),Data API 的 /positions 端点允许每 10 秒 150 次(15 rps)。
超出速率限制时 Polymarket 会返回 429 吗?
取决于你撞上的是哪个限流器。基于 IP 的 Cloudflare 限制会对请求限流,即延迟并排队而不是拒绝,所以你看到的是延迟上升而不是错误。CLOB 下单和撤单端点上独立的按签名者令牌桶则会返回 429 Too Many Requests,并附带一个 Retry-After 响应头,告诉你重试前的最短延迟。
Polymarket CLOB API 的速率限制是多少?
CLOB 通用限制是每 10 秒 9,000 次。市场数据端点 /book、/price 和 /midpoint 各允许每 10 秒 1,500 次,而它们的批量版本 /books、/prices 和 /midpoints 允许每 10 秒 500 次。账本端点允许每 10 秒 900 次。交易端点同时有突发和持续限制:POST /order 允许每 10 秒 5,000 次突发和每 10 分钟 120,000 次持续。
Polymarket Gamma API 的速率限制是多少?
Gamma API 通用限制是每 10 秒 4,000 次。单个端点更严格:/events 为每 10 秒 500 次,/markets 为每 10 秒 300 次,/markets + /events 合并列表为每 10 秒 900 次,/public-search 为每 10 秒 350 次,/comments 和 /tags 各为每 10 秒 200 次。/markets 的限制是平台上常用端点中最严格的。
Polymarket 的速率限制是按 IP 地址还是按 API 密钥计算的?
主要的 Cloudflare 限制是按 IP 地址而不是按 API 密钥计算的,所以同一个 IP 后面的多个密钥共享同一份额度。CLOB 下单和撤单端点上独立的令牌桶限制则以你的签名者地址为范围,大小由你 maker 钱包的 30 天交易量档位决定。
能通过 API 获取 Polymarket 历史订单簿数据吗?
不能。Polymarket 的 API 只提供当前的市场状态。没有历史订单簿深度存档,已结算市场的订单簿返回 404。回测需要在市场运行期间记录的时点快照。PolyTest 为 Polymarket 加密货币 Up/Down 市场提供 240M+ 条这样的快照,带完整的 8 档订单簿深度和亚秒级精度。

获取 Polymarket 不保留的历史数据

PolyTest 在 Polymarket 加密货币 Up/Down 市场运行期间实时记录:240M+ 条快照,包含 8 档订单簿深度、亚秒级时间戳,并保留已结算的市场。从 3 天免费试用开始。

继续阅读