API · リファレンス

clob.polymarket.com のCLOB(中央指値注文板)は、注文が板に残り、マッチングされる場所です。 板・価格・ティックサイズの読み取りは認証なしで、取引(注文の発注/取消、残高の読み取り)は APIの認証情報と署名で行います。これはCLOB V2のリファレンスです。 担保はpUSD、手数料はオンチェーン、メイカーはゼロです。

オーダーブックを読む(認証なし)

from py_clob_client_v2 import ClobClient   # pip install py-clob-client-v2
client = ClobClient(host="https://clob.polymarket.com", chain_id=137)   # read-only: no key
book = client.get_order_book(token_id)
mid  = client.get_midpoint(token_id)
print(book.bids[0].price, book.asks[0].price, mid)
// polymarket_client_sdk_v2 (official, repo rs-clob-client-v2)
use polymarket_client_sdk_v2::clob::{Client, Config};
use polymarket_client_sdk_v2::clob::types::request::OrderBookSummaryRequest;
let client = Client::new("https://clob.polymarket.com", Config::default())?;
let book = client.order_book(&OrderBookSummaryRequest::builder().token_id(token_id).build()).await?;
curl -s "https://clob.polymarket.com/book?token_id=$TOKEN_ID"

レスポンス例

{
  "market": "0x...",
  "bids": [ { "price": "0.62", "size": "1400" }, { "price": "0.61", "size": "900" } ],
  "asks": [ { "price": "0.64", "size": "1100" }, { "price": "0.65", "size": "2000" } ]
}

読み取りエンドポイント

エンドポイント返すもの
GET /book?token_id=完全なオーダーブック(bids / asks)。
GET /price?token_id=&side=ベストビッドまたはベストアスク。
GET /midpoint?token_id=ミッド =(ベストビッド + ベストアスク)/ 2。
GET /spread?token_id=ベストアスク − ベストビッド。
GET /tick-size?token_id=最小の価格刻み(価格をこれに丸める)。

制限は高めです。CLOBは10秒あたり約9,000リクエスト、/book と /price は10秒あたり1,500で、 超過リクエストは拒否ではなくスロットルされます。429の詳細。

注文の発注と取消(認証あり)

1回の呼び出しで、注文を組み立て、(V2の注文構造に)署名し、ポストします。注文タイプを選びます。

タイプ挙動
GTCGood-Till-Cancelled——約定または取消まで板に残る。
GTDGood-Till-Date——満期タイムスタンプまで板に残る。
FOKFill-Or-Kill——即座に全量約定するか取り消す。
FAKFill-And-Kill——即座に約定できる分だけ約定し、残りを取り消す。
from py_clob_client_v2 import (ClobClient, OrderArgs, OrderType,
                               PartialCreateOrderOptions, Side, OrderPayload)

# authenticated client (creds from create_or_derive_api_key - see Authentication)
client = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=PK, creds=creds)

resp = client.create_and_post_order(
    order_args=OrderArgs(token_id=token_id, price=0.62, side=Side.BUY, size=10),
    options=PartialCreateOrderOptions(tick_size="0.01", neg_risk=False),  # read both off the market
    order_type=OrderType.GTC,            # GTC, GTD, FOK or FAK
)
# resp -> {"success": true, "orderID": "0x...", "status": "live"}
client.cancel_order(OrderPayload(orderID=resp["orderID"]))   # cancel
市場ごとの2つの設定。市場の実際の tick_size ("0.01" または "0.001")を渡し、マルチアウトカムの「ネガティブリスク」市場では neg_risk=True を設定してください。署名前に両方をGammaから読み取ります (orderPriceMinTickSize、negRisk)。さらに、最小注文サイズは5シェアで、 価格はあらかじめティックに丸めておかないと注文が拒否されます。
V2注文のポイント。署名対象の構造から nonce、 feeRateBps、taker、expiration が削除され、timestamp、 metadata、builder が追加されました。Exchange EIP-712ドメインのバージョンは "2" です。 手数料はマッチ時にオンチェーンで徴収され、メイカーは0、テイカーだけが払います。 取引の前に、pUSDと条件付きトークンを3つのV2コントラクトに承認する必要があります (アローワンスの修正を参照)。

手数料:テイカーだけが払い、レートは曲線を描く

メイカーは決して課金されません。テイカーは一律ではない手数料を払います。 市場の不確実性に応じて増減し、カテゴリによって異なります。式は次のとおりです。

fee = shares × feeRate × p × (1 - p)      # p = share price, 0..1

p·(1-p) の項により、手数料は50/50で最大になり、1¢と99¢の端に向かって小さくなります。 つまり、ほぼ確実な結果を取るのは安く、五分五分は高くつきます。カテゴリ別のテイカー feeRate:

