API · 参考
位于 data-api.polymarket.com 的 Data API 是 Polymarket 的只读「数据仓库」——
每个钱包的持仓、完整的成交记录、实时的组合价值,并内置
盈亏(PnL)。它完全公开:无需密钥、无需签名、无需账户。这使它成为最容易上手的地方——
你可以完全基于它构建一整个分析或跟单机器人,全程不碰任何私钥。下面每个示例都是可在本页沙盒中运行的真实调用。
/positions - 一个钱包持有什么(含 PnL)
最核心的端点。传入一个钱包,就能拿到每个未平仓持仓,每一项都已附上成本基础和盈亏——所以它同时也是 PnL 端点(无需自己做 subgraph 计算)。
import requests
r = requests.get("https://data-api.polymarket.com/positions",
params={"user": PROXY_ADDRESS})
for p in r.json():
print(p["title"], p["outcome"], p["size"],
"avg", p["avgPrice"], "pnl", p["cashPnl"])
curl -s "https://data-api.polymarket.com/positions?user=$PROXY_ADDRESS"
真实响应(一个持仓,已精简):
[
{
"proxyWallet": "0xbfd068…a0c8",
"asset": "30114730…931285", // token_id(可在 CLOB 交易)
"conditionId": "0x4589bb…b3005c",
"size": 100, // 持有份额
"avgPrice": 0.01, // 你的成本基础
"curPrice": 0.00, // 当前标记价
"currentValue": 0.00,
"cashPnl": -1.00, // 盈亏(美元)
"percentPnl": -100,
"realizedPnl": 0,
"redeemable": true, // 市场已结算 → 可赎回
"title": "Bitcoin Up or Down - June 14, 8:00-8:05AM ET",
"outcome": "Down", "outcomeIndex": 1
}
]
| 字段 | 含义 |
|---|---|
asset | 即 token_id——可直接交给 CLOB 读取订单簿或交易。 |
size / avgPrice | 持有份额和你的平均进场价(成本基础)。 |
cashPnl / percentPnl / realizedPnl | 未实现盈亏(美元)、未实现盈亏(%)和已实现盈亏(美元)——本来要你自己算的 PnL。 |
redeemable | 市场结算后为 true,此时持仓可兑现。 |
/trades - 成交记录
每一笔成交,最新在前。可按 user=(单个钱包的历史)和/或 market= 过滤,
或直接用 limit= 拉取全量数据流。这是你回测和跟单的数据来源。
curl -s "https://data-api.polymarket.com/trades?user=$PROXY_ADDRESS&limit=100"
真实响应(一笔成交,已精简):
[
{
"proxyWallet": "0xad05d2…3a3d",
"side": "BUY",
"asset": "54898429…124028", // 成交的 token_id
"conditionId": "0x0e6eb3…a83290",
"size": 10,
"price": 0.10,
"timestamp": 1781469243, // unix 秒
"title": "Bitcoin Up or Down - June 14, 4:30-4:35PM ET",
"outcome": "Down", "outcomeIndex": 1,
"transactionHash": "0x4c0e78…38064d" // 可在 PolygonScan 上验证
}
]
每笔成交都带着其背后的 proxyWallet——所以 /trades 也是你发现可跟随钱包的方式:
拉取某个市场最近的成交,再逐个拉取每个钱包的 /positions。
/value - 用一个数字表示组合价值
最快的健康检查——一个钱包的当前总价值:
v = requests.get("https://data-api.polymarket.com/value",
params={"user": PROXY_ADDRESS}).json()[0]["value"]
print(f"${v:,.2f}")
curl -s "https://data-api.polymarket.com/value?user=$PROXY_ADDRESS"
真实响应:
[ { "user": "0xbfd068…a0c8", "value": 2.3236 } ]
/activity - 完整的链上动作日志(不只是成交)
大多数机器人会漏掉的端点。/activity 返回一个钱包在链上做的一切,而不只是成交:可按
type = TRADE、SPLIT、MERGE、REDEEM、
REWARD 或 CONVERSION 过滤,也可按 start / end(unix 秒)过滤。
这样你就能观察一个钱包把 pUSD 拆分为 Yes+No、再合并回去、赎回一个已结算的持仓,
或领取做市奖励——这些都是订单簿从不显示的 CTF 原语。
curl -s "https://data-api.polymarket.com/activity?user=$PROXY_ADDRESS&type=SPLIT,MERGE,REDEEM&limit=50"
把它与 CTF 原语搭配:/activity
是拆分 / 合并 / 赎回的读取侧,所以一个铸造或赎回份额组的策略,无需接触节点就能对账自己的链上历史。
/holders - 谁持有某个市场
某个市场每个结果的头部持有者——用于集中度检查和巨鲸发现:
curl -s "https://data-api.polymarket.com/holders?market=$CONDITION_ID&limit=20"
实战:20 行的钱包追踪器
从成交记录中发现一个活跃钱包,然后导出它的持仓和 PnL——全程无需密钥:
import requests
D = "https://data-api.polymarket.com"
# 1) 谁刚刚交易了 BTC?
who = requests.get(f"{D}/trades", params={"limit": 1}).json()[0]["proxyWallet"]
# 2) 他们的未平仓持仓 + 实时 PnL
for p in requests.get(f"{D}/positions", params={"user": who}).json():
print(f"{p['title'][:40]:40} {p['outcome']:4} {p['size']:>6} sh "
f"PnL ${p['cashPnl']:+.2f} ({p['percentPnl']:+.0f}%)")
# 3) 他们的总价值
print("total $", requests.get(f"{D}/value", params={"user": who}).json()[0]["value"])
下一步:CLOB API(读取订单簿、交易) · Gamma API(查找市场) · 构建一个跟单机器人。



