واجهة ربطٍ موثّقةٌ ومنشورة.
ما يحتاجه فريقك التقني ليقرأ الأسطول ويكتب فيه من أنظمتكم: المواصفة الكاملة منشورةٌ ومقروءةٌ الآن، والعقد ثابتٌ ومُصدَّرٌ بصيغةٍ قياسية.
واجهة REST واحدة، موصوفةٌ بالكامل.
المنصة تنشر واجهة REST API واحدة تحت المسار /api/v1، وكل عملياتها موصوفةٌ في ملف OpenAPI منشورٍ على الإنترنت — لا وثيقةَ مقتطفاتٍ يدوية تتخلّف عن الكود.
- المسارات المنشورة — 609 مسار
- العمليات الموصوفة — 759 عملية، لكلٍّ منها مُعرِّفٌ ثابت
- إصدار الواجهة — v1 — يظهر في كل مسار
- الصيغة — OpenAPI 3 · الطلبات والردود بترميز JSON
مفتاحٌ واحد في ترويسة الطلب.
كل نداءٍ برمجي يحمل مفتاح منشأتك في ترويسة X-API-Key. المفتاح مرتبطٌ بالمنشأة وبصلاحياتها، ولا يرى غير بياناتها.
- الترويسة: X-API-Key — على كل طلبٍ محمي.
- المفتاح يُصدَر من داخل المنصة، بحسابٍ يملك صلاحية إدارة المفاتيح.
- قيمة المفتاح تُعرض مرةً واحدةً عند إنشائه، ولا تُسترجَع بعدها.
- الإلغاء فوريٌّ من الشاشة نفسها، ولكل إصدارٍ وإلغاءٍ سجلُّ تدقيق.
- الوصول البرمجي متاحٌ في خطّتي الاحترافية والمؤسسات.
كل قائمةٍ مُصفَّحة، وبسقفٍ معلن.
قوائم الواجهة كلها تقبل المعاملات نفسها، ويأتي مع كل ردٍّ عدّادُ الإجمالي والصفحة والحد — فلا حاجة لتخمين نهاية البيانات.
- page — رقم الصفحة، يبدأ من 1
- limit — عدد السجلات في الصفحة — الافتراضي 20، والأقصى 100
- sort — حقل الترتيب، من قائمةٍ مسموحةٍ لكل مسار
- order — asc أو desc
أربع خطوات، بطلبٍ وردٍّ حقيقيَّين لكلٍّ منها.
لا حاجة لمراسلتنا لمعرفة شكل الرد. هذه أربعة نداءات حقيقية على المنصة الحيّة، بترتيبها الفعلي، بقيمٍ مُستبدَلة لحماية بيانات عملائنا لكن ببنيةٍ مطابقةٍ لما يصلك فعلاً.
١. المصادقة
الدخول يُعيد توكن دخولٍ مؤقتاً (JWT من نوع Bearer). رقم منشأتك محمولٌ داخل هذا التوكن نفسه، ويُقرأ منه فقط — لا من جسم الطلب ولا من الرابط ولا من أي ترويسة.
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "owner@example.com",
"password": "••••••••"
}
{
"success": true,
"data": {
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi..."
}
}
٢. قراءة صفحة من المركبات
التوكن يُرسَل في ترويسة Authorization على كل طلبٍ لاحق. القيم أدناه مُستبدَلةٌ بالكامل؛ البنية فقط هي المطابقة لما يعيده الحساب الحقيقي.
GET /api/v1/vehicles?page=1&limit=2
Authorization: Bearer <access_token>
{
"success": true,
"data": [
{
"id": 1001,
"tenant_id": 9001,
"imei": "000000000000001",
"name": "DEMO-001",
"name_ar": "مثال-001",
"saudi_plate": "0000 AAA",
"vehicle_class": "van",
"make": "Example",
"model": "Model",
"year": 2024,
"fuel_type": "diesel"
}
],
"meta": { "total": 2, "page": 1, "limit": 2 }
}
٣. قراءة ترويسات حدود الاستخدام
نفسُ الردِّ أعلاه يحمل حالة عدّادك في اللحظة نفسها — بلا نداءٍ إضافي، وبلا رقمٍ نُعلنه هنا (السقف يُضبط على مستوى منشأتك، كما في القسم التالي).
— (على أي ردٍّ ناجح من القسم السابق)
X-RateLimit-Limit: <سقف منشأتك>
X-RateLimit-Remaining: <المتبقّي الآن>
X-RateLimit-Reset: <ختم زمني Unix>
# وعند التجاوز:
HTTP/1.1 429 Too Many Requests
Retry-After: <عدد الثواني>
٤. ما الذي يتحدّث معه العتاد
قدرات كل عائلة أجهزةٍ مُعلَنةٌ بالاسم — والحقيقة الكاملة معها: كل فعلٍ اليوم قيمته sendable: false، لأن البوابة ترفض ترميز أي أمرٍ لم يُختبَر فعلياً على عتادٍ حقيقي بعد. هذا موقفُ أمانٍ متعمَّد، لا نقاشه.
GET /api/v1/devices/capabilities
Authorization: Bearer <access_token>
{
"success": true,
"data": {
"allow_unverified_commands": false,
"families": [
{
"name": "family_1",
"verbs": [
{ "verb": "get_info", "status": "documented", "sendable": false },
{ "verb": "immobilize", "status": "documented", "sendable": false }
]
}
]
}
}
الحدود معلنةٌ في ترويسات الرد.
لا حاجة للتجربة والخطأ لمعرفة ما بقي لك: كل ردٍّ يحمل حالة عدّادك في اللحظة نفسها.
- X-RateLimit-Limit — سقف النافذة الحالية
- X-RateLimit-Remaining — المتبقّي داخلها
- X-RateLimit-Reset — لحظة إعادة التصفير
المنصة تنادي نظامك عند الحدث.
بدل أن يسأل نظامك المنصة كل دقيقة، تسجّلون عنواناً واحداً (webhook) فيصلكم الحدث لحظة وقوعه. وقائمة الأحداث المسموح الاشتراك بها يخدمها المنتج نفسه، فلا تتخلّف عن الكود:
- trip.completed — اكتملت رحلةٌ وسُجِّلت
- geofence.entered — مركبةٌ دخلت منطقةً جغرافية
- geofence.exited — مركبةٌ خرجت من منطقةٍ جغرافية
- alert.created — تنبيهٌ جديد من قاعدةٍ فعّالة
- device.offline — جهاز مركبةٍ توقّف عن الإرسال
- alert.escalation.<template_key> — عائلةُ تصعيد التنبيهات — واللاحقة هي مفتاح قالب الإشعار عندكم
افتح المواصفة، وشغّلها.
صفحة المواصفة التفاعلية مفتوحةٌ للقراءة الآن، وتستعرض كل عملية بمعاملاتها وردودها. وعنوانُ ملف المواصفة يُستورد مباشرةً في أي أداةٍ لتجربة الواجهات، فتتكوّن عندكم مجموعة النداءات كاملةً دون كتابة سطرٍ واحد.
القراءة مفتوحة للجميع؛ أما تنفيذ النداءات على بيانات منشأتكم فيحتاج مفتاحاً.
هل الواجهة للقراءة فقط، أم للكتابة كذلك؟
هل توفّرون مكتبةً جاهزةً بلغة برمجتنا؟
كيف نتأكّد أن التوثيق يطابق ما يعمل فعلاً؟
هل يمكن لمفتاحٍ أن يرى بيانات منشأةٍ أخرى؟
أسطولك يستحق هذا الوضوح.
ابدأ بعرضٍ توضيحي على بياناتٍ حقيقية من المنصة نفسها — نرد خلال يوم عمل واحد.
