دليل الواجهة البرمجية
محرك منافسات السعودية
توثيق واجهة المنافسات والمورّدين
واجهة قراءة فقط (GET) ترجع بيانات JSON للمنافسات المجموعة من مصادر سعودية ودولية عامة، مع ملفات الجهات الطارحة والمورّدين الفائزين والمصادر وحالتها. جميع الطلبات تتطلب مفتاح وصول يُنشأ من لوحة التحكم.
العنوان الأساسي
https://gulf-deal-dig-bot.lovable.app/api/public
المصادقة
أرسل المفتاح في ترويسة X-API-Key أو كـ Authorization: Bearer. المفاتيح تبدأ بـ tnd_live_ وتُنشأ أو تُوقف من لوحة التحكم، ويُسجَّل لكل مفتاح عدد الطلبات وآخر استخدام.
curl -H "X-API-Key: tnd_live_..." \ "https://gulf-deal-dig-bot.lovable.app/api/public/tenders?page=1&page_size=25"
المنافسات
/api/public/tenders| المعامل | النوع | الوصف |
|---|---|---|
q | نص | بحث في العنوان والملخص والجهة والرقم المرجعي |
source | نص | تصفية بمعرّف المصدر (slug) |
category | نص | تصفية جزئية بالتصنيف |
region | نص | تصفية جزئية بالمنطقة |
deadline_from | تاريخ | آخر موعد للتقديم من هذا التاريخ |
deadline_to | تاريخ | آخر موعد للتقديم حتى هذا التاريخ |
published_after | تاريخ | المنشورة بعد هذا التاريخ |
page | رقم (1-1000) | رقم الصفحة، الافتراضي 1 |
page_size | رقم (1-100) | عدد العناصر، الافتراضي 25 |
sort | newest | deadline_asc | deadline_desc | الترتيب، الافتراضي newest |
{
"data": [
{
"id": "uuid",
"title": "توريد وتركيب أجهزة",
"summary": "...",
"organization": "نص الجهة كما ورد في المصدر",
"reference_number": "...",
"category": "...",
"region": "الرياض",
"city": "الرياض",
"url": "https://...",
"publish_date": "2026-09-01",
"deadline_date": "2026-09-20T12:00:00+00:00",
"value_amount": 1500000,
"currency": "SAR",
"language": "ar",
"first_seen_at": "2026-09-01T10:00:00Z",
"last_seen_at": "2026-09-11T10:00:00Z",
"sources": { "slug": "nupco", "name_ar": "نوبكو", "name_en": "NUPCO", "sector": "government" },
"organizations": { "name_ar": "...", "website": "https://...", "profile_confidence": 0.8 },
"tender_awards": [
{
"award_date": "2026-08-01",
"award_amount": 900000,
"currency": "SAR",
"confidence": 0.8,
"evidence_url": "https://...",
"organizations": { "name_ar": "المورّد", "email": null, "phone": null, "mobile": null }
}
]
}
],
"pagination": { "page": 1, "page_size": 25, "total": 189, "total_pages": 8 }
}/api/public/tenders/{id}يعيد نفس حقول المنافسة مضافًا إليها tender_attachments (الاسم والرابط ونوع الملف) وملف الجهة الطارحة كاملًا وبيانات المورّد الفائز إن وُجدت ترسية موثقة.
curl -H "X-API-Key: tnd_live_..." \ "https://gulf-deal-dig-bot.lovable.app/api/public/tenders/00000000-0000-0000-0000-000000000000"
الجهات والمورّدون
/api/public/organizations| المعامل | النوع | الوصف |
|---|---|---|
role | all | issuer | awarded_vendor | نوع المنشأة، الافتراضي all |
q | نص | بحث بالاسم العربي أو الإنجليزي أو رقم السجل |
page | رقم | رقم الصفحة، الافتراضي 1 |
page_size | رقم (1-100) | عدد العناصر، الافتراضي 25 |
{
"data": [
{
"id": "uuid",
"name_ar": "نوبكو",
"name_en": "NUPCO",
"is_issuer": true,
"is_awarded_vendor": false,
"sector": "government",
"registration_number": null,
"website": "https://...",
"email": null,
"phone": null,
"mobile": null,
"address": null,
"city": null,
"region": null,
"country": "SA",
"profile_confidence": 0.5,
"contact_sources": {},
"evidence_urls": ["https://..."],
"tender_awards": [],
"first_seen_at": "2026-09-01T10:00:00Z",
"last_seen_at": "2026-09-11T10:00:00Z"
}
],
"pagination": { "page": 1, "page_size": 25, "total": 23, "total_pages": 1 }
}حقول التواصل (البريد، الجوال، الهاتف، العنوان) تبقى فارغة ما لم تنشرها الجهة أو المورّد علنًا؛ ولا يتم تخمين أي قيمة. evidence_urls يحمل روابط المصدر وprofile_confidence يعبّر عن درجة الثقة في الملف. تظهر المورّدون الفائزون فقط عند وجود اسم فائز ورابط دليل عام صالح؛ وتحتوي tender_awards على ملخص الترسيات المرتبطة بكل مورّد.
/api/public/organizations/{id}يعيد الملف كاملًا مع intelligence المحسوبة من السجلات المرصودة فقط، وقائمة المنافسات التي طرحتها الجهة (issued_tenders) والترسيات التي فازت بها (awards)، حتى 100 عنصر لكل قائمة.
{
"data": {
"id": "uuid",
"name_ar": "...",
"intelligence": {
"tenders_posted": 12,
"awards_won": 3,
"published_value": 45000000,
"known_award_value": 12000000,
"awards_with_value": 2,
"awards_with_date": 3,
"awards_with_evidence": 3,
"basis": "observed_records"
},
"issued_tenders": [ { "id": "uuid", "title": "...", "value_amount": 100000 } ],
"awards": [ {
"id": "uuid",
"award_date": "2026-08-01",
"evidence_url": "https://...",
"issuer": { "id": "uuid", "name_ar": "..." },
"tenders": { "id": "uuid", "title": "...", "url": "https://..." }
} ]
}
}المصادر
/api/public/sourcesقائمة المصادر المهيأة مع القطاع والروابط ونوع الجمع ودورة التحديث بالدقائق وحالة الصحة وآخر تشغيل ناجح وآخر تشغيل أعاد نتائج.
{
"data": [
{
"slug": "nupco",
"name_ar": "نوبكو",
"name_en": "NUPCO",
"sector": "government",
"site_url": "https://...",
"tenders_url": "https://...",
"status": "active",
"enabled": true,
"collection_kind": "tenders",
"cadence_minutes": 360,
"health_status": "healthy",
"last_run_at": "2026-09-11T10:00:00Z",
"last_run_status": "success",
"last_success_at": "2026-09-11T10:00:00Z",
"last_nonempty_at": "2026-09-11T10:00:00Z",
"retry_after": null
}
]
}الأخطاء
كل خطأ يعود بالشكل { "error": { "code": "...", "message": "..." } }.
| المعامل | النوع | الوصف |
|---|---|---|
401 missing_api_key | مصادقة | لم تُرسل ترويسة المفتاح |
401 invalid_api_key | مصادقة | المفتاح غير معروف |
403 revoked_api_key | مصادقة | تم إيقاف المفتاح |
400 invalid_query | طلب | معامل غير صالح |
400 invalid_id | طلب | المعرّف ليس UUID صالحًا |
404 not_found | طلب | لا يوجد سجل بهذا المعرّف |
500 query_failed | خادم | تعذر تنفيذ الاستعلام |
ملاحظات
- جميع المسارات للقراءة فقط وتدعم
OPTIONSو CORS من أي نطاق. - التواريخ بصيغة ISO 8601، والمبالغ أرقام بعملة الحقل
currency. - يُستثنى «اعتماد» من الجمع؛ والمصادر التي تتطلب دخولًا مصرحًا تبقى متوقفة.
- التسجيل الجديد مغلق حاليًا، والدخول متاح للمشرف فقط.