API · Dokumentacja

Gamma API pod adresem gamma-api.polymarket.com to „katalog" - to nim odkrywasz rynki i wydarzenia oraz pobierasz identyfikatory tokenów, których CLOB potrzebuje do handlu. Jest publiczne, bez uwierzytelniania, więc każdy endpoint zbadasz z przeglądarki lub curla już teraz, podobnie jak żywe narzędzia na tej stronie.

W skrócie
  • Bazowy URL: https://gamma-api.polymarket.com · bez uwierzytelniania, tylko do odczytu.
  • Limit: ~4000 żądań / 10 s łącznie (/events ~500, /markets ~300).
  • Krok 1 niemal każdego bota: zamień rynek w jego identyfikatory tokenów, a potem handluj nimi na CLOB.
  • Wszystko jest w JSON. Trzy ważne pola wracają jako łańcuchy JSON, które trzeba sparsować ponownie (patrz niżej).

Endpointy, których faktycznie użyjesz

EndpointZwracaUżyj do
GET /marketsRynki z metadanymi, cenami na żywo i identyfikatorami tokenów.Zamień slug na identyfikatory tokenów; skanuj handlowalne rynki.
GET /eventsWydarzenia (grupa powiązanych rynków) z ich rynkami podrzędnymi.Przeglądaj po temacie; renderuj karty wielowynikowe.
GET /public-search?q=Wyszukiwanie pełnotekstowe po wydarzeniach i rynkach.Znajdź rynek, gdy znasz tylko nazwę.
GET /tagsTagi kategorii (polityka, krypto, sport...).Odkryj poprawne filtry tag_slug.

Częste parametry zapytania w /markets i /events: active=true, closed=false, slug=, tag_slug=, order=volume24hr, ascending=false, limit= i offset= do stronicowania.

GET /markets - żądanie i odpowiedź

Poproś o jeden rynek po slugu. Dostajesz tablicę (nawet dla pojedynczego rynku), więc weź element [0]:

curl -s "https://gamma-api.polymarket.com/markets?slug=will-it-rain-in-nyc-today" | jq '.[0]'
import requests, json
m = requests.get("https://gamma-api.polymarket.com/markets",
                 params={"slug": "will-it-rain-in-nyc-today"}).json()[0]

Skrócona, opisana odpowiedź (pola, którymi bot się przejmuje):

{
  "id": "519284",
  "question": "Will it rain in NYC today?",
  "slug": "will-it-rain-in-nyc-today",
  "conditionId": "0x1f2e...c0",      // the market id (NOT what you trade on)
  "active": true,                    // listed and live
  "closed": false,                   // not yet resolved
  "acceptingOrders": true,           // the CLOB is currently taking orders
  "outcomes": "[\"Yes\", \"No\"]",          // JSON string -> parse it
  "clobTokenIds": "[\"7142...\", \"1098...\"]", // JSON string, aligned with outcomes
  "outcomePrices": "[\"0.62\", \"0.38\"]",     // JSON string, last prices
  "bestBid": 0.61,
  "bestAsk": 0.63,
  "lastTradePrice": 0.62,
  "volume24hr": 48213.5,
  "endDate": "2026-06-16T00:00:00Z"
}

Dwa identyfikatory tokenów wyników leżą wewnątrz clobTokenIds. To na nich handluje CLOB - odczytaj je, a możesz złożyć zlecenie.

Pułapka nr 1: pola będące łańcuchami zakodowanymi w JSON

Gamma zwraca clobTokenIds, outcomes i outcomePrices jako łańcuchy zakodowane w JSON wewnątrz JSON, więc musisz je zdekodować drugi raz. I nigdy nie zapisuj na sztywno, który token to „Tak": odczytaj sparsowaną tablicę outcomes i mapuj po nazwie, bo kolejność nie jest gwarantowana.

import requests, json
m = requests.get("https://gamma-api.polymarket.com/markets",
                 params={"slug": SLUG}).json()[0]
