API · Довідник
Gamma API на gamma-api.polymarket.com - це «каталог»: саме так ви
знаходите ринки й події та отримуєте ID токенів, які CLOB потребує для торгівлі. Він публічний,
без автентифікації, тож ви можете дослідити кожен ендпоінт із браузера чи curl просто зараз, як і
живі інструменти на цій сторінці.
- Базовий URL:
https://gamma-api.polymarket.com· без автентифікації, лише читання. - Ліміт запитів: ~4000 запитів / 10 с загалом (
/events~500,/markets~300). - Крок 1 майже кожного бота: перетворити ринок на його ID токенів, потім торгувати ними на CLOB.
- Усе - це JSON. Три важливі поля повертаються як рядки JSON, які треба розпарсити ще раз (див. нижче).
Ендпоінти, якими ви справді користуватиметеся
| Ендпоінт | Повертає | Використовуйте, щоб |
|---|---|---|
GET /markets | Ринки з метаданими, живими цінами та ID токенів. | Перетворити слаг на 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 - запит і відповідь
Запитайте один ринок за слагом. Ви отримуєте масив (навіть для одного ринку), тож беріть елемент [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"
}
Два ID токенів результатів лежать усередині clobTokenIds. Саме на них торгує
CLOB - прочитайте їх, і ви можете виставити ордер.
Підводний камінь №1: поля-рядки, закодовані в JSON
Gamma повертає clobTokenIds, outcomes і outcomePrices як
JSON-закодовані рядки всередині JSON, тож їх треба декодувати вдруге. І ніколи не
хардкодьте, який токен - «Yes»: читайте розпарсений масив 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]'
Спробуйте на реальному ринку - вставте слаг і витягніть його 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, потім завантажує ID токенів на кожен ринок):
Сторінкування і свіжість
- Сторінкування: додайте
limitіoffsetі йдіть, доки не отримаєте коротку сторінку. Тримайтеlimit≤ 500 на/events, ≤ 300 на/markets. - Свіжість: ціни (
bestBid,bestAsk,lastTradePrice) рухаються постійно. Gamma годиться для пошуку й грубої ціни, але котируйте й торгуйте з живої книги CLOB, а не з кешованої ціни Gamma. - Кешування: кешуйте відповідність слаг -> token_id (вона стабільна), а не ціни.
GET /events - багаторезультатні групи
Подія об'єднує пов'язані ринки (напр., «Вибори мера NYC» тримає по одному ринку на кандидата). Використовуйте її, щоб рендерити багаторезультатні картки чи знайти кожен ринок на тему:
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 | Ідентифікатор ринку. Використовується для врегулювання й ончейн-пошуку, не для виставлення ордерів. |
clobTokenIds | JSON-рядок-масив ID токенів результатів. Розпарсьте його; торгуйте ними на CLOB. |
outcomes / outcomePrices | JSON-рядки-масиви, вирівняні за індексом із clobTokenIds. |
active / closed | Розміщений-і-живий / вирішений. Торгований ринок - це active && !closed. |
acceptingOrders | Чи прийматиме CLOB ордери просто зараз. Перевіряйте це перед котируванням. |
bestBid / bestAsk / lastTradePrice | Орієнтовні ціни. Авторитетна ціна - з книги CLOB. |
Далі: CLOB API (торгувати на token_id) · Data API (історія і PnL) · Виправити помилку.



