The Bot Ledger
DE

Start / Anleitungen

Polymarket-API-Anleitung: Trading-Bot in 5 Schritten anbinden

Polymarket-API-Grundlagen für einen Bot: Gamma für Märkte, CLOB für Orders, Auth, Orderbuch, Orders platzieren, Fills und Gewinne einlösen, in Python.

A candlestick price chart on a monitor
Auth
Wallet-Signatur, daraus wird ein API-Key abgeleitet. Lass den privaten Schlüssel möglichst nicht auf dem Bot-Host liegen.
Lesen
Gamma API für Märkte und Metadaten, ohne Auth. CLOB API für das Orderbuch.
Handeln
CLOB API, signierte Anfragen. Käufe als Market-Orders, Verkäufe als Limit-Orders.
Taker-Gebühr
0.07 x p x (1-p) pro Anteil auf Krypto-Märkten. Maker zahlen nichts.
Abrechnung
Kurze Krypto-Märkte werden über einen 60-Sekunden-Orakel-Durchschnitt gegen die Fenstereröffnung abgerechnet.
Geografie
Sperrt die USA, Großbritannien, Frankreich und mehrere andere Länder.
Doku
docs.polymarket.com

Fünf Schritte, bewusst vereinfacht. Die Snippets zeigen die Form jedes Aufrufs, keinen Produktionscode: keine Retries, keine Fehlerbehandlung, kein Backoff bei Rate-Limits. Die offizielle Client-Bibliothek übernimmt das Signieren; die Beispiele nutzen sie.

  1. Client installieren und Credentials ableiten

    Polymarket ist 2026 auf CLOB v2 umgestiegen, nimm also den v2-Client. Die Credentials werden einmal aus einer Wallet-Signatur abgeleitet und dann wiederverwendet.

    pip install py-clob-client-v2
    
    from py_clob_client.client import ClobClient
    
    HOST = "https://clob.polymarket.com"
    client = ClobClient(HOST, key=PRIVATE_KEY, chain_id=137, signature_type=1)
    creds = client.create_or_derive_api_key()   # einmal signieren, Ergebnis aufbewahren
    client.set_api_creds(creds)

    Per E-Mail angelegte Konten nutzen einen anderen Signaturtyp als Wallet-Konten. Mehrere Typen authentifizieren problemlos, aber nur der richtige sieht dein Guthaben, also prüfe den Guthaben-Aufruf, bevor du handelst.

  2. Den Markt und seine Token-IDs finden

    Gamma ist der Katalog, nur lesend. Die Slugs der kurzen Krypto-Märkte sind deterministisch, und ein geschlossener Markt verschwindet aus Slug-Abfragen, bleibt aber per numerischer ID erreichbar.

    import requests
    
    GAMMA = "https://gamma-api.polymarket.com"
    m = requests.get(f"{GAMMA}/markets", params={"slug": "btc-updown-5m-1757500800"}).json()[0]
    up_token, down_token = m["clobTokenIds"]     # ein Token pro Ergebnis
    market_id = m["id"]                           # aufbewahren: überlebt das Schließen
  3. Das Orderbuch lesen

    book = client.get_order_book(up_token)
    best_ask = float(book.asks[0].price)    # was ein Kauf jetzt zahlt
    best_bid = float(book.bids[0].price)    # was ein Verkauf jetzt bekommt
    spread = best_ask - best_bid            # Fenster überspringen, wenn das breit ist

    Logge jedes Lesen mit der Uhrzeit, zu der du es gelesen hast. Ein Fenster ohne frisches Lesen ist kein Trade, den du hättest machen können.

  4. Eine Order platzieren

    Ein Fill-or-Kill-Kauf muss eine Market-Order über einen Dollarbetrag mit höchstens zwei Dezimalstellen sein. Verkäufe funktionieren als Limit-Orders, die nehmen, was da ist.

    from py_clob_client.clob_types import MarketOrderArgs, OrderArgs, OrderType
    
    buy = client.create_market_order(MarketOrderArgs(token_id=up_token, amount=25.00, side="BUY"))
    resp = client.post_order(buy, OrderType.FOK)
    assert resp.get("success"), resp          # bei allem anderen abbrechen, nie einen Fill annehmen
    
    sell = client.create_order(OrderArgs(token_id=up_token, price=0.90, size=30, side="SELL"))
    client.post_order(sell, OrderType.FAK)

    Eine Order kann auf der Leitung einen Fehler werfen und trotzdem ausgeführt werden. Frag nach jeder Exception deine Trades ab und gleiche ab, bevor das nächste Fenster kommt.

  5. Fills lesen und Gewinne einlösen

    Gewinne lösen sich nicht von selbst ein. Nach der Abrechnung liegen die Anteile in der Wallet, bis du die Condition einlöst, und ein nicht eingelöstes Guthaben blockiert irgendwann neue Orders.

    fills = client.get_trades()                # deine Ausführungen, mit gezahlter Gebühr pro Fill
    # Das Einlösen ist ein On-Chain-Aufruf pro Condition-ID. Der Relayer-Client kapselt ihn;
    # ohne ihn jeden Tag in der Web-Oberfläche einlösen.

Was du vor echtem Geld prüfen solltest

  • Prüfe, ob die Gebühr auf deinem ersten echten Fill 0.07 x p x (1-p) entspricht. Bei jedem geloggten Fill war das der Fall.
  • Das Order-Minimum liegt bei 5 Anteilen; winzige prozentuale Einsätze werden aufgerundet oder abgelehnt.
  • Die Rate-Limits sind für einen Bot großzügig, aber bündle Orderbuch-Abfragen, wo die API es erlaubt.
  • Maker-Prämien gibt es auf manchen Märkten, und sie verlangen eine Mindestordergröße, derzeit 50 Anteile. Ein Quote über 10 Anteile verdient nichts.