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 と
clobTokenIds(結果ごとに1つ)を返します。CLOBが取引するのは token_id であり、conditionId では決してありません。
両者の取り違えは、最初のボットで最も多いバグです。フィールドリファレンス(引っかかるもの)
| フィールド | 意味 |
|---|---|
conditionId | 市場の識別子。解決やオンチェーン参照に使い、注文発注には使いません。 |
clobTokenIds | 結果トークンIDのJSON文字列配列。パースして、これらをCLOBで取引します。 |
outcomes / outcomePrices | JSON文字列配列。clobTokenIds とインデックスが整列しています。 |
active / closed | 掲載中・ライブ / 解決済み。取引可能な市場は active && !closed。 |
acceptingOrders | CLOBが今注文を受け付けるか。クォート前に確認します。 |
bestBid / bestAsk / lastTradePrice | 参考価格。確定的な価格はCLOB板から。 |



