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 проти token_id. Gamma дає вам conditionId ринку і його clobTokenIds (по одному на результат). CLOB торгує на token_id, ніколи на conditionId - плутати їх - найпоширеніший баг першого бота.

Довідник полів (ті, що кусають)

ПолеЗначення
conditionIdІдентифікатор ринку. Використовується для врегулювання й ончейн-пошуку, не для виставлення ордерів.
clobTokenIdsJSON-рядок-масив ID токенів результатів. Розпарсьте його; торгуйте ними на CLOB.
outcomes / outcomePricesJSON-рядки-масиви, вирівняні за індексом із clobTokenIds.
active / closedРозміщений-і-живий / вирішений. Торгований ринок - це active && !closed.
acceptingOrdersЧи прийматиме CLOB ордери просто зараз. Перевіряйте це перед котируванням.
bestBid / bestAsk / lastTradePriceОрієнтовні ціни. Авторитетна ціна - з книги CLOB.

Далі: CLOB API (торгувати на token_id) · Data API (історія і PnL) · Виправити помилку.