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.
- 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 (
/trades200,/positions150) - 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
}
]
| Pole | Znaczenie |
|---|---|
asset | token_id - podaj go wprost do CLOB, by odczytać księgę lub handlować. |
size / avgPrice | Liczba trzymanych udziałów i twoja średnia cena wejścia (podstawa kosztowa). |
cashPnl / percentPnl / realizedPnl | Niezrealizowany $, niezrealizowany % i zrealizowany $ - PnL, który inaczej liczyłbyś sam. |
redeemable | true, 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"])
Dalej: API CLOB (odczyt księgi, handel) · Gamma API (znajdowanie rynków) · Zbuduj bota copy-tradingowego.



