API · עיון
לפולימרקט יש שתי מערכות זמן-אמת, על שני מארחים שונים. ה-WebSocket של CLOB משדר את ספר הפקודות ואת עדכוני הפקודות שלכם; פיד ה-RTDS משדר נתוני מחיר חיים (קריפטו, מניות) ותגובות. ערבוב בין השניים הוא הטעות הנפוצה ביותר - העמוד הזה שומר עליהם מסודרים, עם ה-endpoints המדויקים, פעימת הלב, וחיבור מחדש נכון.
- 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.
ערוץ ה-market של CLOB (ללא אימות)
הירשמו למזהה טוקן אחד או יותר וקבלו את ספר הפקודות ואת העדכונים: תצלום 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 מדווח על מחזור החיים של הפקודות שלכם (ביצוע, התאמות, ביטולים). הוא
צריך את מפתח/סוד/passphrase של ה-API שלכם ואתם נרשמים לפי condition_id (שוק), לא לפי מזהה
טוקן. התחברו ל-wss://ws-subscriptions-clob.polymarket.com/ws/user וכללו את האימות שלכם
ב-payload המינוי:
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. שימושי לאות נכס הבסיס בבוטים
של שווקי תחזיות בקריפטו/מניות.
פעימת לב וחיבור מחדש
- פעימת לב - שלחו
PINGכל 10 שניות בערך; השרת משיבPONG. אם תחמיצו זאת, החיבור יינתק. - שינוי בזמן אמת - אפשר להוסיף/להסיר נושאים או נכסים בחיבור פתוח; אין צורך להתחבר מחדש כדי לשנות את המינוי.
- התחברו מחדש נכון - אחרי כל ניתוק, משכו מחדש את תצלום ספר הפקודות ב-REST
(
GET /book) לפני שאתם סומכים שוב על עדכונים מצטברים. הדלתות שהחמצתם בזמן הניתוק אבודות; תצלום ה-REST מסנכרן מחדש את ספר הפקודות המקומי שלכם.
כל הדפוס בלולאה עמידה אחת - פעימת לב, חיבור מחדש עם backoff, וסנכרון 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). אלה שירותים שונים עם payloads שונים.הבא: עיון ב-CLOB REST · מגבלות קצב ו-backoff · בנייה: לשדר את ספר הפקודות בבוט.



