التكاملات
واجهة البرمجة (API)
تكامل مع منصتنا عبر REST API: المصادقة، الحدود، النقاط، وWebhooks، وخادم MCP.
تكامل مع منصتنا باستخدام واجهة REST API. كل ما هو متاح في الواجهة متاح عبرها أيضًا، وخادم MCP يتيح الشيء نفسه لوكلاء الذكاء الاصطناعي.
المصادقة

تتطلب جميع طلبات API رمز Bearer. أنشئ مفتاح API من الإعدادات > التكاملات.
curl -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
https://your-domain.com/api/v1/tendersحدود الاستخدام
تكون طلبات API محدودة حسب خطة الاشتراك. Pro: 1,000/يوم، Enterprise: غير محدود.
ترقيم الصفحات
تُرجع جميع نقاط النهاية المُرقّمة استجابات بالهيكل التالي:
{
"data": [...],
"total": 150,
"page": 1,
"page_size": 20,
"total_pages": 8
}نقاط النهاية
GET /api/v1/tenders
قائمة المنافسات مع ترقيم الصفحات والترشيح. الصلاحية المطلوبة: tenders.read
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
page | number | لا | رقم الصفحة (الافتراضي: 1) |
page_size | number | لا | عدد العناصر في الصفحة (الحد الأقصى: 100) |
source | string | لا | الترشيح حسب المصدر (etimad أو nupco) |
agency | string | لا | الترشيح حسب اسم الجهة |
GET /api/v1/tenders/:id
تفاصيل منافسة مع بنودها. الصلاحية المطلوبة: tenders.read
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | number | نعم | معرّف المنافسة |
GET /api/v1/search
البحث في المنافسات بكلمة مفتاحية (بما في ذلك أسماء البنود). الصلاحية المطلوبة: search
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
q | string | لا | نص البحث |
source | string | لا | الترشيح حسب المصدر |
agency | string | لا | الترشيح حسب الجهة |
type | string | لا | الترشيح حسب نوع المنافسة |
date_from | string | لا | تاريخ البداية (ISO) |
date_to | string | لا | تاريخ النهاية (ISO) |
page | number | لا | رقم الصفحة (الافتراضي: 1) |
page_size | number | لا | عدد العناصر في الصفحة (الحد الأقصى: 100) |
GET /api/v1/bids
قائمة عطاءات مؤسستك. الصلاحية المطلوبة: bids.read
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
status | string | لا | الترشيح حسب الحالة |
page | number | لا | رقم الصفحة (الافتراضي: 1) |
page_size | number | لا | عدد العناصر في الصفحة (الحد الأقصى: 100) |
GET /api/v1/favorites
قائمة المنافسات المفضلة لمؤسستك. الصلاحية المطلوبة: favorites.read
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
page | number | لا | رقم الصفحة (الافتراضي: 1) |
page_size | number | لا | عدد العناصر في الصفحة (الحد الأقصى: 100) |
الويب هوك

