دليل الواجهة البرمجية

محرك منافسات السعودية

توثيق واجهة المنافسات والمورّدين

واجهة قراءة فقط (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"

المنافسات

GET
/api/public/tenders
قائمة المنافسات مع بحث وتصفية
المعاملالنوعالوصف
qنصبحث في العنوان والملخص والجهة والرقم المرجعي
sourceنصتصفية بمعرّف المصدر (slug)
categoryنصتصفية جزئية بالتصنيف
regionنصتصفية جزئية بالمنطقة
deadline_fromتاريخآخر موعد للتقديم من هذا التاريخ
deadline_toتاريخآخر موعد للتقديم حتى هذا التاريخ
published_afterتاريخالمنشورة بعد هذا التاريخ
pageرقم (1-1000)رقم الصفحة، الافتراضي 1
page_sizeرقم (1-100)عدد العناصر، الافتراضي 25
sortnewest | 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 }
}
GET
/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"

الجهات والمورّدون

GET
/api/public/organizations
قائمة الجهات الطارحة والمورّدين الفائزين
المعاملالنوعالوصف
roleall | 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 على ملخص الترسيات المرتبطة بكل مورّد.

GET
/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://..." }
    } ]
  }
}

المصادر

GET
/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.
  • يُستثنى «اعتماد» من الجمع؛ والمصادر التي تتطلب دخولًا مصرحًا تبقى متوقفة.
  • التسجيل الجديد مغلق حاليًا، والدخول متاح للمشرف فقط.