outcomes   = json.loads(m["outcomes"])        # e.g. ["Yes", "No"]
token_ids  = json.loads(m["clobTokenIds"])    # aligned with outcomes
prices     = json.loads(m["outcomePrices"])   # aligned with outcomes
yes_token  = token_ids[outcomes.index("Yes")]
print(yes_token, prices[outcomes.index("Yes")])
const r = await fetch(`https://gamma-api.polymarket.com/markets?slug=${SLUG}`);
const m = (await r.json())[0];
const outcomes  = JSON.parse(m.outcomes);
const tokenIds  = JSON.parse(m.clobTokenIds);
const yesToken  = tokenIds[outcomes.indexOf("Yes")];
curl -s "https://gamma-api.polymarket.com/markets?slug=$SLUG" | jq -r '.[0].clobTokenIds | fromjson | .[0]'

Wypróbuj na prawdziwym rynku - wklej slug i pobierz jego identyfikatory tokenów na żywo:

Skanuj w poszukiwaniu handlowalnych rynków

Typowe zapytanie odkrywcze bota prosi o aktywne, otwarte rynki, od najbardziej ruchliwych, w jednej kategorii:

GET https://gamma-api.polymarket.com/markets
    ?active=true&closed=false&order=volume24hr&ascending=false&limit=20&tag_slug=politics

Przefiltruj wynik po stronie klienta do rynków faktycznie handlowalnych, zanim na nich zadziałasz:

# keep only markets the CLOB will accept orders on right now
tradeable = [m for m in markets
             if m.get("active") and not m.get("closed") and m.get("acceptingOrders")]

Wyszukaj na żywo (to wywołuje /public-search, a potem ładuje identyfikatory tokenów per rynek):

Stronicowanie i świeżość

  • Stronicowanie: dodaj limit i offset i przechodź, aż dostaniesz krótką stronę. Trzymaj limit ≤ 500 na /events, ≤ 300 na /markets.
  • Świeżość: ceny (bestBid, bestAsk, lastTradePrice) ruszają się nieustannie. Gamma nadaje się do odkrywania i przybliżonej ceny, ale kwotuj i handluj na żywej księdze CLOB, a nie na cache'owanej cenie Gamma.
  • Cache: cache'uj mapowanie slug -> token_id (jest stabilne), a nie ceny.

GET /events - grupy wielowynikowe

Wydarzenie łączy powiązane rynki (np. „Wybory na burmistrza NYC" zawierają po jednym rynku na kandydata). Użyj go do renderowania kart wielowynikowych lub znalezienia każdego rynku na dany temat:

curl -s "https://gamma-api.polymarket.com/events?slug=nyc-mayor-2025" | jq '.[0].markets | length'

Każde wydarzenie ma tablicę markets; każdy wpis ma te same pola-łańcuchy clobTokenIds / outcomes co rynek najwyższego poziomu, więc obowiązuje to samo parsowanie.

conditionId vs token_id. Gamma daje ci conditionId rynku i jego clobTokenIds (po jednym na wynik). CLOB handluje na token_id, nigdy na conditionId - ich mylenie to najczęstszy błąd pierwszego bota.

Opis pól (te, które gryzą)

PoleZnaczenie
conditionIdIdentyfikator rynku. Używany do rozstrzygania i wyszukiwań on-chain, nie do składania zleceń.
clobTokenIdsTablica-łańcuch JSON z identyfikatorami tokenów wyników. Sparsuj ją; handluj nimi na CLOB.
outcomes / outcomePricesTablice-łańcuchy JSON, wyrównane indeksami z clobTokenIds.
active / closedWystawiony-i-żywy / rozstrzygnięty. Rynek handlowalny to active && !closed.
acceptingOrdersCzy CLOB przyjmie teraz zlecenia. Sprawdź to przed kwotowaniem.
bestBid / bestAsk / lastTradePriceCeny orientacyjne. Wiążąca cena pochodzi z księgi CLOB.

Dalej: API CLOB (handel na token_id) · Data API (historia i PnL) · Napraw błąd.