API · リファレンス

gamma-api.polymarket.com のGamma APIは「カタログ」です。市場やイベントを発見し、 CLOBが取引に必要とするトークンIDを取得する手段です。公開・認証不要なので、 今すぐブラウザや curl であらゆるエンドポイントを試せますし、このページのライブツールも同様です。

ひと目で
  • ベースURL:https://gamma-api.polymarket.com · 認証不要、読み取り専用。
  • レート制限:全体で10秒あたり約4,000リクエスト(/events は約500、/markets は約300)。
  • ほぼすべてのボットの第1歩:市場をそのトークンIDに変換し、CLOBで取引します。
  • すべてJSONです。重要な3つのフィールドは、もう一度パースが必要な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 - リクエストとレスポンス

スラッグで1つの市場を要求します。返るのは(単一市場でも)配列なので、要素 [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"
}

2つの結果トークンIDは clobTokenIds の中にあります。これらが CLOBの取引対象で、読み取れば注文を出せます。

最大の落とし穴: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をライブで取得します。

取引可能な市場をスキャンする

典型的なボットの発見クエリは、1つのカテゴリで、アクティブで開いている市場を、出来高の多い順に要求します。

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 は /events で500以下、/markets で300以下に保ちます。
  • 鮮度:価格(bestBid、bestAsk、lastTradePrice)は絶えず動きます。Gammaは発見とおおまかな価格には十分ですが、クォートと取引はキャッシュされたGamma価格ではなくライブのCLOB板で行ってください。
  • キャッシュ:価格ではなく、スラッグ → token_id の対応(安定しています)をキャッシュします。

GET /events - マルチアウトカムのまとまり

イベントは関連市場を束ねます(例:「NYC市長選」は候補者ごとに1市場を持ちます)。マルチアウトカムのカードを描画したり、 あるトピックのすべての市場を見つけたりするのに使います。

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(結果ごとに1つ)を返します。CLOBが取引するのは token_id であり、conditionId では決してありません。 両者の取り違えは、最初のボットで最も多いバグです。

フィールドリファレンス(引っかかるもの)

フィールド意味
conditionId市場の識別子。解決やオンチェーン参照に使い、注文発注には使いません。
clobTokenIds結果トークンIDのJSON文字列配列。パースして、これらをCLOBで取引します。
outcomes / outcomePricesJSON文字列配列。clobTokenIds とインデックスが整列しています。
active / closed掲載中・ライブ / 解決済み。取引可能な市場は active && !closed。
acceptingOrdersCLOBが今注文を受け付けるか。クォート前に確認します。
bestBid / bestAsk / lastTradePrice参考価格。確定的な価格はCLOB板から。

次へ:CLOB API(token_idで取引する) · Data API(履歴とPnL) · エラーを直す。