API · Справочник
CLOB (центральный лимитный стакан заявок) на clob.polymarket.com — это место, где ордера
стоят и совпадают. Вы читаете стакан, цены и tick size без аутентификации, а торгуете
(ставите / отменяете ордера, читаете свой баланс) с учётными данными API и подписью.
Это справочник CLOB V2 — обеспечение — это pUSD, комиссии on-chain, а
мейкеры платят ноль.
Читаем стакан заявок (без аутентификации)
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= | Полный стакан заявок (биды / аски). |
GET /price?token_id=&side= | Лучший бид или аск. |
GET /midpoint?token_id= | Средняя цена = (лучший бид + лучший аск) / 2. |
GET /spread?token_id= | Лучший аск − лучший бид. |
GET /tick-size?token_id= | Минимальный шаг цены (округляйте до него свою цену). |
Лимиты высокие: CLOB ~9 000 запросов / 10 с, /book и /price 1 500 / 10 с,
а превышающие лимит запросы притормаживаются, а не отклоняются. Подробнее о 429.
Ставим и отменяем ордер (с аутентификацией)
Один вызов собирает, подписывает (структуру ордера V2) и отправляет ваш ордер. Вы выбираете тип ордера:
| Тип | Поведение |
|---|---|
GTC | Good-Till-Cancelled — стоит в стакане, пока не исполнится или не будет отменён. |
GTD | Good-Till-Date — стоит до отметки времени истечения. |
FOK | Fill-Or-Kill — исполнить весь ордер сразу или отменить его. |
FAK | Fill-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 акций, а ваша цена
уже должна быть округлена до тика, иначе ордер отклоняется.nonce,
feeRateBps, taker и expiration и добавила timestamp,
metadata и builder; версия домена EIP-712 у Exchange — "2".
Комиссии собираются on-chain при совпадении — мейкеры платят 0, платят только тейкеры.
Перед торговлей вы должны одобрить pUSD + условные токены на трёх контрактах V2
(см. исправление allowance).Комиссии: платят только тейкеры, и ставка изгибается
С мейкеров никогда не берут комиссию. Тейкеры платят комиссию, которая не плоская — она масштабируется с неопределённостью рынка и различается по категориям. Формула:
fee = shares × feeRate × p × (1 - p) # p = share price, 0..1
Член p·(1-p) означает, что комиссия достигает пика при 50/50 и уменьшается к краям 1¢ и
99¢ - поэтому почти определённый исход дёшево забрать, а «орёл или решка» дорог. Тейкерская
feeRate по категориям:
| Категория | Тейкерская feeRate |
|---|---|
| Крипто | 0.07 (7 bps) — самая высокая |
| Экономика / Культура / Погода | 0.05 |
| Финансы / Политика / Технологии / Упоминания | 0.04 |
| Спорт | 0.03 |
| Геополитика и мировые события | 0 - без комиссии |
Читайте актуальную ставку по токену через GET /fee-rate-bps?token_id=, а не хардкодьте её; комиссии
округляются до 5 знаков (мин. 0.00001 pUSD). Именно потому, что мейкеры платят ноль, большинство ботов без преимущества котируют, а не забирают.
Рынки отрицательного риска (многоисходные)
События с несколькими кандидатами («кто выиграет выборы?») — это neg-risk рынки: их исходы
связаны, поэтому акция «Нет» в одном исходе конвертируется в акцию «Да» в каждом другом через Neg
Risk Adapter — капиталоэффективно, но механически иначе. Они работают на других контрактах,
чем бинарные рынки, поэтому вы обязаны передавать neg_risk=True в опциях ордера (читайте
флаг negRisk рынка из Gamma). Пропустите его — и ордер подписывается против неверной биржи
и отклоняется.
Условные токены: split, merge, redeem (за пределами стакана)
Под каждым рынком лежит Conditional Token Framework (CTF). Токены исходов — это ERC-1155 токены, и каждая пара Да/Нет обеспечена ровно $1.00 pUSD, заблокированными в контракте CTF. Это даёт вам три примитива, которых один стакан не даёт:
| Операция | Что делает | Зачем боту |
|---|---|---|
| Split | Заблокировать $1 pUSD → выпустить 1 Да + 1 Нет | Создать инвентарь, не пересекая спред; котировать обе стороны. |
| Merge | Сжечь 1 Да + 1 Нет → вернуть $1 pUSD | Мгновенно выйти из хеджированной пары — без ожидания расчёта, без тейкерской комиссии. |
| Redeem | После расчёта выигравший токен → $1.00 pUSD | Обналичить рассчитанную позицию (redeemPositions). |
Split и merge — основа CTF-арбитража: если Да + Нет торгуются ниже
$1.00 в стакане, купите оба и merge обратно в $1.00; если они торгуются выше $1.00,
split $1 в свежую пару и продайте оба. Погашение проводится через
контракт ConditionalTokens, как только оракул публикует исход on-chain — позиция показывает
redeemable: true в Data API, когда её можно забрать.
ID позиций выводятся через getConditionId → getCollectionId → getPositionId.
Продвинутое: RFQ и комбо-рынки (для серьёзных мейкеров)
Помимо стакана заявок, Полимаркет держит систему Request-for-Quote (RFQ), используемую особенно для комбо-рынков — существующих рынков, собранных в многоногие составные позиции. Процесс имеет три фазы: тейкер запрашивает котировку, мейкеры конкурируют котировками, а выбранный мейкер получает last look, чтобы подтвердить или отклонить перед исполнением.
- Найти комбо:
GET /v1/rfq/combo-markets(публичный;limit1-100,cursor,exclude). Каждое комбо раскрывает два ID позиций (Да = индекс 0, Нет = индекс 1). - Котировать как мейкер:
POST combos-rfq-api.polymarket.com/v1/maker/quotes(L2 auth). Вы сами генерируетеquote_idи отправляетеrfq_id,maker_address,signature_type, подписанный ордер Exchange иprice_e6/size_e6как строки с фиксированной точкой на шесть знаков (соглашение*_e6избегает потери точности float). - Last look: пока 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 выше — но именно так
оценивается ликвидность многоногих и комбо-позиций.
Проверяем balance и allowance
client.get_balance_allowance(...) # collateral (pUSD) and conditional-token allowances
Если здесь показан нулевой allowance, одобрите pUSD/CTF контрактам биржи V2 перед постановкой ордеров.
outcomes (Gamma возвращает его, а также
clobTokenIds, как JSON-строки, которые нужно декодировать) и сопоставляйте по имени.Далее: Аутентификация и кошельки · WebSocket: стриминг стакана · Исправить ошибку CLOB.



