API · Довідник

CLOB (Central Limit Order Book) на clob.polymarket.com - це де ордери лежать і матчаться. Ви читаєте книгу, ціни й крок ціни без автентифікації, і торгуєте (виставляєте / скасовуєте ордери, читаєте свій баланс) з обліковими даними API і підписом. Це довідник CLOB V2 - застава - це pUSD, комісії ончейн, а мейкери платять нуль.

Прочитати книгу замовлень (без автентифікації)

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"

Приклад відповіді

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

Ендпоінти для читання

ЕндпоінтПовертає
GET /book?token_id=Повну книгу замовлень (bids / asks).
GET /price?token_id=&side=Найкращий bid чи ask.
GET /midpoint?token_id=Середина = (найкращий bid + найкращий ask) / 2.
GET /spread?token_id=Найкращий ask − найкращий bid.
GET /tick-size?token_id=Мінімальний крок ціни (округліть до нього свою ціну).

Ліміти високі: CLOB ~9000 запитів / 10 с, /book і /price 1500 / 10 с, а запити понад ліміт сповільнюються, а не відхиляються. Докладніше про 429.

Виставити і скасувати ордер (автентифікація)

Один виклик будує, підписує (структуру ордера V2) і виставляє ваш ордер. Ви обираєте тип ордера:

ТипПоведінка
GTCGood-Till-Cancelled - лежить у книзі, доки не виконається чи не скасується.
GTDGood-Till-Date - лежить до часової мітки закінчення.
FOKFill-Or-Kill - виконати весь ордер негайно чи скасувати.
FAKFill-And-Kill - виконати що можна негайно, решту скасувати.
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 ринку ("0.01" чи "0.001") і встановлюйте neg_risk=True для багаторезультатних ринків «негативного ризику» - читайте обидва з Gamma (orderPriceMinTickSize, negRisk) перед підписом. Також: мінімальний розмір ордера - 5 часток, і ваша ціна має бути вже округлена до кроку, інакше ордер відхиляється.
Факти про ордер V2. Підписана структура прибрала nonce, feeRateBps, taker і expiration і додала timestamp, metadata і builder; версія домену Exchange EIP-712 - "2". Комісії збираються ончейн під час матчингу - мейкери платять 0, платять лише тейкери. Перед торгівлею ви маєте надати дозвіл pUSD + умовним токенам трьом контрактам V2 (див. виправлення дозволу).

Комісії: платять лише тейкери, і ставка вигинається

З мейкерів ніколи не стягують. Тейкери платять комісію, яка не фіксована - вона масштабується з невизначеністю ринку і залежить від категорії. Формула:

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

Член p·(1-p) означає, що комісія досягає піку на 50/50 і зменшується до країв 1¢ і 99¢ - тож майже певний результат дешево брати, а «підкидання монети» дороге. Ставка тейкера feeRate за категоріями:

КатегоріяfeeRate тейкера
Крипто0,07 (7 б.п.) - найвища
Економіка / Культура / Погода0,05
Фінанси / Політика / Технології / Згадки0,04
Спорт0,03
Геополітика й світові події0 - без комісії

Читайте живу ставку на токен через GET /fee-rate-bps?token_id=, а не хардкодьте її; комісії округлюються до 5 знаків (мін. 0,00001 pUSD). Те, що мейкери платять нуль, - причина, чому більшість ботів без переваги котирують, а не беруть.

Ринки негативного ризику (багаторезультатні)

Події з багатьма кандидатами («хто виграє вибори?») - це neg-risk ринки: їхні результати пов'язані, тож частка No в одному результаті конвертується в частку Yes у кожному іншому через Neg Risk Adapter - капіталоефективно, але механічно інакше. Вони працюють на інших контрактах, ніж бінарні ринки, тож ви мусите передати neg_risk=True в опціях ордера (читайте прапорець ринку negRisk з Gamma). Пропустіть його - і ордер підписується проти неправильної біржі й відхиляється.

Умовні токени: split, merge, redeem (поза книгою)

Під кожним ринком - Conditional Token Framework (CTF). Токени результатів - це токени ERC-1155, і кожна пара Yes/No забезпечена рівно $1,00 pUSD, заблокованим у контракті CTF. Це дає вам три примітиви, яких сама книга замовлень не має:

ОпераціяЩо робитьЧому бот її використовує
SplitЗаблокувати $1 pUSD → викарбувати 1 Yes + 1 NoСтворити інвентар, не перетинаючи спред; котирувати обидва боки.
MergeСпалити 1 Yes + 1 No → повернути $1 pUSDМиттєво вийти з хеджованої пари - без очікування врегулювання, без комісії тейкера.
RedeemПісля врегулювання, токен-переможець → $1,00 pUSDПогасити вирішену позицію (redeemPositions).

Split і merge - основа CTF-арбітражу: якщо Yes + No торгуються нижче $1,00 в книзі, купіть обидва і merge назад до $1,00; якщо вони торгуються вище $1,00, split $1 у свіжу пару і продайте обидва. Погашення розраховується через контракт ConditionalTokens, щойно оракул опублікує результат ончейн - позиція показує redeemable: true у Data API, коли її можна отримати. ID позицій виводяться через getConditionId → getCollectionId → getPositionId.

Просунуте: RFQ і комбо-ринки (для серйозних мейкерів)

Поза книгою замовлень Полімаркет запускає систему Request-for-Quote (RFQ), яку використовують особливо для комбо-ринків - наявних ринків, зібраних у багатоногі композитні позиції. Потік має три фази: тейкер запитує котирування, мейкери конкурують котируваннями, а обраний мейкер отримує останній погляд, щоб підтвердити чи відхилити перед виконанням.

  • Знайти комбо: GET /v1/rfq/combo-markets (публічно; limit 1-100, cursor, exclude). Кожне комбо надає два ID позицій (Yes = індекс 0, No = індекс 1).
  • Котирувати як мейкер: POST combos-rfq-api.polymarket.com/v1/maker/quotes (автентифікація L2). Ви генеруєте quote_id самі й надсилаєте rfq_id, maker_address, signature_type, підписаний ордер Exchange і price_e6 / size_e6 як шестизнакові рядки з фіксованою комою (конвенція *_e6 уникає втрати точності float).
  • Останній погляд: поки RFQ у стані AWAITING_MAKER_CONFIRMATION, відповідайте CONFIRM, DECLINE чи дайте йому TIMED_OUT.

Скінченний автомат RFQ: CREATED → COLLECTING_QUOTES → AWAITING_REQUESTER_ACCEPTANCE → AWAITING_MAKER_CONFIRMATION → EXECUTING → FILLED (інакше FAILED / EXPIRED / CANCELED / REJECTED). Підпишіться на WebSocket-шлюз RFQ для живого стану. Це нішеве - більшості ботів потрібна лише книга CLOB вище - але саме так оцінюється багатонога й комбо-ліквідність.

Перевірити баланс і дозвіл

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

Якщо це показує нульовий дозвіл, надайте дозвіл pUSD/CTF контрактам біржі V2 перед виставленням ордерів.

ID токенів Yes / No. Кожен бінарний ринок має два ID токенів. Не хардкодьте, який із них Yes - читайте розпарсений масив outcomes (Gamma повертає його, і clobTokenIds, як JSON-закодовані рядки, які треба декодувати) і зіставляйте за назвою.

Далі: Автентифікація та гаманці · WebSocket: стрім книги · Виправити помилку CLOB.