API · 参考

位于 data-api.polymarket.com 的 Data API 是 Polymarket 的只读「数据仓库」—— 每个钱包的持仓、完整的成交记录、实时的组合价值,并内置 盈亏(PnL)。它完全公开:无需密钥、无需签名、无需账户。这使它成为最容易上手的地方—— 你可以完全基于它构建一整个分析或跟单机器人,全程不碰任何私钥。下面每个示例都是可在本页沙盒中运行的真实调用。

一览
  • Base URL:https://data-api.polymarket.com · 无需认证。
  • 要传入的地址:交易者的代理钱包(其链上 Polymarket 地址),而非签名密钥。
  • 速率限制:约 1,000 次 / 10 秒(/trades 200,/positions 150)——会被限流,而非拒绝。
  • 返回纯 JSON 数组。可与 Gamma(发现)和 CLOB(交易)搭配使用。

/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"])
要传入代理钱包。使用交易者的 Polymarket 代理地址 (持有资金、并显示在排行榜上的那个),而非签名/EOA 密钥。另外记住,时间戳是 unix 秒。

下一步:CLOB API(读取订单簿、交易) · Gamma API(查找市场) · 构建一个跟单机器人。