REST API
نقاط النهاية لكتالوج Market، وOpportunities المؤكدة، وفوارق الأسعار، وتفصيل الزوج، والملاحظات. كل طلب يأخذ مفتاح API الخاص بك كرمز bearer.
تقدّم REST API أسواق Market مطابَقة، وOpportunities مراجحة مؤكدة، وتفصيل الزوج. تعمل على كل خطة، بما فيها Free. العنوان الأساسي هو https://api.dino.markets.
المصادقة
كل طلب يحمل مفتاح API الخاص بك كرمز bearer. أنشئ مفتاحًا من لوحة التحكم؛ يُعرض مرة واحدة فقط.
Authorization: Bearer sk_live_...
حد المعدل
الطلبات محدودة لكل خطة، سقف طلبات في الثانية وحصة شهرية معًا:
| الخطة | طلبات/ثانية | الحصة الشهرية |
|---|---|---|
| Free | 10 | 10,000 |
| Basic | 10 | 1,000,000 |
| Premium | 25 | 5,000,000 |
| Pro | 25 | 5,000,000 |
عند تجاوز أي من الحدين يعيد الطلب 429. البث لا يُقاس بهذه الطريقة؛ بل يتحدد بحد الاتصالات بدلًا من ذلك.
GET /v2/markets
قائمة Market الموحَّدة. دون تصفية، هذا هو الكتالوج المطابَق؛ يملأ ربط سجله المباشر الأسعار عند توفر إطار متأخر، وإلا يتركها null. أضف signal=candidates لصفوف Market في نطاق المراجعة مسعَّرة من سجل المرشحة. المراجحة المؤكدة مورد مختلف عند GET /v2/arbitrage؛ يُرفَض signal=arb بدلًا من إعادة عرض Market غير صحيح بنيويًا.
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
category | query | string | نطاق اكتشاف Dino، مثل sports أو weather أو crypto أو economics. |
sport | query | string | اقتصر على رياضة عامة واحدة، مثل baseball. اتركه فارغًا لكل الرياضات. |
competition | query | string | بطولة خاصة بالرياضة فقط، غير حساسة لحالة الأحرف، مثل MLB. |
location | query | string | موقع موحَّد خاص بالطقس فقط. |
asset | query | string | أصل عملة رقمية/سلعة مثل btc أو gold. |
indicator | query | string | مؤشر اقتصادي مثل cpi. |
basis | query | string | أساس قياس اقتصادي مثل yoy أو mom. |
institution | query | string | مؤسسة بنك مركزي مثل fed أو ecb. |
status | query | string | مفصولة بفواصل: open، live، resolving، closed، settled. الافتراضي open,live. |
signal | query | string | spread (كتالوج Market) أو candidates (Market في نطاق المراجعة). استخدم /v2/arbitrage من أجل Opportunities المؤكدة. |
sort | query | string | start_time (افتراضي) أو -spread_pts لوضع أوسع فوارق الأسعار بين المنصتين أولًا. |
market_type | query | string | مفصولة بفواصل: moneyline، outright، total، spread، team_total، advance، weather_high، weather_low، crypto_above، fed_decision، econ_print، cb_decision، أو all. الافتراضي moneyline,outright — صفوف الفوز بالمباراة. القيم غير المعروفة تُرفَض، لا تُتجاهَل بصمت. راجع عائلات الأسواق واللادرات. |
include | query | string | كتل اختيارية مفصولة بفواصل: ids، depth، settlement. راجع Includes. |
limit | query | integer | من 1 إلى 1000. الافتراضي 500. |
كل Market تتطلب category وmarket_type. السياق الصالح خاص بكل فئة: تستخدم الرياضة sport وcompetition؛ ويستخدم الطقس location؛ وتستخدم العملات الرقمية والسلع asset؛ وتستخدم المؤشرات الاقتصادية indicator وbasis؛ وتستخدم قرارات البنوك المركزية institution. tags تلميحات اكتشاف موحَّدة فقط. استدعِ /v2/categories لاكتشاف التركيبات الصالحة.
curl -s "https://api.dino.markets/v2/markets?category=sports&sport=baseball&competition=MLB" \
-H "Authorization: Bearer sk_live_..."
{
"count": 1,
"sport": "baseball",
"has_more": false,
"markets": [
{
"id": "dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2",
"slug": null,
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "MLB",
"tags": ["baseball", "mlb", "moneyline", "sports"],
"title": "Nyy vs Bos",
"home": null,
"away": null,
"start_time": "2026-07-01T23:05:00+00:00",
"status": "open",
"match": "high_confidence",
"signal": "spread",
"spread_pts": null,
"potential_arb_pct": null,
"coverage": { "kalshi": false, "polymarket": false },
"outcomes": [],
"result": null,
"updated_at": "2026-07-01T22:55:00+00:00",
"priced_at": "2026-07-01T22:55:00+00:00",
"links": { "kalshi": "https://kalshi.com/markets/KXMLBGAME-26JUL01NYYBOS", "polymarket": null }
}
]
}
عندما لا يوجد إطار سعر مؤهَّل، تكون outcomes فارغة، وتكون spread_pts هي null، وتكون علامتا التغطية كلتاهما false؛ ويعني ذلك أن هذا الصف مطابَق لكنه بلا سعر حاليًا. عندئذ تعود priced_at إلى updated_at، آخر تغيير هوية للزوج. عندما ينجح ربط السجل المباشر المتأخر، تُملأ outcomes وspread_pts وتكون priced_at هي وقت الإطار المعروض بالضبط. لا تأتي arb المؤكدة القابلة للتنفيذ إلا من /v2/arbitrage.
عائلات الأسواق واللادرات
استجابة GET /v2/markets الافتراضية هي كتالوج الفوز بالمباراة (moneyline مع outright). يفتح مرشِّح market_type الصفوف المشتقة:
- عائلات المباراة —
total،spread،team_total،advance. تحمل هذه الصفوفmarket_typeوlineوbasisوgame_id؛ اربطها بمباراتها بـgame_id == anchor.idكما هو. - اللادرات —
weather_high،weather_low،crypto_above،fed_decision،econ_print،cb_decision. صف اللادر سوق قائمة بذاتها بلا مرساة مباراة. يسمّي سياقها الصريح الكيان:locationللطقس، وassetللعملات الرقمية/السلع، وinstitutionلقرارات البنوك المركزية، وindicator+basisللمؤشرات الاقتصادية. تُقرأtitleكـNYC daily high · 2026-07-10أوNYC daily low · 2026-07-10أوBTC daily close · 2026-07-11، وتكونoutcomesهي لادر تلك العائلة نفسها.
حقول صدق اللادر، تستحق القراءة قبل أن تنقل رقمًا:
- weather_high / weather_low — تحمل كل نتيجة
relation:EXACTتعني وجود حزمة توأم واحد لواحد على Kalshi؛ وOVERLAPSتعني أن أقواس المنصتين مُزاحة ذلك اليوم (مُلاحَظ مباشرة: يمكن للادرين أن يفترقا بمقدار 1 درجة فهرنهايت) وتسمّيkalshi_spanحزم Kalshi الحقيقية التي تُطابِقها حزمة Polymarket. لا يُصنَع أبدًا سعر مركَّب — سعرkalshiعلى ساقOVERLAPSهوnull. يحمل الصف أيضًاkalshi_ladder، محور حزم Kalshi المسعَّر كاملًا ([{label, kalshi}]، بترتيب اللادر) معروضًا إلى جانب النتائج، بحيث يستطيع الوكيل رؤية أقواس Kalshi الحقيقية حتى حيث لا تتطابق واحدًا لواحد مع المحور المعروض — كل نوع سوق لادر يحملkalshi_ladder. تحملclosesوقتَي إغلاق المنصتين كما هما (يُغلق Polymarket نحو 12:00Z يوم القياس؛ ويُغلق Kalshi نحو 05:00Z اليوم التالي)، مُفصَح عنهما دون تسوية بينهما. تسمّيbasisمحطات/مصادر التسوية الخاصة بكل منصة، وأي اختلاف يُفصَح عنه لكل صف في كتلةsettlement.risksتحتinclude=settlement. - crypto_above — النتائج أرجل عتبة تراكمية "عند أو فوق"، فهي ليست متنافية: يمكن لأكثر من واحدة أن تُحسم Yes على الصف نفسه. تحمل كل ساق معروضة توأمًا حقيقيًا مطابَقًا لسعر Kalshi (
relationدائمًاEXACT)، لكنbandالصف يقف عندREVIEW: تُسوّي المنصتان في أوقات مختلفة من مصادر مختلفة (يُسوّي Polymarket من إغلاق شمعة Binance قرب الظهر بتوقيت شرق أمريكا؛ ويُسوّي Kalshi من متوسط مؤشر CF Benchmarks كل 60 ثانية قرب الساعة 5 مساءً بتوقيت شرق أمريكا)، ويختلف حد العتبة أيضًا — تُسوّي Kalshi "عند أو فوق" العتبة (شاملة)، بينما تُسوّي Polymarket "فوق" العتبة (أكبر تمامًا). كلاهما مُفصَح عنه حرفيًا في نص قواعد كل منصة. - fed_decision / cb_decision — النتائج تعداد ثابت من 5 خيارات لحركة السعر (خفض أكثر من 25 نقطة أساس، خفض 25 نقطة أساس، بلا تغيير، رفع 25 نقطة أساس، رفع أكثر من 25 نقطة أساس) تديره المنصتان بشكل متطابق لكل اجتماع. يقف
bandعندREVIEWحتى تُتحقَّق معالجة الإلغاء لكل منصة مقابل نص القواعد المباشر عند وقت تأليف القاعدة: يمكن لقواعد منصة أن تستثني حسمًا صريحًا لاجتماع مُلغى بينما يبقى قالب المنصة الأخرى صامتًا عنه. - econ_print — تتبع النتائج لادر حزم Polymarket؛ ويُفصَح عن دعم Kalshi لكل حزمة لكل ساق عبر
relation—EXACTعند وجود حزمة نقطة Kalshi مطابِقة، وDERIVEDعندما يكون دعم Kalshi الوحيد لتلك الحزمة هو لادر "فوق" التراكمي بدلًا من حزمة نقطة — تقدّم الساقDERIVEDحاليًا سعر Polymarket وحده (خليتها في Kalshi فارغة؛ سعر محسوب عبر اللادرين امتداد مخطَّط، ولا يُصنَع أي سعر Kalshi أبدًا في هذه الأثناء). تُبلِغfactors.poly_leg_coverageوfactors.uncovered_legsعلى مستوى الصف مقدار ما يملكه محور Polymarket لتلك الحزمة من دعم Kalshi.
curl -s "https://api.dino.markets/v2/markets?market_type=weather_high,weather_low&include=settlement" \
-H "Authorization: Bearer sk_live_..."
GET /v2/arbitrage
Opportunities مؤكدة، أطلقها المحرك، بين المنصتين. هذا منفصل عمدًا عن كتالوج Market: تحدد Market الأسواق المطابَقة بين المنصتين؛ وتحدد Opportunity نافذة واحدة مفتوحة قابلة للتنفيذ وأرجلها المختارة بدقة. يُعاد فحص كل صف مقابل تفويض السوق المطابَق الحالي وشكل التنفيذ قبل عرضه. لقطة REST مبذول فيها أفضل جهد ومتأخرة عمدًا على كل خطة.
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
sport | query | string | اقتصر على رياضة عامة واحدة، مثل baseball. |
limit | query | integer | من 1 إلى 500. الافتراضي 100. |
curl -s "https://api.dino.markets/v2/arbitrage?sport=baseball" \
-H "Authorization: Bearer sk_live_..."
{
"as_of": "2026-07-13T08:00:05Z",
"delay_seconds": 120,
"count": 1,
"opportunities": [
{
"id": "opp_01J2Y9M4X8",
"market_id": "dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2",
"title": "Nyy vs Bos",
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "MLB",
"tags": ["baseball", "mlb", "moneyline", "sports"],
"start_time": "2026-07-13T23:05:00Z",
"edge_pct": 4.2503,
"roi_pct": 4.439,
"fees_included": true,
"fee_model": "conservative_per_contract",
"cost_per_payout_usd": 0.957497,
"max_contracts": 700,
"max_wager_usd": 670.25,
"confidence": 1.0,
"detected_at": "2026-07-13T08:00:00Z",
"priced_at": "2026-07-13T08:00:05Z",
"legs": [
{
"outcome": "NYY", "venue": "kalshi", "side": "yes",
"ask_usd": 0.44, "stake_fraction": 0.480419,
"available_contracts": 1000,
"contract_id": "KXMLBGAME-NYY-BOS-NYY", "url": null
},
{
"outcome": "BOS", "venue": "polymarket", "side": null,
"ask_usd": 0.49, "stake_fraction": 0.519581,
"available_contracts": 700,
"contract_id": "tok_bos", "url": null
}
]
}
]
}
مصفوفة opportunities فارغة مع count: 0 هي حالة الراحة الطبيعية. edge_pct وroi_pct عائدان نموذجيان متحفظان بعد الرسوم. fees_included صريحة؛ وfee_model: "conservative_per_contract" تعني أن المُصدِر يحسب رسوم عقد واحد لكل ساق مختارة وتُدرِج الـ API تلك التكلفة إلى max_contracts، لذا قد يختلف التقريب على مستوى الحجم بين المنصتين. ask_usd هي الدولارات المدفوعة لكل عقد، الذي يبلغ عائده دولارًا واحدًا إن فازت تلك النتيجة. max_contracts هو عدد العقود المتساوي القابل للتنفيذ من اللقطة لكل نتيجة، وmax_wager_usd هو تقدير رأس المال المتحفظ شامل الرسوم عند ذلك الحجم. as_of هي أحدث priced_at في هذه الاستجابة؛ استخدمها — لا وقت الطلب — للحكم على الحداثة.
Candidates: GET /v2/markets?signal=candidates
صفوف نطاق المراجعة: مطابقات كوّنها محرك المطابقة لكن لم يؤكدها بعد. مسعَّرة بأفضل جهد من سجل القناة نفسه الذي يغذّي قناة WebSocket الخاصة بـ candidates:{sport} (Pro). سوق بحالة مراجعة يُحسَم دائمًا إلى spread، مهما كانت الأسعار المرفقة؛ لا يعيد هذا العرض أبدًا صف signal: "arb".
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
category | query | string | اقتصر على نطاق اكتشاف واحد. |
sport | query | string | اقتصر على رياضة عامة واحدة. |
competition | query | string | ضيّق الرياضة إلى بطولة واحدة. |
include | query | string | كتل اختيارية مفصولة بفواصل: ids، depth، settlement. |
limit | query | integer | من 1 إلى 1000. الافتراضي 500. |
curl -s "https://api.dino.markets/v2/markets?signal=candidates&sport=baseball" \
-H "Authorization: Bearer sk_live_..."
تنطبق معاملات الكتالوج أعلاه على هذا العرض أيضًا: status وsort وinclude تعمل بالطريقة نفسها.
تعود الصفوف بشكل Market الموحَّد نفسه المستخدم في الكتالوج. حيث تملك المرشحة أسعارًا، تُملأ outcomes وcoverage؛ وحيث لا يتوفر التسعير، تبقى الأسعار null.
Includes
تضيف include كتلًا اختيارية إلى كل كائن سوق. الكتل الغائبة تعني أن المفتاح مفقود بالكامل، لا null. اطلب ما تحتاجه.
| القيمة | تضيف | المعنى |
|---|---|---|
ids | venues، confidence | معرّفات المنصتين (kalshi.event_ticker، polymarket.condition_id) وثقة محرك المطابقة للهوية/التسوية، من 0 إلى 1. |
depth | outcomes[].kalshi_book، outcomes[].polymarket_book | تفصيل الدفتر لكل نتيجة (السعر، العمق، رمز/معرّف الرمز) إلى جانب سعر الطلب العددي. حقل شقيق؛ لا يحلّ أبدًا محل outcomes[].kalshi أو .polymarket. |
settlement | settlement | parity (منطقية)، risks[]، نص المنصة، وverdict بعد التسوية. |
GET /v2/pairs/{market_id}
كائن سوق موحَّد واحد بمعرّفه، مع تطبيق include=ids,depth,settlement افتراضيًا. هذا عرض التفصيل. يقبل dino_<uuid> (حقل id من /v2/markets) أو UUID مجردًا.
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
market_id | path | string | معرّف السوق من /v2/markets، إما dino_<uuid> أو UUID المجرد. |
مثال: arb لمباراة MLB (تكافؤ تسوية مؤكد)
curl -s "https://api.dino.markets/v2/pairs/dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2" \
-H "Authorization: Bearer sk_live_..."
{
"id": "dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2",
"slug": null,
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "MLB",
"tags": ["baseball", "mlb", "moneyline", "sports"],
"title": "Nyy vs Bos",
"home": null,
"away": null,
"start_time": "2026-07-01T23:05:00+00:00",
"status": "open",
"match": "high_confidence",
"signal": "arb",
"spread_pts": 2.0,
"potential_arb_pct": 1.83,
"coverage": { "kalshi": true, "polymarket": true },
"outcomes": [
{ "key": "NYY", "name": "NYY", "kalshi": 0.52, "polymarket": 0.54, "cheaper": "kalshi",
"kalshi_book": { "ask": 0.52, "bid": null, "depth": 3100, "ticker": "KXMLBGAME-26JUL01NYYBOS-NYY" },
"polymarket_book": { "ask": 0.54, "bid": null, "depth": 2900, "token_id": "0x1a2b..." } },
{ "key": "BOS", "name": "BOS", "kalshi": 0.50, "polymarket": 0.46, "cheaper": "polymarket",
"kalshi_book": { "ask": 0.50, "bid": null, "depth": 2400, "ticker": "KXMLBGAME-26JUL01NYYBOS-BOS" },
"polymarket_book": { "ask": 0.46, "bid": null, "depth": 3300, "token_id": "0x9f8e..." } }
],
"result": null,
"updated_at": "2026-07-01T22:55:00+00:00",
"priced_at": "2026-07-01T22:55:00+00:00",
"venues": {
"kalshi": { "event_ticker": "KXMLBGAME-26JUL01NYYBOS" },
"polymarket": { "condition_id": "0x1a2b...", "slug": null }
},
"confidence": { "entity": 1.0, "resolution": 1.0 },
"settlement": { "parity": true, "risks": [], "kalshi_text": null, "poly_text": null, "verdict": null },
"links": { "kalshi": "https://kalshi.com/markets/KXMLBGAME-26JUL01NYYBOS", "polymarket": null }
}
مثال: فارق سعر لمباراة KBO (مخاطرة تسوية بين المنصتين)
curl -s "https://api.dino.markets/v2/pairs/dino_5c2b9f7e-d4a1-4e6c-8b3f-a9c2e5f1d8a4" \
-H "Authorization: Bearer sk_live_..."
{
"id": "dino_5c2b9f7e-d4a1-4e6c-8b3f-a9c2e5f1d8a4",
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "KBO",
"tags": ["baseball", "kbo", "moneyline", "sports"],
"title": "Kia vs Kiw",
"start_time": "2026-07-15T10:00:00+00:00",
"status": "open",
"signal": "spread",
"spread_pts": null,
"potential_arb_pct": null,
"coverage": { "kalshi": false, "polymarket": false },
"outcomes": [],
"settlement": {
"parity": false,
"risks": [
{
"event": "tie",
"severity": "high",
"note": "This competition can tie, but one venue's market does not carry an explicit tie->50/50 clause. A held two-leg position may not return $1 on a tie. Verify before trading."
}
],
"kalshi_text": null,
"poly_text": null,
"verdict": null
},
"links": { "kalshi": "https://kalshi.com/markets/KXMLBGAME-26JUL15KIWKIA", "polymarket": null }
}
مخاطرة بدرجة خطورة high أو critical ضد الزوج تفرض signal إلى spread، حتى لو تطابقت الأسعار؛ ذلك الفحص واحد من البوابات الأربع خلف signal ويُقيَّم على مجموعة مخاطر الزوج الداخلية الكاملة. risks[] المعروضة لا تشمل أبدًا أحداث الإلغاء (cancel_*)، التي تُصفَّى من جهة الخادم. اقرأ settlement.risks قبل التصرف على أي صف، arb أو spread. إن لم يُحلَّ المعرّف، الاستجابة 404 مع { "error": "pair not found" }.
GET /v2/categories
نطاقات الاكتشاف الموحَّدة وأنواع الأسواق والسياقات الجانبية الصالحة لكل فئة، مشتقة من التغذية النشطة.
curl -s "https://api.dino.markets/v2/categories" \
-H "Authorization: Bearer sk_live_..."
{
"categories": [
{
"category": "sports",
"market_types": ["moneyline", "outright"],
"facets": [
{ "market_type": "moneyline", "sport": "baseball", "competition": "MLB", "count": 54 },
{ "market_type": "moneyline", "sport": "soccer", "competition": "World Cup", "count": 15 }
],
"count": 69, "open": 69, "live": 0, "settled": 0
}
]
}
GET /v2/search
بحث نصي حر عن سوق/حدث بالفريق أو البطولة أو السياق الصريح أو عنوان السوق — الباب الأمامي لأداة find_markets في MCP. متاح على كل خطة، بما فيها Free؛ يقرأ الكتالوج نفسه الذي تقدّمه REST بالفعل، لا سطحًا مباشرًا أو مدفوعًا فقط أبدًا.
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
q | query | string | مطلوب، من 1 إلى 100 حرف. نص حر: فريق، بطولة، سياق، أو عنوان سوق. |
category | query | string | اقتصر على نطاق اكتشاف واحد. |
sport | query | string | اقتصر على رياضة عامة واحدة، مثل baseball. |
status | query | string | مفصولة بفواصل: open، live، resolving، closed، settled. الافتراضي open,live. |
page | query | integer | 1 أو أكثر. الافتراضي 1. |
page_size | query | integer | من 1 إلى 50. الافتراضي 20. |
curl -s "https://api.dino.markets/v2/search?q=NYY" \
-H "Authorization: Bearer sk_live_..."
{
"q": "NYY",
"category": null,
"sport": null,
"page": 1,
"page_size": 20,
"count": 1,
"total": 1,
"has_more": false,
"markets": [
{
"id": "dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2",
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "MLB",
"tags": ["baseball", "mlb", "moneyline", "sports"],
"title": "Nyy vs Bos",
"start_time": "2026-07-01T23:05:00+00:00",
"status": "open",
"signal": "spread",
"outcomes": [],
"coverage": { "kalshi": false, "polymarket": false }
}
]
}
يطابق الفريق والتصنيف الموحَّد وعنوان السوق والـ slugs ومعرّفات المنصة الأصلية بلا حساسية لحالة الأحرف، مقابل كتالوج /v2/markets النشط/قيد المراجعة نفسه. هوية فقط، بلا أسعار — سلّم id النتيجة إلى /v2/pairs/{market_id} لتفصيل التسعير.
GET /v2/spreads
عرض فارق السعر بين المنصتين على الأزواج المطابَقة التي تُصنَّف قاعدة حسمها signal_type=spread — غير قابلة للإطلاق كـ arb أبدًا، لكنها تحمل فارقًا مباشرًا مُفصَحًا عنه. تعيد رصدات فارق سعر بشكل Market، بينما تعيد /v2/arbitrage تنفيذات بشكل Opportunity مؤكدة. يمكن لكل خطة اشتراك نشطة استدعاء الاثنين.
| المعامل | الموقع | النوع | المعنى |
|---|---|---|---|
category | query | string | اقتصر على نطاق اكتشاف موحَّد واحد. |
sport | query | string | اقتصر على رياضة عامة واحدة. |
competition، location، asset، indicator، basis، institution | query | string | مرشِّحات سياقية صالحة لكل فئة. |
min_gap | query | number | أدنى spread_pts (فارق بين المنصتين، بالنقاط). 0 أو أكثر. |
limit | query | integer | من 1 إلى 500. الافتراضي 100. |
curl -s "https://api.dino.markets/v2/spreads?category=sports&sport=baseball&competition=KBO&min_gap=1" \
-H "Authorization: Bearer sk_live_..."
{
"category": "sports",
"sport": "baseball",
"competition": "KBO",
"location": null,
"asset": null,
"indicator": null,
"basis": null,
"institution": null,
"min_gap": 1,
"count": 1,
"spreads": [
{
"id": "dino_5c2b9f7e-d4a1-4e6c-8b3f-a9c2e5f1d8a4",
"category": "sports",
"market_type": "moneyline",
"sport": "baseball",
"competition": "KBO",
"title": "Kia vs Kiw",
"status": "open",
"signal": "spread",
"spread_pts": 2.0,
"match_band": "EXACT",
"settlement": { "parity": true, "risks": [], "kalshi_text": null, "poly_text": null, "verdict": null }
}
]
}
تُنشَر الصفوف فقط عندما يملك الصف المطابَق الحالي كلًا من entity_confidence >= 0.95 وresolution_confidence >= 0.95، وهو ما يقابل قائمة السماح للنشر EXACT/HIGH. صفوف فارق السعر لا تدخل سجل الفرص أبدًا. يمكن لـ match_band (من matched_markets.band، إشارة منفصلة) أن تبقى REVIEW على صف قابل للنشر لولا ذلك؛ هذا تنبيه تسوية مُفصَح عنه، لا سبب حجب. اقرأ settlement.risks قبل التداول على أي صف.
POST /v1/stream/token
أصدر تذكرة قصيرة الأجل للبث في الوقت الفعلي. لم تنتقل نقطة النهاية هذه إلى /v2؛ تبقى عند /v1/stream/token. يمكن لكل خطة إصدار واحدة — يحصل مفتاح Free على تذكرة مقتصرة على قناة sample المنسَّقة؛ وتحصل Basic وPremium وPro على بث السوق الكامل. تدفق الاتصال الكامل موجود في صفحة بث WebSocket.
{
"ticket": "eyJhbGciOi...",
"ws_url": "wss://stream.dino.markets/connection/websocket",
"expires_in": 120,
"allowed": { "channels": ["markets:all", "org:{id}", "status"], "max_conns": 3 }
}
POST /v2/report-bad-arb
أبلغ عن opportunity تبدو خاطئة. يودع هذا تقريرًا في قائمة انتظار المراجعة لدينا. أدرج حقلًا واحدًا على الأقل من الحقول أدناه. من أجل opp_id، مرّر معرّف Opportunity الذي تعيده /v2/arbitrage.
| الحقل | النوع | المعنى |
|---|---|---|
opp_id | string | قيمة معرّف Opportunity (مثال opp_01J2Y9M4X8). |
reason | string | سبب أو ملاحظة قصيرة. |
sport | string | الرياضة، عند عدم وجود opp_id. |
market | string | السوق أو المباراة. |
detail | string | أي تفصيل إضافي. |
curl -s -X POST "https://api.dino.markets/v2/report-bad-arb" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "opp_id": "opp_01J2Y9M4X8", "reason": "legs do not settle the same way" }'
تقرير ناجح يعيد 202 مع { "status": "received" }. أرسل حقلًا واحدًا على الأقل من opp_id، reason، sport، market، detail؛ جسم فارغ يعيد 400.