API · Referenz

Die Data API unter data-api.polymarket.com ist Polymarkets read-only „Warehouse“ – die Positionen jeder Wallet, das vollständige Trade-Band und der Live- Portfoliowert, mit eingebautem PnL. Sie ist vollständig öffentlich: kein Schlüssel, kein Signieren, kein Konto. Das macht sie zum einfachsten Startpunkt – du kannst einen ganzen Analyse- oder Copy-Trading-Bot darauf bauen, ohne je einen Private Key zu berühren. Jedes Beispiel unten ist ein echter Aufruf, den du in der Sandbox auf dieser Seite ausführen kannst.

Auf einen Blick
  • Basis-URL: https://data-api.polymarket.com · keine Authentifizierung.
  • Zu übergebende Adresse: die Proxy-Wallet des Traders (seine On-Chain-Polymarket-Adresse), nicht ein Signier-Schlüssel.
  • Rate-Limit: ~1.000 Req / 10 s (/trades 200, /positions 150) – gedrosselt, nicht abgelehnt.
  • Gibt einfache JSON-Arrays zurück. Kombiniere mit Gamma (Discovery) und CLOB (Handel).

/positions – was eine Wallet hält (mit PnL)

Der Arbeitspferd-Endpunkt. Übergib eine Wallet und erhalte jede offene Position, jede bereits angereichert mit Kostenbasis und Gewinn/Verlust – dieser dient also zugleich als PnL-Endpunkt (keine Subgraph-Mathematik nötig).

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"

Echte Antwort (eine Position, gekürzt):

[
  {
    "proxyWallet": "0xbfd068…a0c8",
    "asset":       "30114730…931285",   // the token_id (CLOB-tradeable)
    "conditionId": "0x4589bb…b3005c",
    "size":         100,                 // shares held
    "avgPrice":     0.01,                // your cost basis
    "curPrice":     0.00,                // current mark
    "currentValue": 0.00,
    "cashPnl":     -1.00,                // $ profit/loss
    "percentPnl":  -100,
    "realizedPnl":  0,
    "redeemable":   true,                // market resolved → can redeem
    "title":   "Bitcoin Up or Down - June 14, 8:00-8:05AM ET",
    "outcome": "Down", "outcomeIndex": 1
  }
]
FeldBedeutung
assetDie token_id – gib sie direkt an den CLOB, um das Buch zu lesen oder zu handeln.
size / avgPriceGehaltene Anteile und dein durchschnittlicher Einstiegspreis (Kostenbasis).
cashPnl / percentPnl / realizedPnlUnrealisiert $, unrealisiert % und realisiert $ – das PnL, das du sonst selbst berechnen würdest.
redeemabletrue, sobald der Markt aufgelöst ist und die Position ausgezahlt werden kann.

/trades – das Trade-Band

Jeder Fill, neueste zuerst. Filtere nach user= (Historie einer Wallet) und/oder market=, oder zieh einfach den Firehose mit limit=. Das ist deine Backtest- und Copy-Trading-Datenquelle.

curl -s "https://data-api.polymarket.com/trades?user=$PROXY_ADDRESS&limit=100"

Echte Antwort (ein Trade, gekürzt):

[
  {
    "proxyWallet": "0xad05d2…3a3d",
    "side":        "BUY",
    "asset":       "54898429…124028",   // token_id traded
    "conditionId": "0x0e6eb3…a83290",
    "size":         10,
    "price":        0.10,
    "timestamp":    1781469243,          // unix seconds
    "title":  "Bitcoin Up or Down - June 14, 4:30-4:35PM ET",
    "outcome": "Down", "outcomeIndex": 1,
    "transactionHash": "0x4c0e78…38064d" // verify on PolygonScan
  }
]

Jeder Trade trägt die proxyWallet dahinter – /trades ist also auch, wie du Wallets zum Folgen entdeckst: Zieh aktuelle Fills auf einem Markt, dann zieh die /positions jeder Wallet.

/value – Portfoliowert in einer Zahl

Der schnellste Gesundheitscheck – der aktuelle Gesamtwert einer Wallet:

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"

Echte Antwort:

[ { "user": "0xbfd068…a0c8", "value": 2.3236 } ]

/activity – das vollständige On-Chain-Aktionsprotokoll (nicht nur Trades)

Der Endpunkt, den die meisten Bots übersehen. /activity gibt alles zurück, was eine Wallet on-chain getan hat, nicht nur Fills: Filtere nach type = TRADE, SPLIT, MERGE, REDEEM, REWARD oder CONVERSION und nach start / end (Unix-Sekunden). So beobachtest du, wie eine Wallet pUSD in Yes+No splittet, zurück-merged, eine aufgelöste Position einlöst oder Maker-Rewards einsammelt – die CTF-Primitive, die das Orderbuch nie zeigt.

curl -s "https://data-api.polymarket.com/activity?user=$PROXY_ADDRESS&type=SPLIT,MERGE,REDEEM&limit=50"

Kombiniere es mit den CTF-Primitiven: /activity ist die Leseseite von Split / Merge / Redeem, sodass eine Strategie, die Sets mintet oder einlöst, ihre eigene On-Chain-Historie abgleichen kann, ohne einen Node zu berühren.

/holders – wer einen Markt hält

Top-Holder je Outcome eines Marktes – nützlich für Konzentrationsprüfungen und Whale-Discovery:

curl -s "https://data-api.polymarket.com/holders?market=$CONDITION_ID&limit=20"

Rezept: ein 20-Zeilen-Wallet-Tracker

Entdecke eine aktive Wallet aus dem Band, dann dumpe ihr Buch mit PnL – alles schlüssellos:

import requests
D = "https://data-api.polymarket.com"

# 1) who just traded BTC?
who = requests.get(f"{D}/trades", params={"limit": 1}).json()[0]["proxyWallet"]

# 2) their open book + live 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) their total value
print("total $", requests.get(f"{D}/value", params={"user": who}).json()[0]["value"])
Übergib die Proxy-Wallet. Nutze die Polymarket-Proxy-Adresse des Traders (die, die Gelder hält und auf der Bestenliste erscheint), nicht einen Signier-/EOA-Schlüssel. Und denk daran, dass die Zeitstempel Unix-Sekunden sind.

Weiter: CLOB API (das Buch lesen, handeln) · Gamma API (Märkte finden) · Einen Copy-Trading-Bot bauen.