API · Referenz

Der CLOB (Central Limit Order Book) unter clob.polymarket.com ist der Ort, an dem Orders ruhen und matchen. Du liest das Buch, Preise und Tick-Size ohne Auth und handelst (Orders platzieren/stornieren, deine Balance lesen) mit API-Zugangsdaten und Signierung. Das ist die CLOB-V2-Referenz – das Collateral ist pUSD, Gebühren sind on-chain, und Maker zahlen null.

Das Orderbuch lesen (keine Auth)

from py_clob_client_v2 import ClobClient   # pip install py-clob-client-v2
client = ClobClient(host="https://clob.polymarket.com", chain_id=137)   # read-only: no key
book = client.get_order_book(token_id)
mid  = client.get_midpoint(token_id)
print(book.bids[0].price, book.asks[0].price, mid)
// polymarket_client_sdk_v2 (official, repo rs-clob-client-v2)
use polymarket_client_sdk_v2::clob::{Client, Config};
use polymarket_client_sdk_v2::clob::types::request::OrderBookSummaryRequest;
let client = Client::new("https://clob.polymarket.com", Config::default())?;
let book = client.order_book(&OrderBookSummaryRequest::builder().token_id(token_id).build()).await?;
curl -s "https://clob.polymarket.com/book?token_id=$TOKEN_ID"

Beispiel-Antwort

{
  "market": "0x...",
  "bids": [ { "price": "0.62", "size": "1400" }, { "price": "0.61", "size": "900" } ],
  "asks": [ { "price": "0.64", "size": "1100" }, { "price": "0.65", "size": "2000" } ]
}

Read-Endpunkte

EndpunktGibt zurück
GET /book?token_id=Vollständiges Orderbuch (Bids / Asks).
GET /price?token_id=&side=Bester Bid oder Ask.
GET /midpoint?token_id=Mid = (bester Bid + bester Ask) / 2.
GET /spread?token_id=Bester Ask − bester Bid.
GET /tick-size?token_id=Minimaler Preisschritt (runde deinen Preis darauf).

Die Limits sind hoch: CLOB ~9.000 Requests / 10 s, /book und /price 1.500 / 10 s, und Über-Limit-Requests werden gedrosselt, nicht abgelehnt. Mehr zu 429s.

Eine Order platzieren & stornieren (Auth)

Ein Aufruf baut, signiert (das V2-Order-Struct) und postet deine Order. Du wählst einen Order-Typ:

TypVerhalten
GTCGood-Till-Cancelled – ruht auf dem Buch, bis ausgeführt oder storniert.
GTDGood-Till-Date – ruht bis zu einem Ablaufzeitstempel.
FOKFill-Or-Kill – die ganze Order sofort ausführen oder stornieren.
FAKFill-And-Kill – sofort ausführen, was geht, den Rest stornieren.
from py_clob_client_v2 import (ClobClient, OrderArgs, OrderType,
                               PartialCreateOrderOptions, Side, OrderPayload)

# authenticated client (creds from create_or_derive_api_key - see Authentication)
client = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=PK, creds=creds)

resp = client.create_and_post_order(
    order_args=OrderArgs(token_id=token_id, price=0.62, side=Side.BUY, size=10),
    options=PartialCreateOrderOptions(tick_size="0.01", neg_risk=False),  # read both off the market
    order_type=OrderType.GTC,            # GTC, GTD, FOK or FAK
)
# resp -> {"success": true, "orderID": "0x...", "status": "live"}
client.cancel_order(OrderPayload(orderID=resp["orderID"]))   # cancel
Zwei Pro-Markt-Einstellungen. Übergib die echte tick_size des Marktes ("0.01" oder "0.001") und setze neg_risk=True für Multi-Outcome-„Negative-Risk“-Märkte – lies beides von Gamma ab (orderPriceMinTickSize, negRisk), bevor du signierst. Außerdem: Die Mindest-Order-Größe ist 5 Anteile, und dein Preis muss bereits auf die Tick gerundet sein, sonst wird die Order abgelehnt.
V2-Order-Fakten. Das signierte Struct ließ nonce, feeRateBps, taker und expiration fallen und fügte timestamp, metadata und builder hinzu; die Exchange-EIP-712-Domain-Version ist "2". Gebühren werden on-chain beim Match erhoben – Maker zahlen 0, nur Taker zahlen. Vor dem Handeln musst du pUSD + Conditional Tokens für die drei V2-Contracts genehmigen (siehe den Allowance-Fix).

Gebühren: nur Taker zahlen, und der Satz krümmt sich

Maker werden nie belastet. Taker zahlen eine Gebühr, die nicht flach ist – sie skaliert mit der Unsicherheit des Marktes und variiert je Kategorie. Die Formel:

fee = shares × feeRate × p × (1 - p)      # p = share price, 0..1

Der p·(1-p)-Term bedeutet, dass die Gebühr bei 50/50 ihr Maximum erreicht und zu den 1-¢- und 99-¢-Rändern hin schrumpft – ein nahezu sicheres Ergebnis ist also günstig zu nehmen, ein Münzwurf teuer. Taker- feeRate je Kategorie:

