API · Справочник
Gamma API на gamma-api.polymarket.com — это «каталог»: именно так вы
находите рынки и события и получаете token ID, которые нужны CLOB для торговли. Он публичный,
без аутентификации, так что вы можете изучать каждый эндпоинт из браузера или curl прямо сейчас, как и
живые инструменты на этой странице.
- Базовый URL:
https://gamma-api.polymarket.com· без аутентификации, только чтение. - Лимит запросов: ~4 000 запросов / 10 с в целом (
/events~500,/markets~300). - Шаг 1 почти каждого бота: превратить рынок в его token ID, затем торговать ими на CLOB.
- Всё — это JSON. Три важных поля приходят как строки JSON, которые нужно разобрать заново (см. ниже).
Эндпоинты, которыми вы реально пользуетесь
| Эндпоинт | Возвращает | Используйте, чтобы |
|---|---|---|
GET /markets | Рынки с метаданными, актуальными ценами и token ID. | Разрешить slug в token ID; сканировать торгуемые рынки. |
GET /events | События (группу связанных рынков) с их дочерними рынками. | Просматривать по темам; рендерить многоисходные карточки. |
GET /public-search?q= | Полнотекстовый поиск по событиям и рынкам. | Найти рынок, когда известно только название. |
GET /tags | Категорийные теги (политика, крипто, спорт...). | Обнаружить корректные фильтры tag_slug. |
Частые параметры запроса на /markets и /events:
active=true, closed=false, slug=, tag_slug=,
order=volume24hr, ascending=false, limit= и offset= для пагинации.
GET /markets — запрос и ответ
Запросите один рынок по slug. Вы получаете массив (даже для одного рынка), так что берите элемент [0]:
curl -s "https://gamma-api.polymarket.com/markets?slug=will-it-rain-in-nyc-today" | jq '.[0]'
import requests, json
m = requests.get("https://gamma-api.polymarket.com/markets",
params={"slug": "will-it-rain-in-nyc-today"}).json()[0]
Урезанный, аннотированный ответ (поля, которые важны боту):
{
"id": "519284",
"question": "Will it rain in NYC today?",
"slug": "will-it-rain-in-nyc-today",
"conditionId": "0x1f2e...c0", // the market id (NOT what you trade on)
"active": true, // listed and live
"closed": false, // not yet resolved
"acceptingOrders": true, // the CLOB is currently taking orders
"outcomes": "[\"Yes\", \"No\"]", // JSON string -> parse it
"clobTokenIds": "[\"7142...\", \"1098...\"]", // JSON string, aligned with outcomes
"outcomePrices": "[\"0.62\", \"0.38\"]", // JSON string, last prices
"bestBid": 0.61,
"bestAsk": 0.63,
"lastTradePrice": 0.62,
"volume24hr": 48213.5,
"endDate": "2026-06-16T00:00:00Z"
}
Два token ID исходов лежат внутри clobTokenIds. Именно на них торгует
CLOB — прочитайте их, и вы сможете поставить ордер.
Подвох №1: поля-строки в кодировке JSON
Gamma возвращает clobTokenIds, outcomes и outcomePrices как
JSON-строки внутри JSON, так что вам придётся декодировать их второй раз. И никогда не
хардкодьте, какой токен «Да»: читайте разобранный массив outcomes и сопоставляйте по имени, потому что порядок
не гарантирован.
import requests, json
m = requests.get("https://gamma-api.polymarket.com/markets",
params={"slug": SLUG}).json()[0]
outcomes = json.loads(m["outcomes"]) # e.g. ["Yes", "No"]
token_ids = json.loads(m["clobTokenIds"]) # aligned with outcomes
prices = json.loads(m["outcomePrices"]) # aligned with outcomes
yes_token = token_ids[outcomes.index("Yes")]
print(yes_token, prices[outcomes.index("Yes")])
const r = await fetch(`https://gamma-api.polymarket.com/markets?slug=${SLUG}`);
const m = (await r.json())[0];
const outcomes = JSON.parse(m.outcomes);
const tokenIds = JSON.parse(m.clobTokenIds);
const yesToken = tokenIds[outcomes.indexOf("Yes")];
curl -s "https://gamma-api.polymarket.com/markets?slug=$SLUG" | jq -r '.[0].clobTokenIds | fromjson | .[0]'
Попробуйте на реальном рынке — вставьте slug и вытяните его token ID вживую:
Сканируем торгуемые рынки
Типичный запрос обнаружения бота просит активные, открытые рынки, самые оживлённые первыми, в одной категории:
GET https://gamma-api.polymarket.com/markets
?active=true&closed=false&order=volume24hr&ascending=false&limit=20&tag_slug=politics
Отфильтруйте результат на стороне клиента до рынков, которые действительно торгуемы, прежде чем действовать по ним:
# keep only markets the CLOB will accept orders on right now
tradeable = [m for m in markets
if m.get("active") and not m.get("closed") and m.get("acceptingOrders")]
Ищите вживую (это вызывает /public-search, затем загружает token ID по каждому рынку):
Пагинация и свежесть
- Пагинация: добавьте
limitиoffsetи идите, пока не получите короткую страницу. Держитеlimit≤ 500 на/events, ≤ 300 на/markets. - Свежесть: цены (
bestBid,bestAsk,lastTradePrice) двигаются постоянно. Gamma годится для обнаружения и грубой цены, но котируйте и торгуйте по актуальному стакану CLOB, а не по кэшированной цене Gamma. - Кэширование: кэшируйте соответствие slug -> token_id (оно стабильно), а не цены.
GET /events — многоисходные группы
Событие связывает вместе родственные рынки (например, «Выборы мэра Нью-Йорка» держат по одному рынку на кандидата). Используйте его, чтобы рендерить многоисходные карточки или найти каждый рынок по теме:
curl -s "https://gamma-api.polymarket.com/events?slug=nyc-mayor-2025" | jq '.[0].markets | length'
У каждого события есть массив markets; у каждой записи те же строковые поля clobTokenIds /
outcomes, что и у верхнеуровневого рынка, так что применяется тот же разбор.
conditionId
рынка и его clobTokenIds (по одному на исход). CLOB торгует по token_id, никогда
по conditionId — их путаница — самый частый баг первого бота.Справочник полей (те, что кусаются)
| Поле | Значение |
|---|---|
conditionId | Идентификатор рынка. Используется для расчёта и on-chain поиска, не для постановки ордеров. |
clobTokenIds | JSON-строка с массивом token ID исходов. Разберите её; торгуйте ими на CLOB. |
outcomes / outcomePrices | JSON-строки с массивами, выровненными по индексу с clobTokenIds. |
active / closed | В списке и живой / рассчитан. Торгуемый рынок — это active && !closed. |
acceptingOrders | Принимает ли CLOB ордера прямо сейчас. Проверяйте это перед котированием. |
bestBid / bestAsk / lastTradePrice | Ориентировочные цены. Авторитетная цена приходит из стакана CLOB. |
Далее: CLOB API (торговать по token_id) · Data API (история и PnL) · Исправить ошибку.



