API · مرجع
پلیمارکت دو سیستم بلادرنگ روی دو host متفاوت دارد. CLOB WebSocket دفتر سفارشات و بهروزرسانی سفارشهای خودتان را استریم میکند؛ فید RTDS دادهٔ قیمت زنده (کریپتو، سهام) و کامنتها را استریم میکند. قاطی کردن این دو رایجترین اشتباه است - این صفحه آنها را از هم جدا نگه میدارد، همراه با endpointهای دقیق، heartbeat، و یک reconnect درست.
- CLOB —
wss://ws-subscriptions-clob.polymarket.com/ws/· کانالهایmarket(عمومی، دفتر سفارشات)،user(احراز هویتشده، سفارشها/پرشدنهای شما)،sports(وضعیت زندهٔ بازی برای بازارهای ورزشی)، و یک gateway به نامrfq(وضعیت زندهٔ Request-for-Quote - بخش RFQ را ببینید). - RTDS —
wss://ws-live-data.polymarket.com· topicهایcrypto_prices،crypto_prices_chainlink،equity_prices،comments.
کانال market در CLOB (بدون احراز هویت)
به یک یا چند token ID subscribe کنید و دفتر سفارشات و بهروزرسانیها را دریافت کنید: یک اسنپشات اولیهٔ
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)));
کانال user در CLOB (احراز هویت)
کانال user چرخهٔ حیات سفارشهای شما را گزارش میکند (ثبتها، تطبیقها، لغوها). به
API key/secret/passphrase شما نیاز دارد و با condition_id (بازار) subscribe میکنید، نه با token
ID. به wss://ws-subscriptions-clob.polymarket.com/ws/user وصل شوید و auth خود را در
payloadِ subscribe بگنجانید:
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
یک host جداگانه — wss://ws-live-data.polymarket.com — برای دادهٔ قیمت زنده،
نه دفتر سفارشات. به یک topic subscribe کنید: crypto_prices (Binance)، crypto_prices_chainlink
(اوراکل Chainlink)، equity_prices، یا comments. برای سیگنال زیربنایی در
باتهای بازار پیشبینی کریپتو/سهام مفید است.
Heartbeat و reconnect
- Heartbeat — تقریباً هر ۱۰ ثانیه یک
PINGبفرستید؛ سرور باPONGپاسخ میدهد. اگر جا بیفتد، اتصال قطع میشود. - تغییر زنده — میتوانید روی یک اتصال باز، topicها یا assetها را اضافه/حذف کنید؛ برای تغییر subscription خود نیازی به reconnect ندارید.
- reconnect درست — پس از هر قطعی، پیش از اعتماد دوباره به بهروزرسانیهای افزایشی، اسنپشات دفتر سفارشات را دوباره از REST بگیرید
(
GET /book). deltaهایی که هنگام قطع بودن جا انداختید از دست رفتهاند؛ اسنپشات REST دفتر محلی شما را دوباره sync میکند.
کل الگو در یک حلقهٔ تابآور - heartbeat، reconnect با backoff، و یک resync از REST در هر (re)connect:
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) میآیند. اینها سرویسهای متفاوتی با payloadهای متفاوتاند.بعدی: مرجع REST مربوط به CLOB · محدودیتهای نرخ و backoff · ساخت: استریم دفتر سفارشات در یک بات.



