Polymarket vs Kalshi API:开发者逐项对比指南(鉴权、CLOB、WebSocket、历史数据)

Polymarket 和 Kalshi 跑的是同一个原语 —— CLOB 上的「是/否」合约 —— 却通过完全不同的 API。一个要求 EIP-712 签名和 Polygon 钱包;另一个是 REST 端点加可选的 FIX。如果你在搭预测 Agent、套利机器人或聪明钱监控器,这就是那篇本该早已存在的逐项对照指南。
一句话总结
- •Polymarket 用提交到 Polygon 上 CLOB 的 EIP-712 签名订单 —— 涉及钱包接入和 gas 费。
- •Kalshi 用标准的 REST + WebSocket 鉴权(邮箱/密码 → token),外加给机构用户的可选 FIX 网关。
- •两家都暴露订单簿、成交和历史数据,但 schema 与结算语义差异大到「统一」类库成了这个加密/量化工具角落里 HN Show HN 上呼声最高的话题。
- •在等价合约之间做跨场所套利,是最常见的搭建模式(GitHub 上 10+ 个开源机器人)。
- •API Pick Prediction Markets Search 把两家场所包进一个 POST 端点,做自然语言合约发现 —— 每次调用 50 credits,ranked 语义结果。
这篇文章为什么存在
只要你在预测市场上搭过点东西,就知道那个经典诉求:「我想从同一个 Python 脚本里查询 Polymarket 和 Kalshi,拿回一份干净的匹配合约列表。」每一个预测市场 Show HN 的 HN 评论区,最后都无可避免地收敛到这件事 —— 反复出现「CCXT for prediction markets」的帖子,说明需求存在,而现有方案都没踩到点上。
难度是真实的。两家场所解决同一个原语 —— 中央限价订单簿上的二元「是/否」合约 —— 却通过差异极大的 API 暴露它。下面是两边的一个能跑的开发者视图,逐项对照,附上你真正需要的代码。
两家场所,两套架构
Polymarket
- 链:Polygon(USDC.e 结算)
- 鉴权:用钱包私钥做 EIP-712 类型化数据签名;没有传统的 bearer token
- 下单:签名订单提交到 CLOB API;gas 由 Polymarket 通过元交易代付
- 市场发现:Gamma API(REST + JSON)浏览活跃市场,外加一个单独的 CLOB API 拿实时订单簿
- 实时数据:WebSocket 流推送订单簿更新和成交
- 历史数据:成交走 REST 端点;每日快照单独下载
Kalshi
- 结算:通过 ACH 和电汇用美元结算(需要美国银行账户)
- 鉴权:邮箱 + 密码 → bearer token,或 API key(机构)
- 下单:标准的已鉴权 REST POST 到
/portfolio/orders - 市场发现:events、markets、series 的 REST 端点;schema 干净
- 实时数据:WebSocket 和 FIX(机构),推送成交、订单簿、行情
- 历史数据:成交走 REST 端点;市场结算与清算数据直截了当
逐项对比
| Polymarket | Kalshi | API Pick | |
|---|---|---|---|
| 鉴权 | EIP-712 签名订单 + Polygon 钱包 | 邮箱/密码 → bearer;或 API key | x-api-key 头(只读发现) |
| 结算 | Polygon 上的 USDC | 美元银行转账(仅美国) | 无(仅搜索) |
| 美国合法性 | 地理围栏(非美国) | 受 CFTC 监管 | 无 |
| 实时 | WebSocket | WebSocket + FIX | 无 |
| 历史 | REST 成交 + 快照 | REST 成交 + 结算 | 搜索返回指向来源的链接 |
| 最佳契合 | 加密原生、全球市场、聪明钱追踪 | 美国监管、选举与经济 | 跨场所合约发现 |
能跑的代码:各家的 hello-world
Polymarket:列出活跃市场
import requests
# Gamma API — no auth required for browsing
r = requests.get(
"https://gamma-api.polymarket.com/markets",
params={"active": "true", "limit": 25, "order": "volume"},
)
markets = r.json()
for m in markets[:5]:
print(m["question"], "→", m["outcomePrices"])Polymarket:提交一个签名订单(骨架)
# Full order placement requires py-order-utils + a Polygon wallet
# This is the structural sketch — not runnable without wallet setup
from py_order_utils.builders import OrderBuilder
from py_order_utils.signer import Signer
signer = Signer(private_key="0xYOUR_PRIVATE_KEY")
builder = OrderBuilder(
exchange_address="0x...",
chain_id=137,
signer=signer,
)
order = builder.build_signed_order({
"maker": signer.address(),
"tokenId": "...", # the yes/no token ID for the market
"makerAmount": "1000000", # USDC.e in atomic units
"takerAmount": "1500000",
"side": "BUY",
"feeRateBps": 0,
"nonce": 0,
"expiration": 0, # 0 = no expiry
})
requests.post(
"https://clob.polymarket.com/order",
json={"order": order, "owner": signer.address(), "orderType": "GTC"},
)Kalshi:登录并提交一个限价单
import requests
# Step 1 — login
r = requests.post(
"https://api.elections.kalshi.com/trade-api/v2/login",
json={"email": "you@example.com", "password": "..."},
).json()
token = r["token"]
headers = {"Authorization": f"Bearer {token}"}
# Step 2 — list markets in an event
r = requests.get(
"https://api.elections.kalshi.com/trade-api/v2/markets",
params={"event_ticker": "POTUS-2028", "limit": 25},
headers=headers,
).json()
print(r["markets"][:5])
# Step 3 — place a limit buy on the "Yes" side at 60 cents
r = requests.post(
"https://api.elections.kalshi.com/trade-api/v2/portfolio/orders",
headers=headers,
json={
"ticker": "POTUS-2028-DEM",
"type": "limit",
"action": "buy",
"side": "yes",
"count": 100, # 100 contracts
"yes_price": 60, # 60 cents
"client_order_id": "abc123",
},
)
print(r.json())API Pick:跨两家做自然语言发现
import requests
r = requests.post(
"https://www.apipick.com/api/search/prediction-markets",
headers={"x-api-key": "pk_yourkey"},
json={"query": "Federal Reserve rate cuts before end of 2026"},
)
for hit in r.json()["results"][:5]:
print(hit["title"], "@", hit["venue"], "→", hit["url"])
# Returns ranked matches across Polymarket + Kalshi.
# 50 credits per call (~$0.05), only on HTTP 200.三种真正管用的生产模式
1. 跨场所套利机器人
GitHub 上最常见的模式:一份人工策划的白名单 —— 「这个 Polymarket 合约和这个 Kalshi 合约就同一结果结算」。机器人盯着两边的订单簿,计算隐含概率,当价差越过阈值时建仓。例子:ImMike/polymarket-arbitrage 和 realfishsam/prediction-market-arbitrage-bot。
难的是白名单。「美联储会在 12 月会议上降息 25 个基点吗」在人看来是同一个,但结算来源和确切措辞不同;自动匹配器出错的频率高到真正的机器人都用人工策划的映射。
2. 聪明钱监控器
Polymarket 上的巨鲸在链上可见。一个监控器盯着 Polygon 上特定市场的大额订单流,把大仓位浮出来,在头条触达新闻 API 之前就标记出快速的价格异动。配合 News Search 来确认一次明显的异动是新闻驱动还是纯投机。
3. 给 LLM Agent 的预测信息流
把当前的 Polymarket / Kalshi 价格拉进 LLM Agent 的上下文,模型就能给出有概率依据的回答:「当前博彩市场隐含 X 的概率约 65%」。这正是 API Pick 覆盖的发现用例 —— 给一个来自 Agent 的自然语言问题,返回 ranked 合约,让 Agent 在回答里引用价格。
常见坑(从 HN 评论汇编)
- Polymarket EIP-712 签名 —— 订单签名是确定性的,但工具链出错很常见。用
py-order-utils,别自己手撸。早期机器人的亏损大多来自 API 静默拒绝的签名不匹配。 - Kalshi 限流 —— 文档写的是 100 req/sec,但在繁忙的事件日(选举夜、FOMC)有些端点会更低。在客户端里内建带退避的重试。
- Polymarket gas 飙升 —— 大成交量的日子里 Polygon 的 gas 会跳涨。Polymarket 通过元交易补贴了大部分下单,但结算和提现是用户自付。在盈亏计算里把这部分算进去。
- 结算不匹配 —— 看似等价的合约有时结算方式不同。配对交易前,务必读两个合约的结算来源条款。
- WebSocket 断连 —— 两家场所都会有例行的 WebSocket 抖动。带序列号回放的重连逻辑,对任何生产机器人都是不可省的。
快速选型
这件事会往哪走
预测市场眼下正受到不寻常的主流关注:美国选举、FOMC 事件、体育和 AI 起飞类问题周围成交量更大;与新闻网站的集成更广,把隐含概率呈现出来;还有一波开发者工具(Show HN、GitHub 仓库)都收敛到同一个主题 —— 「该有人给预测市场写一个 CCXT。」
我们不认为 CCXT 式的统一执行类库是对的形状。鉴权、结算和监管体制的差异太深,无法在不对用户撒谎的前提下干净地抽象掉。但发现问题 —— 给一个自然语言问题,找到已经存在的合约 —— 是可以用语义搜索解决的,而这正是 API Pick Prediction Markets Search 做的事。找到合约;到场所下单。
常见问题
哪家场所合约更多?
写作时,两家都列着数万个活跃市场。Polymarket 更偏加密原生和全球化(政治、体育、加密、时事);Kalshi 受 CFTC 监管、聚焦美国(选举、经济、天气、体育)。成交量按品类分布各异 —— 美国选举通常 Kalshi 更深;全球政治和加密原生问题则是 Polymarket 更深。
为什么开源「统一」类库总在 Show HN 上冒出来?
因为需求存在,而没人把它做好。像 'Open-source library to unify Polymarket and Kalshi APIs' 和 'dr-manhattan — CCXT for Prediction Markets' 这样的 Show HN 帖反复出现。难点在于匹配等价合约(同一结果,不同措辞)和调和结算语义。类库通常把鉴权封装层做对了,却止步于合约匹配。
怎么做基础的跨场所套利?
概念上:找到在不同场所就同一结果结算的两个合约,看隐含概率,买入报价更高的「No」一侧和报价更低的「Yes」一侧,持有到结算。实践中的摩擦在于执行:Polymarket 的 gas 费、Kalshi 的美元出入金、部分成交,以及上面那个匹配问题。GitHub 上大多数实盘套利机器人跑在一份人工策划的合约对映射白名单上,而不是自动发现。
Polymarket 在美国合法吗?
Polymarket 目前未获授权面向美国用户;访问按地理围栏限制。Kalshi 受 CFTC 监管,在美国合法。如果你在为美国用户做产品,Kalshi 是唯一选项。如果你做全球化,Polymarket 的市场覆盖更广。
API Pick 在这套栈里处于什么位置?
API Pick Prediction Markets Search 解决「发现」问题:给一个自然语言问题(比如 '美联储年底前降息'),它在一次 POST 调用里返回跨 Polymarket 和 Kalshi 合约的 ranked 语义匹配。我们不替代下单执行 API —— 下单你还是直接去各场所。我们把「找到对的市场」这件事做得简单。
本文涉及的 API
Sarah Choy 是 API Pick 的 CEO,专注于为 AI Agent 与 LLM 工作流构建可用于生产的 API。