API بوابة Updates Portal

توفر بوابة Updates Portal واجهة برمجة تطبيقات JSON عامة وصغيرة لتتمكن من استطلاع الحالة، واستيراد إدخالات سجل التغييرات (changelog)، ومتابعة خارطة الطريق، والتحقق من المشكلات المعروفة من أنظمتك الخاصة. لا تتطلب أي مصادقة.

Base URL

https://updates.foura.ai

حالة الخدمة

GET /api/v1/status

ترجع الحالة التشغيلية المباشرة لكل خدمة من خدمات FourA، بالإضافة إلى الحوادث النشطة والأخيرة. يتم تخزين الاستجابة مؤقتًا في جانب الخادم لمدة 15 ثانية، لذا فإن استطلاع الحالة بشكل متكرر أكثر من ذلك سيرجع نفس البيانات.

curl https://updates.foura.ai/api/v1/status
{
  "overall": "operational",
  "services": [
    {
      "slug": "api",
      "name": "API",
      "description": "...",
      "status": "operational",
      "daily": [
        { "date": "2026-05-19", "status": "operational", "major_outage_minutes": 0, "partial_outage_minutes": 0, "degraded_minutes": 0, "internal_degraded_minutes": 0 }
      ]
    }
  ],
  "active_incidents": [],
  "recent_incidents": [
    { "id": "...", "service_slug": "api", "service_name": "API", "impact": "minor", "started_at": "...", "resolved_at": "..." }
  ]
}
الحقل ذو المستوى الأعلى النوع الوصف
overall string تكون قيمته operational إذا كانت جميع الخدمات سليمة، وإلا فإنه يحتوي على إحدى قيم حالة الخدمة
services array إدخال واحد لكل خدمة مراقبة يحتوي على slug و name و description و status الحالية، وسجل daily (حتى 90 يومًا)
active_incidents array الحوادث المفتوحة حاليًا
recent_incidents array الحوادث التي تم حلها خلال آخر 14 يومًا

قيم status للخدمة: operational و degraded و partial_outage و major_outage و maintenance.

قيم impact للحادثة: minor (أداء منخفض)، major (انقطاع جزئي)، critical (انقطاع الخدمة).

نمط استطلاع الحالة (Polling)

استخدم هذا الـ endpoint لربط حالة FourA بلوحة التحكم الخاصة بك أو بنظام الاستدعاء.

import requests

def check_foura():
    r = requests.get("https://updates.foura.ai/api/v1/status", timeout=5)
    r.raise_for_status()
    data = r.json()
    if data["overall"] != "operational":
        # Page on-call, post to Slack, flip a feature flag, etc.
        for svc in data["services"]:
            if svc["status"] != "operational":
                print(f"{svc['name']}: {svc['status']}")
    return data

يرجع المسار القديم GET /api/status الرمز 410 Gone ويوجه المتصلين إلى هنا.

سجل التغييرات (Changelog)

GET /api/changelog

يرجع إدخالات سجل التغييرات المنشورة بترتيب زمني عكسي.

curl "https://updates.foura.ai/api/changelog?limit=20"

معلمات الاستعلام (Query parameters):

المعلمة النوع الافتراضي الوصف
page integer 1 رقم الصفحة (يبدأ من 1)
limit integer 20 عدد الإدخالات لكل صفحة (الحد الأقصى 50)
category string - التصفية حسب new أو improved أو fixed
{
  "entries": [
    {
      "id": 42,
      "title": "...",
      "body": "Markdown body",
      "category": "new",
      "published_at": "2026-05-19T12:00:00Z",
      "tags": "[\"api\", \"dashboard\"]"
    }
  ],
  "total": 137,
  "page": 1,
  "limit": 20
}

RSS

يتم أيضًا نشر سجل التغييرات الكامل (آخر 30 إدخالاً) كخلاصة RSS على:

https://updates.foura.ai/rss

اشترك باستخدام Feedly أو Miniflux أو Thunderbird أو أي قارئ آخر. يتطابق محتوى الخلاصة مع محتوى سجل التغييرات، بما في ذلك تنسيق markdown الذي يتم تحويله إلى HTML.

خارطة الطريق (Roadmap)

GET /api/roadmap

يرجع جميع عناصر خارطة الطريق، مرتبة حسب عدد الأصوات ثم وقت الإنشاء.

curl https://updates.foura.ai/api/roadmap
{
  "items": [
    {
      "id": 12,
      "title": "...",
      "description": "...",
      "category": "API",
      "status": "planned",
      "votes": 23,
      "target_date": "Q3 2026"
    }
  ]
}

قيم status للعنصر: planned و in_progress و done و cancelled.

التصويت

POST /api/roadmap/:id/vote

يبدل حالة التصويت على عنصر واحد في خارطة الطريق. الأصوات مجهولة الهوية ومرتبطة بـ IP الخاص بالمتصل و User-Agent. يؤدي الاستدعاء مرة أخرى إلى إزالة التصويت.

curl -X POST https://updates.foura.ai/api/roadmap/12/vote
{ "votes": 24, "voted": true }

يوضح الحقل voted الحالة بعد الاستدعاء: true إذا تمت إضافة تصويتك، و false إذا تمت إزالته.

المشكلات المعروفة (Known Issues)

GET /api/issues

يرجع المشكلات التي يتتبعها دعم FourA.

curl "https://updates.foura.ai/api/issues?tab=open"

معلمات الاستعلام (Query parameters):

المعلمة النوع الافتراضي الوصف
tab string open القيمة open للمشكلات النشطة، و resolved للمشكلات التي تم حلها/إغلاقها
{
  "issues": [
    {
      "id": 5,
      "title": "...",
      "body": "Markdown description",
      "severity": "medium",
      "status": "investigating",
      "service_id": "api",
      "opened_at": "2026-05-18T09:00:00Z",
      "resolved_at": null,
      "resolution": null
    }
  ]
}

قيم severity: low و medium و high و critical. قيم status: open و investigating و resolved و closed.

ملاحظات

  • جميع الـ endpoints عامة. لا يلزم وجود مفتاح API، ولكن توقع تطبيق rate limiting سخي لكل عنوان IP مصدر.
  • الاستجابات تكون بتنسيق JSON عبر HTTPS. لا يوجد تقسيم صفحات (pagination) لخارطة الطريق أو المشكلات، فالقوائم صغيرة.
  • للحصول على نسخ نصية مجردة أو بتنسيق HTML خام من سجل التغييرات، استخدم خلاصة /rss بدلاً من /api/changelog.

مواضيع ذات صلة

آخر تحديث: 20 مايو 2026