KategorieTaker-feeRate
Krypto0,07 (7 bps) – der höchste
Wirtschaft / Kultur / Wetter0,05
Finanzen / Politik / Tech / Mentions0,04
Sport0,03
Geopolitik & Weltgeschehen0 – gebührenfrei

Lies den Live-Satz je Token mit GET /fee-rate-bps?token_id=, statt ihn zu hardkodieren; Gebühren runden auf 5 Dezimalstellen (min. 0,00001 pUSD). Dass Maker null zahlen, ist der Grund, warum die meisten vorteilslosen Bots quoten statt nehmen.

Negative-Risk-Märkte (Multi-Outcome)

Multi-Kandidaten-Events („Wer gewinnt die Wahl?“) sind Neg-Risk-Märkte: Ihre Outcomes sind verknüpft, ein No-Anteil in einem Outcome wandelt sich also über den Neg Risk Adapter in einen Yes-Anteil in jedem anderen um – kapitaleffizient, aber mechanisch anders. Sie laufen auf anderen Contracts als Binärmärkte, du musst also neg_risk=True in den Order-Optionen übergeben (lies das negRisk-Flag des Marktes von Gamma ab). Lässt du es weg, wird die Order gegen die falsche Börse signiert und abgelehnt.

Conditional Tokens: Split, Merge, Redeem (jenseits des Buchs)

Unter jedem Markt liegt das Conditional Token Framework (CTF). Outcome-Tokens sind ERC-1155- Tokens, und jedes Yes/No-Paar ist durch genau 1,00 $ pUSD gedeckt, das im CTF-Contract gesperrt ist. Das gibt dir drei Primitive, die das Orderbuch allein nicht bietet:

OperationWas sie tutWarum ein Bot sie nutzt
Split1 $ pUSD sperren → 1 Yes + 1 No mintenBestand schaffen, ohne den Spread zu kreuzen; beide Seiten quoten.
Merge1 Yes + 1 No burnen → 1 $ pUSD zurückgewinnenEin gehedgtes Paar sofort verlassen – kein Warten auf Auflösung, keine Taker-Gebühr.
RedeemNach der Auflösung, gewinnender Token → 1,00 $ pUSDEine aufgelöste Position auszahlen (redeemPositions).

Split und Merge sind die Basis der CTF-Arbitrage: Handeln Yes + No unter 1,00 $ auf dem Buch, kaufe beide und merge zurück auf 1,00 $; handeln sie über 1,00 $, split 1 $ in ein frisches Paar und verkaufe beide. Die Einlösung rechnet über den ConditionalTokens-Contract ab, sobald das Oracle das Ergebnis on-chain postet – eine Position zeigt redeemable: true auf der Data API, wenn sie einlösbar ist. Position-IDs leiten sich über getConditionId → getCollectionId → getPositionId ab.

Fortgeschritten: RFQ & Combo-Märkte (für ernsthafte Maker)

Jenseits des Orderbuchs betreibt Polymarket ein Request-for-Quote (RFQ)-System, besonders genutzt für Combo-Märkte – bestehende Märkte, die zu mehrteiligen zusammengesetzten Positionen gebündelt werden. Der Ablauf hat drei Phasen: Ein Taker fordert ein Quote an, Maker konkurrieren mit Quotes, und der gewählte Maker erhält einen Last Look, um vor der Ausführung zu bestätigen oder abzulehnen.

  • Combos entdecken: GET /v1/rfq/combo-markets (öffentlich; limit 1–100, cursor, exclude). Jedes Combo exponiert zwei Position-IDs (Yes = Index 0, No = Index 1).
  • Als Maker quoten: POST combos-rfq-api.polymarket.com/v1/maker/quotes (L2-Auth). Du erzeugst die quote_id selbst und sendest rfq_id, maker_address, signature_type, eine signierte Exchange-Order und price_e6 / size_e6 als Sechs-Dezimal-Festkomma-Strings (die *_e6-Konvention vermeidet Float-Präzisionsverlust).
  • Last Look: Während das RFQ AWAITING_MAKER_CONFIRMATION ist, antworte CONFIRM, DECLINE oder lass es TIMED_OUT laufen.

RFQ-Zustandsmaschine: CREATED → COLLECTING_QUOTES → AWAITING_REQUESTER_ACCEPTANCE → AWAITING_MAKER_CONFIRMATION → EXECUTING → FILLED (sonst FAILED / EXPIRED / CANCELED / REJECTED). Abonniere das RFQ-WebSocket-Gateway für den Live-Status. Das ist eine Nische – die meisten Bots brauchen nur das CLOB-Buch oben –, aber so wird mehrteilige und Combo-Liquidität bepreist.

Balance & Allowance prüfen

client.get_balance_allowance(...)   # collateral (pUSD) and conditional-token allowances

Zeigt dies null Allowance, genehmige pUSD/CTF für die V2-Exchange-Contracts, bevor du orderst.

Yes-/No-Token-IDs. Jeder Binärmarkt hat zwei Token-IDs. Hardkodiere nicht, welche Yes ist – lies das geparste outcomes-Array (Gamma gibt es zurück, und clobTokenIds, als JSON-kodierte Strings, die du dekodieren musst) und mappe nach Namen.

Weiter: Authentifizierung & Wallets · WebSocket: das Buch streamen · Einen CLOB-Fehler beheben.