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
אל תבלבלו בין המארחים. ספרי פקודות והפקודות שלכם מגיעים ממארח ה-CLOB (ws-subscriptions-clob); מחירי קריפטו/מניות ותגובות מגיעים מ-RTDS (ws-live-data). אלה שירותים שונים עם payloads שונים.

הבא: עיון ב-CLOB REST · מגבלות קצב ו-backoff · בנייה: לשדר את ספר הפקודות בבוט.