API · مرجع

لدى Polymarket نظامان للوقت الحقيقي، على مضيفين مختلفين. WebSocket الخاص بـ CLOB يبثّ دفتر الأوامر وتحديثات أوامرك؛ وتدفق RTDS يبثّ بيانات الأسعار الحية (الكريبتو، الأسهم) والتعليقات. الخلط بينهما أكثر الأخطاء شيوعاً - تُبقيهما هذه الصفحة واضحين، مع نقاط النهاية الدقيقة، ونبضة القلب، وإعادة اتصال صحيحة.

المضيفان
  • CLOB - wss://ws-subscriptions-clob.polymarket.com/ws/ · القنوات market (عام، دفتر أوامر)، user (مُصادَق، أوامرك/تنفيذاتك)، sports (حالة المباراة الحية لأسواق الرياضة)، وبوابة rfq (حالة طلب عرض السعر الحية - انظر قسم RFQ).
  • RTDS - wss://ws-live-data.polymarket.com · المواضيع crypto_prices، crypto_prices_chainlink، equity_prices، comments.

قناة market في CLOB (بلا مصادقة)

اشترك في معرّف token واحد أو أكثر واستقبل دفتر الأوامر وتحديثاته: لقطة 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/السرّ/عبارة المرور، وتشترك عبر condition_id (السوق)، لا معرّف token. اتصل بـ 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. مفيد للإشارة الأساسية في بوتات أسواق التنبؤ للكريبتو/الأسهم.

نبضة القلب وإعادة الاتصال

  • نبضة القلب - أرسل PING كل 10 ثوانٍ تقريباً؛ يردّ الخادم بـ PONG. إن فوّتها ينقطع الاتصال.
  • عدّل مباشرة - يمكنك إضافة/إزالة المواضيع أو الأصول على اتصال مفتوح؛ لا تحتاج إلى إعادة الاتصال لتغيير اشتراكك.
  • أعِد الاتصال بشكل صحيح - بعد أي انقطاع، أعِد جلب لقطة دفتر الأوامر عبر REST (GET /book) قبل الوثوق بالتحديثات التزايدية مجدداً. الفروق المتدفقة التي فاتتك أثناء الانقطاع ذهبت؛ لقطة REST تُعيد مزامنة دفترك المحلي.

النمط كله في حلقة مرنة واحدة - نبضة قلب، وإعادة اتصال مع تراجع تدريجي، ومزامنة 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 · حدود المعدل والتراجع · ابنِ: بثّ دفتر الأوامر في بوت.