API · Dokumentacja

Data API pod adresem data-api.polymarket.com to „magazyn" Polymarket tylko do odczytu - pozycje każdego portfela, pełna taśma transakcji oraz bieżąca wartość portfela, z wbudowanym PnL. Jest całkowicie publiczne: bez klucza, bez podpisywania, bez konta. To najłatwiejsze miejsce na start - możesz zbudować całego bota analitycznego lub copy-tradingowego, nie dotykając nigdy klucza prywatnego. Każdy przykład poniżej to prawdziwe wywołanie, które możesz uruchomić w piaskownicy na tej stronie.

W skrócie
  • Bazowy URL: https://data-api.polymarket.com · bez uwierzytelniania.
  • Adres do przekazania: portfel proxy tradera (jego adres Polymarket on-chain), nie klucz podpisujący.
  • Limit: ~1000 żądań / 10 s (/trades 200, /positions 150) - dławione, nie odrzucane.
  • Zwraca zwykłe tablice JSON. Łącz z Gamma (odkrywanie) i CLOB (handel).

/positions - co trzyma portfel (z PnL)

Kluczowy endpoint. Przekaż portfel i otrzymaj każdą otwartą pozycję, każdą już wzbogaconą o podstawę kosztową i zysk/stratę - więc pełni on zarazem rolę endpointu PnL (bez liczenia z subgrafu).

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"

Prawdziwa odpowiedź (jedna pozycja, skrócona):

[
  {
    "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
  }
]
PoleZnaczenie
assettoken_id - podaj go wprost do CLOB, by odczytać księgę lub handlować.
size / avgPriceLiczba trzymanych udziałów i twoja średnia cena wejścia (podstawa kosztowa).
cashPnl / percentPnl / realizedPnlNiezrealizowany $, niezrealizowany % i zrealizowany $ - PnL, który inaczej liczyłbyś sam.
redeemabletrue, gdy rynek się rozstrzygnie i pozycję można spieniężyć.

/trades - taśma transakcji

Każda realizacja, od najnowszej. Filtruj po user= (historia jednego portfela) lub market=, albo ciągnij cały strumień z limit=. To twoje źródło danych do backtestu i copy-tradingu.

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

Prawdziwa odpowiedź (jedna transakcja, skrócona):

[
  {
    "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
  }
]

Każda transakcja niesie stojący za nią proxyWallet - więc /trades to zarazem sposób na znajdowanie portfeli do śledzenia: pobierz ostatnie realizacje na rynku, a potem /positions każdego z tych portfeli.

/value - wartość portfela w jednej liczbie

Najszybszy sprawdzian kondycji - łączna bieżąca wartość portfela:

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"

Prawdziwa odpowiedź:

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

/activity - pełny dziennik działań on-chain (nie tylko transakcje)

Endpoint, który omija większość botów. /activity zwraca wszystko, co portfel zrobił on-chain, nie tylko realizacje: filtruj po type = TRADE, SPLIT, MERGE, REDEEM, REWARD lub CONVERSION oraz po start / end (sekundy unix). W ten sposób podglądasz, jak portfel dzieli pUSD na Tak+Nie, łączy z powrotem, spienięża rozstrzygniętą pozycję lub zbiera nagrody makera - prymitywy CTF, których arkusz zleceń nigdy nie pokazuje.

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

Łącz to z prymitywami CTF: /activity to strona odczytu operacji split / merge / redeem, więc strategia bijąca lub spieniężająca zestawy może uzgodnić własną historię on-chain bez dotykania węzła.

/holders - kto trzyma rynek

Najwięksi posiadacze per wynik danego rynku - przydatne do sprawdzania koncentracji i wyszukiwania wielorybów:

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

Przepis: 20-liniowy tracker portfela

Znajdź aktywny portfel z taśmy, a potem zrzuć jego księgę z PnL - wszystko bez klucza:

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"])
Przekazuj portfel proxy. Użyj adresu proxy tradera na Polymarket (tego, który trzyma środki i widnieje w rankingu), a nie klucza podpisującego/EOA. I pamiętaj, że znaczniki czasu to sekundy unix.

Dalej: API CLOB (odczyt księgi, handel) · Gamma API (znajdowanie rynków) · Zbuduj bota copy-tradingowego.