API · リファレンス

Polymarketには、2つの異なるホスト上に2つのリアルタイムシステムがあります。CLOB WebSocketはオーダーブックと自分の注文更新を配信し、RTDSフィードはライブ価格データ(暗号資産、株式)とコメントを配信します。 この2つの取り違えが最も多い間違いです。このページでは、正確なエンドポイント、ハートビート、正しい再接続とともに、両者を整理します。

2つのホスト
  • CLOB - wss://ws-subscriptions-clob.polymarket.com/ws/ · チャネルは market(公開、オーダーブック)、user(認証、自分の注文/約定)、 sports(スポーツ市場のライブ試合状態)、そして rfq ゲートウェイ (ライブのRequest-for-Quote状態。RFQセクションを参照)。
  • RTDS - wss://ws-live-data.polymarket.com · トピックは crypto_prices、crypto_prices_chainlink、equity_prices、 comments。

CLOB marketチャネル(認証なし)

1つ以上のトークンIDを購読し、オーダーブックと更新を受け取ります。最初に book スナップショット、 続いて price_change、tick_size_change、last_trade_price のイベントです。認証情報は不要です。

import asyncio, json, websockets

async def stream(token_ids):
    url = "wss://ws-subscriptions-clob.polymarket.com/ws/market"
    async with websockets.connect(url, ping_interval=10) as ws:
        await ws.send(json.dumps({"assets_ids": token_ids, "type": "market"}))
        async for msg in ws:
            evt = json.loads(msg)
            print(evt.get("event_type"), evt)

asyncio.run(stream([TOKEN_ID]))
import WebSocket from "ws";
const ws = new WebSocket("wss://ws-subscriptions-clob.polymarket.com/ws/market");
ws.on("open", () => ws.send(JSON.stringify({ assets_ids: [TOKEN_ID], type: "market" })));
ws.on("message", (d) => console.log(JSON.parse(d)));

CLOB userチャネル(認証あり)

user チャネルは自分の注文ライフサイクル(発注、約定、取消)を報告します。 APIのkey/secret/passphraseが必要で、トークンIDではなく condition_id(市場)で購読します。 wss://ws-subscriptions-clob.polymarket.com/ws/user に接続し、購読ペイロードに認証情報を含めます。

await ws.send(json.dumps({
    "type": "user",
    "markets": [CONDITION_ID],          # subscribe by condition_id, not token_id
    "auth": {"apiKey": API_KEY, "secret": SECRET, "passphrase": PASSPHRASE},
}))
# events: "order" (placed/cancelled) and "trade" (your fills)

RTDS価格フィード

オーダーブックではなくライブ価格データ用の別ホスト——wss://ws-live-data.polymarket.com——です。 トピックを購読します:crypto_prices(Binance)、crypto_prices_chainlink(Chainlinkオラクル)、 equity_prices、comments。暗号資産/株式の予測市場ボットの原資産シグナルに役立ちます。

ハートビートと再接続

  • ハートビート——約10秒ごとに PING を送ってください。サーバーが PONG を返します。 怠ると接続が切れます。
  • ライブで変更——開いた接続のままトピックやアセットを追加/削除できます。購読の変更に再接続は不要です。
  • 正しく再接続——切断後は、増分更新を再び信頼する前にRESTのオーダーブックスナップショットを取り直してください (GET /book)。切断中に取り逃したストリーム差分は消えています。RESTスナップショットがローカルの板を再同期します。

パターン全体を1つの堅牢なループに——ハートビート、バックオフ付き再接続、そして(再)接続ごとのRESTでの再同期:

import asyncio, json, time, requests, websockets

async def resilient_stream(token_id, on_event):
    url = "wss://ws-subscriptions-clob.polymarket.com/ws/market"
    backoff = 1
    while True:
        try:
            async with websockets.connect(url, ping_interval=10) as ws:
                # 1) REST snapshot first so the local book is correct before deltas
                book = requests.get("https://clob.polymarket.com/book",
                                    params={"token_id": token_id}).json()
                on_event({"event_type": "snapshot", "book": book})
                # 2) subscribe and stream
                await ws.send(json.dumps({"assets_ids": [token_id], "type": "market"}))
                backoff = 1                       # reset after a clean connect
                async for msg in ws:
                    on_event(json.loads(msg))
        except Exception as e:
            print("ws drop, resync in", backoff, "s:", e)
            await asyncio.sleep(backoff)
            backoff = min(backoff * 2, 30)        # exponential backoff, capped
ホストを混同しないこと。オーダーブックと自分の注文はCLOBホスト (ws-subscriptions-clob)から、暗号資産/株式の価格とコメントはRTDS(ws-live-data)から来ます。 別々のサービスで、ペイロードも異なります。

次へ:CLOB RESTリファレンス · レート制限とバックオフ · 構築:ボットで板をストリームする。