API · Referenz

Die Gamma API unter gamma-api.polymarket.com ist der „Katalog“ – so entdeckst du Märkte und Events und erhältst die Token-IDs, die der CLOB zum Handeln braucht. Sie ist öffentlich, keine Auth, du kannst also jeden Endpunkt jetzt sofort aus einem Browser oder per curl erkunden, ebenso wie die Live-Tools auf dieser Seite.

Auf einen Blick
  • Basis-URL: https://gamma-api.polymarket.com · keine Authentifizierung, read-only.
  • Rate-Limit: ~4.000 Requests / 10 s insgesamt (/events ~500, /markets ~300).
  • Schritt 1 fast jedes Bots: einen Markt in seine Token-IDs verwandeln, dann auf dem CLOB handeln.
  • Alles ist JSON. Drei wichtige Felder kommen als JSON-Strings zurück, die du erneut parsen musst (siehe unten).

Die Endpunkte, die du tatsächlich nutzt

EndpunktGibt zurückVerwende ihn, um
GET /marketsMärkte mit Metadaten, Live-Preisen und Token-IDs.einen Slug zu Token-IDs auflösen; handelbare Märkte scannen.
GET /eventsEvents (eine Gruppe verwandter Märkte) mit ihren Child-Märkten.nach Thema browsen; Multi-Outcome-Karten rendern.
GET /public-search?q=Volltextsuche über Events und Märkte.einen Markt finden, wenn du nur einen Namen kennst.
GET /tagsDie Kategorie-Tags (Politik, Krypto, Sport …).gültige tag_slug-Filter entdecken.

Häufige Query-Parameter bei /markets und /events: active=true, closed=false, slug=, tag_slug=, order=volume24hr, ascending=false, limit= und offset= für die Paginierung.

GET /markets – Request und Response

Frag einen Markt per Slug ab. Du erhältst ein Array zurück (auch für einen einzelnen Markt), nimm also 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]

Eine gekürzte, annotierte Antwort (die Felder, die einen Bot interessieren):

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

Die zwei Outcome-Token-IDs liegen in clobTokenIds. Sie sind das, worauf der CLOB handelt – lies sie, und du kannst eine Order platzieren.

Der Fallstrick Nr. 1: JSON-kodierte String-Felder

Gamma gibt clobTokenIds, outcomes und outcomePrices als JSON-kodierte Strings im JSON zurück, du musst sie also ein zweites Mal dekodieren. Und hardkodiere nie, welcher Token „Yes“ ist: Lies das geparste outcomes-Array und mappe nach Namen, denn die Reihenfolge ist nicht garantiert.

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]'

Probiere es an einem echten Markt – füge einen Slug ein und zieh seine Token-IDs live:

Nach handelbaren Märkten scannen

Die typische Discovery-Query eines Bots fragt nach aktiven, offenen Märkten, meistbeschäftigt zuerst, in einer Kategorie:

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

Filtere das Ergebnis clientseitig auf Märkte, die wirklich handelbar sind, bevor du handelst:

# 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")]

Suche live (das ruft /public-search auf und lädt dann die Token-IDs je Markt):

Paginierung und Aktualität

  • Paginierung: Füge limit und offset hinzu und laufe, bis du eine kurze Seite erhältst. Halte limit ≤ 500 bei /events, ≤ 300 bei /markets.
  • Aktualität: Preise (bestBid, bestAsk, lastTradePrice) bewegen sich ständig. Gamma ist gut für Discovery und einen groben Preis, aber quote und handle am Live-CLOB-Buch, nicht an einem gecachten Gamma-Preis.
  • Caching: Cache das slug->token_id-Mapping (es ist stabil), nicht die Preise.

GET /events – Multi-Outcome-Gruppen

Ein Event bündelt verwandte Märkte (z. B. „NYC Mayoral Election“ hält einen Markt je Kandidat). Nutze es, um Multi-Outcome-Karten zu rendern oder jeden Markt zu einem Thema zu finden:

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

Jedes Event hat ein markets-Array; jeder Eintrag hat dieselben clobTokenIds- / outcomes-String-Felder wie ein Top-Level-Markt, dasselbe Parsing gilt also.

conditionId vs. token_id. Gamma gibt dir die conditionId eines Marktes und seine clobTokenIds (eine je Outcome). Der CLOB handelt auf token_id, nie auf conditionId – sie zu verwechseln ist der häufigste Erste-Bot-Bug.

Feldreferenz (die, die beißen)

FeldBedeutung
conditionIdDie Markt-Kennung. Für Auflösung und On-Chain-Lookups genutzt, nicht zum Platzieren von Orders.
clobTokenIdsJSON-String-Array der Outcome-Token-IDs. Parse es; handle diese auf dem CLOB.
outcomes / outcomePricesJSON-String-Arrays, index-ausgerichtet mit clobTokenIds.
active / closedGelistet-und-live / aufgelöst. Ein handelbarer Markt ist active && !closed.
acceptingOrdersOb der CLOB gerade Orders annimmt. Prüfe das vor dem Quoten.
bestBid / bestAsk / lastTradePriceIndikative Preise. Der maßgebliche Preis kommt vom CLOB-Buch.

Weiter: CLOB API (auf einer token_id handeln) · Data API (Historie & PnL) · Einen Fehler beheben.