API · Dokumentacja
CLOB (Central Limit Order Book) pod adresem clob.polymarket.com to miejsce, gdzie zlecenia
spoczywają i się dopasowują. Odczytujesz księgę, ceny i wielkość ticka bez uwierzytelniania, a handlujesz
(składasz / anulujesz zlecenia, odczytujesz saldo) z poświadczeniami API i podpisywaniem.
To dokumentacja CLOB V2 - zabezpieczeniem jest pUSD, opłaty są on-chain, a
makerzy płacą zero.
Odczytaj arkusz zleceń (bez uwierzytelniania)
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"
Przykładowa odpowiedź
{
"market": "0x...",
"bids": [ { "price": "0.62", "size": "1400" }, { "price": "0.61", "size": "900" } ],
"asks": [ { "price": "0.64", "size": "1100" }, { "price": "0.65", "size": "2000" } ]
}
Endpointy odczytu
| Endpoint | Zwraca |
|---|---|
GET /book?token_id= | Pełny arkusz zleceń (bids / asks). |
GET /price?token_id=&side= | Najlepszy bid lub ask. |
GET /midpoint?token_id= | Cena środkowa = (najlepszy bid + najlepszy ask) / 2. |
GET /spread?token_id= | Najlepszy ask − najlepszy bid. |
GET /tick-size?token_id= | Minimalny krok ceny (zaokrąglij do niego cenę). |
Limity są wysokie: CLOB ~9000 żądań / 10 s, /book i /price 1500 / 10 s,
a żądania ponad limit są dławione, nie odrzucane. Więcej o 429.
Złóż i anuluj zlecenie (uwierzytelnione)
Jedno wywołanie buduje, podpisuje (strukturę zlecenia V2) i wysyła twoje zlecenie. Wybierasz typ zlecenia:
| Typ | Zachowanie |
|---|---|
GTC | Good-Till-Cancelled - spoczywa w księdze do realizacji lub anulowania. |
GTD | Good-Till-Date - spoczywa do znacznika czasu wygaśnięcia. |
FOK | Fill-Or-Kill - zrealizuj całe zlecenie natychmiast albo je anuluj. |
FAK | Fill-And-Kill - zrealizuj natychmiast, ile się da, resztę anuluj. |
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
tick_size rynku ("0.01" lub "0.001") i ustaw neg_risk=True dla
wielowynikowych rynków „negative risk" - odczytaj oba z Gamma (orderPriceMinTickSize,
negRisk) przed podpisaniem. Poza tym: minimalna wielkość zlecenia to 5 udziałów, a twoja cena
musi być już zaokrąglona do ticka, inaczej zlecenie zostanie odrzucone.nonce,
feeRateBps, taker i expiration, a dodano timestamp,
metadata i builder; wersja domeny EIP-712 Exchange to "2".
Opłaty pobierane są on-chain przy dopasowaniu - makerzy płacą 0, płacą tylko takerzy.
Przed handlem musisz zatwierdzić pUSD + tokeny warunkowe dla trzech kontraktów V2
(zobacz poprawkę allowance).Opłaty: płacą tylko takerzy, a stawka jest krzywoliniowa
Makerzy nigdy nie są obciążani. Takerzy płacą opłatę, która nie jest stała - skaluje się z niepewnością rynku i różni się w zależności od kategorii. Wzór:
fee = shares × feeRate × p × (1 - p) # p = share price, 0..1
Czynnik p·(1-p) oznacza, że opłata osiąga szczyt przy 50/50 i maleje ku skrajnościom 1¢ i
99¢ - więc niemal pewny wynik jest tani w objęciu, a rzut monetą drogi. Stawka takera feeRate per kategoria:
| Kategoria | feeRate takera |
|---|---|
| Krypto | 0,07 (7 bps) - najwyższa |
| Ekonomia / Kultura / Pogoda | 0,05 |
| Finanse / Polityka / Tech / Wzmianki | 0,04 |
| Sport | 0,03 |
| Geopolityka i wydarzenia światowe | 0 - bez opłat |
Odczytuj stawkę na żywo per token przez GET /fee-rate-bps?token_id=, zamiast zapisywać ją na sztywno; opłaty
zaokrąglają się do 5 miejsc (min 0,00001 pUSD). To, że makerzy płacą zero, jest powodem, dla którego większość botów bez przewagi
kwotuje, zamiast obejmować.
Rynki negative-risk (wielowynikowe)
Wydarzenia wielokandydatowe („kto wygra wybory?") to rynki neg-risk: ich wyniki są
powiązane, więc udział Nie w jednym wyniku konwertuje się na udział Tak w każdym innym przez Neg
Risk Adapter - kapitałooszczędnie, ale mechanicznie inaczej. Działają na innych kontraktach
niż rynki binarne, więc musisz przekazać neg_risk=True w opcjach zlecenia (odczytaj
flagę negRisk rynku z Gamma). Pomiń to, a zlecenie zostanie podpisane wobec niewłaściwej giełdy
i odrzucone.
Tokeny warunkowe: split, merge, redeem (poza księgą)
Pod każdym rynkiem leży Conditional Token Framework (CTF). Tokeny wyników to tokeny ERC-1155, a każda para Tak/Nie jest zabezpieczona dokładnie 1,00 USD pUSD zablokowanym w kontrakcie CTF. Daje ci to trzy prymitywy, których sam arkusz zleceń nie ma:
| Operacja | Co robi | Po co bot jej używa |
|---|---|---|
| Split | Zablokuj 1 USD pUSD → wybij 1 Tak + 1 Nie | Utwórz zapas bez przekraczania spreadu; kwotuj obie strony. |
| Merge | Spal 1 Tak + 1 Nie → odzyskaj 1 USD pUSD | Wyjdź z zabezpieczonej pary natychmiast - bez czekania na rozstrzygnięcie, bez opłaty takera. |
| Redeem | Po rozstrzygnięciu zwycięski token → 1,00 USD pUSD | Spienięż rozstrzygniętą pozycję (redeemPositions). |
Split i merge to podstawa arbitrażu CTF: jeśli Tak + Nie handlują się poniżej
1,00 USD w księdze, kup oba i merge z powrotem do 1,00 USD; jeśli handlują się powyżej 1,00 USD,
zrób split 1 USD w świeżą parę i sprzedaj oba. Wykup rozlicza się przez kontrakt
ConditionalTokens, gdy wyrocznia opublikuje wynik on-chain - pozycja pokazuje
redeemable: true w Data API, gdy da się ją odebrać.
Identyfikatory pozycji wyprowadza się przez getConditionId → getCollectionId → getPositionId.
Zaawansowane: RFQ i rynki combo (dla poważnych makerów)
Poza arkuszem zleceń Polymarket prowadzi system Request-for-Quote (RFQ), używany zwłaszcza dla rynków combo - istniejących rynków połączonych w wielonożne pozycje złożone. Przepływ ma trzy fazy: taker prosi o kwotę, makerzy konkurują kwotami, a wybrany maker dostaje ostatnie spojrzenie, by potwierdzić lub odmówić przed wykonaniem.
- Odkrywanie combo:
GET /v1/rfq/combo-markets(publiczne;limit1-100,cursor,exclude). Każde combo udostępnia dwa identyfikatory pozycji (Tak = indeks 0, Nie = indeks 1). - Kwotowanie jako maker:
POST combos-rfq-api.polymarket.com/v1/maker/quotes(uwierzytelnianie L2). Sam generujeszquote_idi wysyłaszrfq_id,maker_address,signature_type, podpisane zlecenie Exchange orazprice_e6/size_e6jako łańcuchy stałoprzecinkowe o sześciu miejscach (konwencja*_e6unika utraty precyzji float). - Ostatnie spojrzenie: gdy RFQ jest w stanie
AWAITING_MAKER_CONFIRMATION, odpowiedzCONFIRM,DECLINElub pozwól mu przejść wTIMED_OUT.
Maszyna stanów RFQ: CREATED → COLLECTING_QUOTES → AWAITING_REQUESTER_ACCEPTANCE →
AWAITING_MAKER_CONFIRMATION → EXECUTING → FILLED (inaczej FAILED / EXPIRED / CANCELED / REJECTED). Zasubskrybuj
bramkę WebSocket RFQ dla stanu na żywo. To nisza - większość botów potrzebuje tylko powyższej księgi CLOB - ale tak właśnie
wycenia się płynność wielonożną i combo.
Sprawdź saldo i allowance
client.get_balance_allowance(...) # collateral (pUSD) and conditional-token allowances
Jeśli pokaże zerowe allowance, zatwierdź pUSD/CTF dla kontraktów giełdy V2 przed składaniem zleceń.
outcomes (Gamma zwraca ją oraz
clobTokenIds jako łańcuchy zakodowane w JSON, które musisz zdekodować) i mapuj po nazwie.Dalej: Uwierzytelnianie i portfele · WebSocket: strumień księgi · Napraw błąd CLOB.