カテゴリテイカー feeRate
暗号資産0.07(7 bps)——最も高い
経済 / 文化 / 天気0.05
金融 / 政治 / テクノロジー / 言及0.04
スポーツ0.03
地政学・世界イベント0——手数料無料

レートはハードコードせず、トークンごとに GET /fee-rate-bps?token_id= でライブのレートを読んでください。 手数料は小数5桁に丸められます(最小0.00001 pUSD)。メイカーがゼロを払うことが、エッジのないボットの多くが取るのではなくクォートする理由です。

ネガティブリスク(マルチアウトカム)市場

複数候補のイベント(「選挙で誰が勝つか?」)はネガティブリスク市場です。結果が連動しているため、 ある結果のNoシェアは、他のすべての結果のYesシェアに変換されます(Neg Risk Adapter経由)。資本効率が良い一方、仕組みが異なります。 バイナリー市場とは別のコントラクトで動くため、注文オプションで必ず neg_risk=True を渡す必要があります (市場の negRisk フラグをGammaから読み取ります)。省くと、注文が誤った取引所に対して署名され、拒否されます。

条件付きトークン:スプリット・マージ・償還(板の先へ)

すべての市場の土台には条件付きトークンフレームワーク(CTF)があります。結果トークンはERC-1155トークンで、 すべてのYes/Noペアは、CTFコントラクトにロックされたちょうど$1.00のpUSDで裏付けられています。 これにより、オーダーブック単体では得られない3つのプリミティブが使えます。

操作内容ボットが使う理由
スプリット$1のpUSDをロック → 1 Yes + 1 No を発行スプレッドを跨がずに在庫を作り、両サイドをクォートする。
マージ1 Yes + 1 No を焼却 → $1のpUSDを回収ヘッジ済みペアを即座に手じまう——解決待ちもテイカー手数料もなし。
償還解決後、勝ちトークン → $1.00のpUSD解決済みポジションを現金化(redeemPositions)。

スプリットとマージはCTFアービトラージの基礎です。板でYes + Noが$1.00未満で取引されているなら、両方を買って $1.00にmergeで戻します。$1.00超で取引されているなら、$1をsplitして新しいペアを作り、両方を売ります。 償還は、オラクルが結果をオンチェーンにポストすると ConditionalTokens コントラクトを通じて決済されます。ポジションは、請求可能になると Data API上で redeemable: true を示します。 ポジションIDは getConditionId → getCollectionId → getPositionId の順に導出します。

上級:RFQとコンボ市場(本格的なメイカー向け)

オーダーブックの先で、PolymarketはRequest-for-Quote(RFQ)システムを運営しており、特にコンボ市場 ——既存の市場を束ねた複数レッグの合成ポジション——に使われます。フローは3段階です。テイカーがクォートを要求し、 メイカーがクォートで競争し、選ばれたメイカーが執行前に確認または辞退するラストルックを得ます。

  • コンボの発見:GET /v1/rfq/combo-markets(公開。limit 1-100、 cursor、exclude)。各コンボは2つのポジションID(Yes = インデックス0、No = インデックス1)を公開します。
  • メイカーとしてクォート:POST combos-rfq-api.polymarket.com/v1/maker/quotes(L2認証)。 quote_id は自分で生成し、rfq_id、maker_address、signature_type、 署名済みのExchange注文、そして price_e6 / size_e6 を小数6桁の固定小数点文字列として送ります (*_e6 方式は浮動小数の精度損失を避けます)。
  • ラストルック:RFQが AWAITING_MAKER_CONFIRMATION の間に、CONFIRM、 DECLINE で応答するか、TIMED_OUT にさせます。

RFQの状態機械:CREATED → COLLECTING_QUOTES → AWAITING_REQUESTER_ACCEPTANCE → AWAITING_MAKER_CONFIRMATION → EXECUTING → FILLED(それ以外は FAILED / EXPIRED / CANCELED / REJECTED)。 ライブ状態はRFQ WebSocketゲートウェイを購読します。これはニッチで——ほとんどのボットは上記のCLOB板だけで十分です——が、 複数レッグやコンボの流動性はこうして値づけされます。

残高とアローワンスを確認する

client.get_balance_allowance(...)   # collateral (pUSD) and conditional-token allowances

アローワンスがゼロと表示される場合は、注文の前にpUSD/CTFをV2取引所コントラクトに承認してください。

Yes / No のトークンID。各バイナリー市場には2つのトークンIDがあります。 どちらがYesかをハードコードしないこと。パースした outcomes 配列を読んで(Gammaはこれと clobTokenIds を JSONエンコード文字列として返すのでデコードが必要)、名前で対応づけてください。

次へ:認証とウォレット · WebSocket:板をストリームする · CLOBのエラーを直す。