API · リファレンス
Polymarketには、2つの異なるホスト上に2つのリアルタイムシステムがあります。CLOB WebSocketはオーダーブックと自分の注文更新を配信し、RTDSフィードはライブ価格データ(暗号資産、株式)とコメントを配信します。 この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
ws-subscriptions-clob)から、暗号資産/株式の価格とコメントはRTDS(ws-live-data)から来ます。
別々のサービスで、ペイロードも異なります。