استقبل إشعارات فورية عند حدوث أحداث. كوّن الويب هوك من الإعدادات > التكاملات.
الأحداث المتاحة
tender.matched: مناقصة جديدة تطابق تنبيهاتك أو منتجاتكbid.status_changed: تغيرت حالة العرضdeadline.approaching: يقترب الموعد النهائي للمناقصة
التحقق من التوقيع
يتم توقيع جميع حمولات الويب هوك بـ HMAC-SHA256. تحقق من رأس X-Webhook-Signature:
// Verify webhook signature
const crypto = require('crypto');
const signature = req.headers['x-webhook-signature'];
const expected = 'sha256=' + crypto
.createHmac('sha256', webhookSecret)
.update(JSON.stringify(req.body))
.digest('hex');
if (signature === expected) {
// Valid webhook
}خادم MCP
يتيح خادم MCP لوكلاء الذكاء الاصطناعي استخدام المنصة عبر واجهة REST API نفسها (v1)، بالأدوات ذاتها على مسارين: خادم بعيد تقدّمه المنصة نفسها، وهو ما يتصل به Claude. وخادم محلي عبر stdio لتشغيل الأدوات إلى جانب نسخة من الشيفرة. لا يوجد تسجيل دخول منفصل: تتم المصادقة بمفتاح API. تلصقه في العميل بنفسك، أو يُنشأ لك عند الموافقة في شاشة تسجيل الدخول عبر OAuth. المفتاح مرتبط بالمستخدم: يحمل دور العضو الذي أنشأه، فلا يستطيع تجاوز صلاحيات ذلك الشخص، ويتوقف عن العمل إذا غادر المؤسسة.
الخادم البعيد
العنوان هو https://procduck.com/api/mcp (Streamable HTTP). يقبل الترويسة Authorization: Bearer sk_live_…، ويعرض OAuth 2.1 للعملاء الذين يسجّلون الدخول بأنفسهم — كتطبيقات Claude. خطوات الربط لكل عميل في ربط Claude.
تشغيل الخادم محليًا (stdio)
١. أنشئ مفتاح API
اذهب إلى الإعدادات > التكاملات وأنشئ مفتاحًا. امنح الصلاحيات التي يحتاجها الوكيل فقط (مثل tenders.read و search)، أو * للوصول الكامل. الصلاحيات والدور حدّان مستقلان ويطبَّقان معًا: مفتاح المستخدم بدور «مشاهد» للقراءة فقط مهما كانت صلاحياته. يظهر المفتاح sk_live_ مرة واحدة عند الإنشاء. انسخه حينها؛ إذ لا يُخزَّن سوى تجزئته SHA-256. تتطلب أدوات إدارة مفاتيح API الصلاحية *.
٢. وجّه عميل MCP إلى الخادم
يعمل الخادم المحلي عبر stdio من نسخة الشيفرة. عيّن PROCDUCK_API_KEY بالمفتاح الذي أنشأته و PROCDUCK_API_URL بعنوان نشرك (القيمة الافتراضية http://localhost:3000).
{
"mcpServers": {
"procduck": {
"command": "npm",
"args": ["run", "--silent", "mcp"],
"cwd": "/path/to/procduck",
"env": {
"PROCDUCK_API_URL": "https://your-domain.com",
"PROCDUCK_API_KEY": "sk_live_YOUR_API_KEY"
}
}
}
}٣. تحقق من المفتاح
قبل ربط الوكيل، تأكد من عمل المفتاح مباشرة مع واجهة REST API:
curl -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
https://your-domain.com/api/v1/tenders?page_size=1ما الذي يسمح به المفتاح
يُفحص كل طلب مقابل الدور الحالي لمنشئ المفتاح، لذا فإن خفض دور عضو أو إزالته يقلّص مفاتيحه أو يبطلها فورًا، دون الحاجة إلى إلغائها يدويًا.
- المالك: كل شيء، بما في ذلك الفوترة.
- المشرف: جميع عمليات القراءة والكتابة؛ دون الفوترة.
- المبيعات: يعمل على العطاءات وعروض الأسعار وأوامر البيع والكتالوج؛ أسعار البيع فقط، مع حجب ردود الموردين وسجل التوريد وأوامر الشراء وأسعار التكلفة وبريد المنشأة.
- المشتريات: يعمل على العطاءات وطلبات عروض الأسعار والتوريد وأوامر الشراء برؤية أسعار البيع والتكلفة معًا؛ دون إدارة المنشأة.
- الفني: قراءة فقط لكتالوج المنتجات والمصنّعين والمنافسات؛ مع حجب الأسعار وعروض الأسعار وطلبات عروض الأسعار والبريد والطلبات والخدمات اللوجستية.
- المشاهد: قراءة فقط. تُرفض الكتابة أيًا كانت الصلاحيات.
- المشاهد (بدون تسعير): قراءة فقط، مع حجب نقاط النهاية وحقول التسعير.
حل المشكلات
401: المفتاح مفقود أو غير صالح أو غير معروف. تأكد من تصديرPROCDUCK_API_KEYوأنه يبدأ بـsk_live_.402: استُنفد الحد اليومي لاستدعاءات API في خطتك، أو أن خطتك لا تشمل الوصول إلى API.403: المفتاح معطّل، أو غادر مالكه المؤسسة، أو أن دور المالك لا يسمح بهذا الإجراء.429: بلغت حد المعدل (١٠٠ طلب في الدقيقة لكل مفتاح). أعد المحاولة بعد قليل.