Polymarket API 可免费使用:没有订阅费、没有付费数据层,也没有需要购买的 API 密钥。通过 Gamma 和 CLOB API 进行公共读取无需认证,交易端点使用基于钱包的认证,而非按量计费账户。真正重要的成本是间接的:速率限制、自行索引历史数据的工程时间,以及机器人读取链上状态和提交交易所需的 RPC 基础设施。本文将文档中记录的免费访问与你必须衡量的成本区分开来,然后给出可复现的流程来估算你自己的账单。
直接回答与本指南范围
是的,Polymarket API 是免费的。Polymarket 不出售 API 访问权限。没有付费层级、没有按请求计费的发票,也没有需要购买的 API 密钥。公共市场数据、订单簿、价格历史和事件元数据无需认证即可读取,而下单通过你的钱包进行认证,而非计费账户。
这个答案很短,但并不是成本的全貌。“Polymarket API 免费吗”这个问题通常隐藏着第二个问题:在它之上运行东西会花我多少钱?本指南将容易混淆的三件事分开:文档记录的免费访问、速率限制和自管理索引的间接成本,以及你必须自行衡量的基础设施成本。它不会发布编造的基准数字;它给你一个生成自己数据的流程。
- 免费:对市场、事件、订单簿和价格的公共读取。
- 免费:通过钱包签名认证的下单和撤单。
- 不免费:你构建历史索引的时间,以及任何链上读取或写入背后的 RPC 或节点容量。
- 不免费:转售已索引 Polymarket 历史的第三方数据提供商。
假设与前提条件
本文假设你是一名开发者,正在评估 Polymarket 作为数据源或执行场所。你应当熟悉 HTTP、JSON 和一门脚本语言。示例使用 curl 和 Python,因为它们是获得可验证结果的最短路径。
你不需要账户即可跟随只读示例。对于交易示例,你需要在 Polygon 上有资金的 wallet,并清楚理解下单是真实的金融操作。将每个写入示例视为生产代码,而非沙盒玩具。
- Python 3.9 或更新版本,带有 requests 库。
- 用于快速端点检查的 curl。
- 仅当你打算交易时才需要 Polygon 钱包;切勿提交私钥。
- 如果你计划直接读取链上状态或提交交易,则需要 RPC 端点。
免费访问模型实际如何运作
Polymarket 暴露了几个不同的接口面,它们因不同原因而免费。Gamma API 是发现层:市场、事件、标签和元数据。它是公开的,读取无需认证。CLOB API 是交易层:订单簿、价格和订单管理。其读取端点是公开的,写入端点对签署订单的钱包进行认证。
因为认证基于钱包而非账户,所以没有计费关系需要计量。Polymarket 不是按调用收费;它通过速率限制和签名检查来保护交易场所。当你规划容量时,这种区别很重要:你的上限不是预算线,而是请求速率上限和签名工作流。
一个有用的心智模型是带交易台的公共图书馆。任何人都可以走进来阅读目录和书架。要在交易台下单,你必须用签名证明你是谁,但你仍然不需要支付入场费。你支付的是到达那里的交通费用,以及你雇佣来高效整理书架的人员。
用 curl 验证免费公共读取
确认公共读取无需认证的最快方法是调用读取端点,除默认头外不添加任何头。如果返回结构化 JSON,则该端点是开放的。针对文档记录的基础主机运行这些命令,并检查状态码和响应体结构。
确切的主机名和路径由 Polymarket 文档记录,可能会变化;在占位符出现处替换为当前文档记录的基础 URL。练习的重点是行为,而非硬编码的 URL。
# Confirm an unauthenticated read returns JSON
curl -sS -o /tmp/markets.json -w "%{http_code}\n" \
"https://GAMMA_API_HOST/markets?limit=5"
# Inspect the shape without dumping the whole payload
python3 - <<'PY'
import json
with open('/tmp/markets.json') as f:
data = json.load(f)
print(type(data).__name__, len(data) if hasattr(data, '__len__') else '')
first = data[0] if isinstance(data, list) and data else data
print(sorted(first.keys())[:12] if isinstance(first, dict) else first)
PY预期验证结果
成功的未认证读取返回 HTTP 200 和 JSON 数组或对象。如果你收到 401 或 403,要么你调用了需要认证的端点,要么主机已更改。如果你收到 429,说明你触发了速率限制,这是你将遇到的第一个真实成本信号。
将结果记录在一个小表格中,以便比较端点,并在之后比较你自己的运行。不要填写你未观察到的数字;在运行检查之前将单元格留空。
- | 检查项 | 预期 | 观察结果 |
- | 公共市场读取 | 200, JSON | (记录你的结果) |
- | 公共订单簿读取 | 200, JSON | (记录你的结果) |
- | 无签名认证下单 | 401/403 | (记录你的结果) |
- | 超出预算的突发读取 | 429 | (记录你的结果) |
认证如何改变成本图景
交易端点需要签名订单。签名证明钱包控制资金;它不会产生账单。实际成本是运营性的:你必须安全地管理密钥、正确签名,并处理 nonce 和订单状态错误。重试失败签名的机器人可能会重复提交,这是财务损失,而非 API 费用。
另一个与认证相关的成本是 RPC 层。如果你的机器人读取链上状态、检查余额或直接提交交易,你就在消耗 RPC 容量。这个容量正是免费 API 仍可能产生月度账单的地方。有关端点选择的更广泛讨论,请参阅 RPC 端点指南和网络目录。
- 钱包签名取代 API 密钥用于写入。
- 密钥管理和重试逻辑是你的责任。
- 链上读取和交易提交消耗 RPC 容量,这是一个单独的成本中心。
用可复现的负载测试衡量真实成本
由于 Polymarket 不发布 API 访问的价格表,唯一诚实的成本估算就是你自己测量的那个。构建一个小型测试工具,以受控速率发出读取请求,记录状态码和延迟,并在看到 429 时停止。针对你逻辑的暂存副本运行它,绝不要针对生产订单流运行。
下面的脚本故意保守。它逐步提升请求速率,记录第一个速率限制响应,并打印一个你可以粘贴到自己笔记中的表格。它不会编造限制;它发现你的客户端在那一刻观察到的限制。
import time, statistics, requests
BASE = "https://GAMMA_API_HOST" # replace with documented host
PATH = "/markets"
def probe(rate_per_sec, duration=10):
interval = 1.0 / rate_per_sec
latencies, codes = [], []
start = time.time()
while time.time() - start < duration:
t0 = time.time()
try:
r = requests.get(BASE + PATH, params={"limit": 5}, timeout=5)
codes.append(r.status_code)
except requests.RequestException as e:
codes.append(type(e).__name__)
latencies.append((time.time() - t0) * 1000)
time.sleep(max(0, interval - (time.time() - t0)))
return codes, latencies
print("rate | n | 429s | p50_ms | p95_ms")
for rate in (1, 2, 5, 10):
codes, lat = probe(rate)
n429 = sum(1 for c in codes if c == 429)
p50 = statistics.median(lat)
p95 = sorted(lat)[int(len(lat) * 0.95) - 1]
print(f"{rate:>4} | {len(codes):>3} | {n429:>4} | {p50:>6.1f} | {p95:>6.1f}")如何解读结果表而不自欺
你的表格将显示出现 429 的速率。这个数字特定于你的 IP、你的客户端以及你运行测试的时刻。它不是公布的配额,可能会变化。将其作为规划输入,而非合同。
更有用的列是 p95 延迟。如果延迟在 429 出现之前急剧上升,你的客户端已经接近软上限,应该退避。行为良好的客户端使用带抖动的指数退避,并缓存不常变化的响应,例如市场元数据。缓存是最便宜的速率限制缓解措施,它只需要一个字典和一个 TTL。
- 将观察到的 429 阈值视为环境特定,而非通用。
- 积极缓存变化缓慢的元数据。
- 在延迟增长时退避,而不仅仅在明确出现 429 时。
- 在请求模式发生任何变化后重新运行测试工具。
排查常见的免费层意外
大多数意外不是计费意外,而是行为意外。昨天有效的读取今天返回 401,因为路径移到了需要认证的接口面。开发中正常的突发在生产中触发 429,因为另一个进程共享相同的出口 IP。历史查询只返回最近窗口,因为公共 API 不是完整档案。
按顺序处理这些问题:确认端点被文档记录为公共,确认你没有与嘈杂进程共享出口 IP,确认你的客户端遵守 Retry-After,并确认你没有期望公共接口面不提供的历史数据。
- 401/403:端点需要认证或主机已更改。
- 429:速率限制;遵守 Retry-After 并添加抖动。
- 历史为空:公共 API 不是完整档案;你需要自己的索引或数据提供商。
- 订单状态不一致:签名或 nonce 处理问题,而非 API 费用。
免费模型的局限与权衡
免费访问很慷慨,但它不是服务级别协议。没有付费层级可以购买优先级,因此你的吞吐量受共享限制和你自己的工程能力约束。如果你需要保证容量、跨市场聚合或长期历史回填,诚实的答案是你要向某人付费,要么在基础设施上,要么在数据订阅上。
权衡很直接。免费 API 非常适合发现、仪表盘和中频交易。它不适合需要专用吞吐量的高频策略,如果你需要多年交易历史,它也不能替代索引器。明确规划这个差距,而不是在生产中发现它。
- 没有付费层级意味着无法购买优先级。
- 公共接口面的历史深度有限。
- 高频策略需要专用基础设施。
- 第三方索引器以真实成本填补历史空白。
成本感知构建的后续步骤
从免费读取和缓存层开始。使用上面的测试工具测量你观察到的速率上限。然后决定你的工作负载是否需要专用 RPC 容量来进行链上读取和交易提交。如果需要,在扩展之前比较专用节点选项并查看 RPC 定价。
对于具体的端点和提供商选择,使用 RPC Assistant 而非猜测。它保持推荐简短且最新,而本指南专注于方法。合理的顺序是:验证免费读取、测量限制、添加缓存,然后仅为实际需要的部分配置基础设施。
- 验证公共读取并记录你自己的结果表。
- 使用受控测试工具测量速率限制和延迟。
- 在添加基础设施之前添加缓存和退避。
- 仅在需要链上访问的地方配置专用 RPC 容量。