REST

Wire API v1

واجهة JSON موحّدة لكل محتوى عاجل بعشر لغات. كل ردّ يحمل الرابط الأصلي ونسبة المصدر وتاريخ التعديل التحريري.

عنوان الأساس

كل المسارات أدناه نسبية إلى عنوان الأساس.

BASEhttps://ajel.sa/api/wire
SHORThttps://wire.ajel.sa

النطاق المختصر https://wire.ajel.sa يخدم المسارات نفسها بلا البادئة /api/wire (مثل /v1/latest). التوصيف الرسمي بصيغة OpenAPI 3.1.

المسارات

كلها GET، وكلها تُرجع JSON بترميز UTF-8.

الطريقةالمسارالوصف
GET/v1/languagesلغات المنصة العشر ومواقعها وخلاصاتها
GET/v1/sections?language=arأقسام نسخة لغوية
GET/v1/latest?language=ar&section=&limit=20آخر الأخبار (+ مؤشر ترقيم cursor)
GET/v1/breaking?language=arالأخبار العاجلة (آخر 72 ساعة)
GET/v1/search?q=...&language=arبحث بالعنوان/الملخّص
GET/v1/articles?language=ar&cursor=...قائمة بعوامل تصفية + ترقيم
GET/v1/articles/{id}خبر واحد بنصّه الكامل وترجماته
GET/v1/articles/{id}/translationsكل النسخ اللغوية للخبر
GET/v1/topicsالمواضيع المنسّقة (جهات ومدن معتمدة)
GET/v1/topics/{slug}/articlesأخبار موضوع منسّق

المصادقة والحدود

  • المفتاح إلزامي— كل طلب بلا مفتاح صالح يُردّ بـ401 key_required. أنشئ حسابك المجاني من هنا.
  • الحساب المجاني: 3,000 طلب/ساعة. أرسل المفتاح في ترويسة x-api-key أو Authorization: Bearer — لا في الرابط أبدًا.
  • احتجت أكثر؟ اطلب رفع الحدّ من لوحتك ونراجعه.
  • ترويسات X-RateLimit-* تُرجَع مع كل ردّ. تجاوز الحد = 429.
  • CORS مفتوح — الاستدعاء من المتصفح مباشرة مسموح.
curl · بمفتاح
curl -H "x-api-key: ajw_xxxxxxxx..." \
  "https://ajel.sa/api/wire/v1/latest?language=en&limit=10"

شكل الخبر

أهم الحقول — updated_at هو تاريخ التعديل التحريري (لا يسبق النشر أبدًا).

JSON
{
  "id": "9b2f7c1e-....",
  "language": "ar",
  "direction": "rtl",
  "title": "عنوان الخبر",
  "summary": "الملخّص",
  "canonical_url": "https://ajel.sa/local/abc123",
  "published_at": "2026-07-24T09:00:00.000Z",
  "updated_at": "2026-07-24T09:00:00.000Z",
  "status": "published",
  "breaking": false,
  "section": { "slug": "local", "name": "المحليات" },
  "authors": [{ "name": "فريق التحرير" }],
  "media": [{ "type": "image", "url": "https://...", "reuse_allowed": false }],
  "available_translations": ["en", "ru", "tr"],
  "attribution": {
    "brand": "صحيفة عاجل",
    "text": "المصدر: صحيفة عاجل",
    "url": "https://ajel.sa/local/abc123"
  },
  "usage": {
    "republication_allowed": true,
    "attribution_required": true,
    "commercial_use_allowed": true,
    "resale_of_raw_feed_allowed": false
  }
}

أمثلة

انسخ والصق — والمفتاح من لوحتك.

JavaScript
const res = await fetch("https://ajel.sa/api/wire/v1/latest?language=ar&limit=10");
const { data } = await res.json();
for (const a of data) console.log(a.title, "→", a.canonical_url);
Python
import requests
r = requests.get("https://ajel.sa/api/wire/v1/search",
                 params={"q": "الرياض", "language": "ar"},
                 headers={"x-api-key": "ajw_..."})
for a in r.json()["data"]:
    print(a["title"], a["canonical_url"])
الترقيم (cursor)
# الصفحة الأولى
curl "https://ajel.sa/api/wire/v1/articles?language=ar&limit=20"
# التالية: مرّر pagination.next_cursor كما هو
curl "https://ajel.sa/api/wire/v1/articles?language=ar&limit=20&cursor=MTc1..."

قواعد الاستخدام (المختصر)

  • إظهار «صحيفة عاجل» أو «Ajel» مصدرًا مع رابط الخبر — إلزامي.
  • النص قابل لإعادة النشر (كاملًا أو ملخّصًا) بلا تحريف. الصور تحتاج تثبّت حقوق (reuse_allowed).
  • الاستخدام التجاري مسموح؛ إعادة بيع التدفق الخام كمصدر مستقل ممنوعة.

التفاصيل في سياسة الاستخدام.