مرجع الـ API
مرجع واجهة برمجة التطبيقات
مرحباً بك في مرجع واجهة برمجة تطبيقات منصّة أوكتا للشركاء. هذه الواجهة تمكّن تطبيقك — بعد الموافقة وتثبيته من قِبل المستأجر — من قراءة وكتابة بيانات أوكتا ضمن النطاقات التي مُنحت لك صراحةً.
واجهة الـ runtime تُستضاف على **okta-web** (التطبيق الأساسي للمنصّة)؛ كل طلب يصل إلى مسار `/apps` تحت الرابط الأساسي. منصّة الشركاء (okta-partners) هي حيث تُسجّل تطبيقك، تختار النطاقات، وتدير الإصدارات والـ webhooks.
الواجهة REST فوق HTTPS، تتبادل JSON (UTF-8)، وتستخدم رموز HTTP القياسية. كل القراءات والكتابات معزولة لكل مستأجر (tenant) ومحمية بنطاق مُسمّى.
نداء أول
curl https://getokta.io/api/apps/whoami \
-H "Authorization: Bearer $OKTA_PARTNER_TOKEN" \
-H "Accept: application/json"
الرابط الأساسي
واجهة الـ runtime تُستضاف على okta-web تحت المسار التالي:
https://getokta.io/api/apps
بيئة الاختبار (Sandbox):
https://dev.getokta.io/api/apps
المصادقة
كل طلب يُصادَق عليه عبر **installation token** على هيئة Bearer. الرمز يُصدَر تلقائياً عند تثبيت المستأجر لتطبيقك، وهو مرتبط بثنائية (المستأجر، التطبيق) ويحمل النطاقات الممنوحة.
Authorization: Bearer <installation_token>
- لا تُضمّن الرمز في كود الواجهة الأمامية ولا في مستودع عام — خزّنه كـ secret على الخادم (مثال: `OKTA_PARTNER_TOKEN`).
- الرمز قابل للتدوير من لوحة الشريك؛ التطبيقات الخارجية تستلم الرمز الجديد عبر الجسر دون إعادة نشر.
- الطلب بلا رمز أو برمز غير صالح يُردّ بـ `401 Unauthorized`. الرمز صالح لكن بلا النطاق المطلوب يُردّ بـ `403 Forbidden`.
تحقّق من الرمز
curl https://getokta.io/api/apps/whoami \
-H "Authorization: Bearer $OKTA_PARTNER_TOKEN"
# → { "tenant_id": 42, "module": "your-app", "scopes": [ ... ] }
النطاقات (Scopes)
كل قطعة بيانات محمية بنطاق بالصيغة `
| النطاق | الوصف |
|---|---|
education.students.read |
قراءة الطلاب |
education.students.write |
إنشاء/تعديل الطلاب |
education.guardians.read |
قراءة أولياء الأمور |
education.subjects.read |
قراءة المواد |
education.grades.read |
قراءة الصفوف |
education.sections.read |
قراءة الشُعب |
education.academic_years.read |
قراءة الأعوام الدراسية |
education.terms.read |
قراءة الفصول الدراسية |
employees.directory.read |
قراءة دليل الموظفين |
reports.builder.read |
كتالوج/تنفيذ التقارير |
notifications.providers.send |
إرسال إشعار عبر مزوّد |
نقاط النهاية
جميع المسارات نسبية للرابط الأساسي أعلاه. تتطلب نقاط الكتابة (POST/PATCH) النطاق المقابل.
الهوية
/whoami
بلا نطاق
معلومات الـ installation الحالي (المستأجر، التطبيق، النطاقات).
https://getokta.io/api/apps/whoami
معلومات الـ installation الحالي (المستأجر، التطبيق، النطاقات).
الطلاب
/education/students
education.students.read
قائمة الطلاب (مُرقّمة).
https://getokta.io/api/apps/education/students
قائمة الطلاب (مُرقّمة).
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/students/{id}
education.students.read
طالب واحد.
https://getokta.io/api/apps/education/students/{id}
طالب واحد.
مُعطيات المسار
مُعرّف المورد في أوكتا.
/education/students
education.students.write
إنشاء طالب.
https://getokta.io/api/apps/education/students
إنشاء طالب.
مُعطيات الجسم
الاسم الكامل للطالب.
رقم الهوية/الإقامة.
تاريخ الميلاد (YYYY-MM-DD).
male أو female.
مُعرّف الصف.
مُعرّف الشُعبة.
مُعرّف وليّ الأمر.
/education/students/{id}
education.students.write
تعديل طالب.
https://getokta.io/api/apps/education/students/{id}
تعديل طالب.
مُعطيات المسار
مُعرّف المورد في أوكتا.
مُعطيات الجسم
الاسم الكامل للطالب.
رقم الهوية/الإقامة.
تاريخ الميلاد (YYYY-MM-DD).
male أو female.
مُعرّف الصف.
مُعرّف الشُعبة.
مُعرّف وليّ الأمر.
أولياء الأمور
/education/guardians
education.guardians.read
قائمة أولياء الأمور.
https://getokta.io/api/apps/education/guardians
قائمة أولياء الأمور.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/guardians/{id}
education.guardians.read
وليّ أمر واحد.
https://getokta.io/api/apps/education/guardians/{id}
وليّ أمر واحد.
مُعطيات المسار
مُعرّف المورد في أوكتا.
/education/guardians
education.guardians.write
إنشاء وليّ أمر.
https://getokta.io/api/apps/education/guardians
إنشاء وليّ أمر.
مُعطيات الجسم
الاسم الكامل لوليّ الأمر.
رقم الجوال بصيغة E.164.
البريد الإلكتروني.
father | mother | other.
/education/guardians/{id}
education.guardians.write
تعديل وليّ أمر.
https://getokta.io/api/apps/education/guardians/{id}
تعديل وليّ أمر.
مُعطيات المسار
مُعرّف المورد في أوكتا.
مُعطيات الجسم
الاسم الكامل لوليّ الأمر.
رقم الجوال بصيغة E.164.
البريد الإلكتروني.
father | mother | other.
المنهج الدراسي
/education/subjects
education.subjects.read
المواد.
https://getokta.io/api/apps/education/subjects
المواد.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/subjects
education.subjects.write
إنشاء مادة (idempotent).
https://getokta.io/api/apps/education/subjects
إنشاء مادة (idempotent).
مُعطيات الجسم
اسم المادة.
رمز المادة.
/education/grades
education.grades.read
الصفوف.
https://getokta.io/api/apps/education/grades
الصفوف.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/sections
education.sections.read
الشُعب.
https://getokta.io/api/apps/education/sections
الشُعب.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/academic-years
education.academic_years.read
الأعوام الدراسية.
https://getokta.io/api/apps/education/academic-years
الأعوام الدراسية.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/education/terms
education.terms.read
الفصول الدراسية.
https://getokta.io/api/apps/education/terms
الفصول الدراسية.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
الموظفون
/employees/directory
employees.directory.read
دليل الموظفين.
https://getokta.io/api/apps/employees/directory
دليل الموظفين.
مُعطيات الاستعلام
رقم الصفحة (يبدأ من 1).
عدد العناصر لكل صفحة (حد أقصى 100).
بحث نصّي اختياري.
/employees/directory/{id}
employees.directory.read
موظف واحد.
https://getokta.io/api/apps/employees/directory/{id}
موظف واحد.
مُعطيات المسار
مُعرّف المورد في أوكتا.
/employees/directory
employees.directory.write
إضافة موظف (idempotent).
https://getokta.io/api/apps/employees/directory
إضافة موظف (idempotent).
مُعطيات الجسم
الاسم الكامل للموظف.
المسمى الوظيفي.
البريد الإلكتروني.
التقارير
/reports/builder
reports.builder.read
كتالوج التقارير المتاحة.
https://getokta.io/api/apps/reports/builder
كتالوج التقارير المتاحة.
/reports/builder/{key}/run
reports.builder.read
تنفيذ تقرير (idempotent).
https://getokta.io/api/apps/reports/builder/{key}/run
تنفيذ تقرير (idempotent).
مُعطيات المسار
مفتاح التقرير من الكتالوج.
مُعطيات الجسم
مُعطيات التقرير (تعتمد على نوعه).
الإشعارات
/notifications/capabilities
notifications.providers.send
قدرات قناة الإشعار.
https://getokta.io/api/apps/notifications/capabilities
قدرات قناة الإشعار.
/notifications/send
notifications.providers.send
إرسال رسالة (idempotent).
https://getokta.io/api/apps/notifications/send
إرسال رسالة (idempotent).
مُعطيات الجسم
المُستلِم (رقم جوال أو مُعرّف مستخدم).
نص الرسالة.
قناة محدّدة (اختياري).
القائمة الكاملة دائماً في مواصفة OpenAPI 3.1 المحدّثة آلياً:/docs/openapi.json·/docs/postman_collection.json
الترقيم (Pagination)
نقاط النهاية التي ترجع قوائم مُرقّمة. استخدم `?page=2&per_page=50` (الحد الأقصى 100 لكل صفحة).
{
"data": [ ... ],
"total": 1242,
"per_page": 20,
"current_page": 1,
"last_page": 63
}
Idempotency
عمليات الكتابة (POST/PATCH) تقبل header اختياري. نفس المفتاح خلال 24 ساعة يعيد نفس الإجابة المخزّنة — فإن انقطع الاتصال على جانبك، إعادة المحاولة لن تُنشئ سجلاً مكرّراً.
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
الأخطاء
الأخطاء تُعاد بجسم JSON موحّد مع رمز HTTP المناسب.
{
"message": "The given scope is not granted for this installation.",
"error": "scope_not_granted",
"scope": "education.students.write"
}
| الرمز | الاسم | الوصف |
|---|---|---|
400 |
Bad Request | جسم الطلب غير صالح أو ناقص. |
401 |
Unauthorized | رمز مفقود أو غير صالح. |
403 |
Forbidden | الرمز صالح لكن بلا النطاق المطلوب. |
404 |
Not Found | المورد غير موجود ضمن نطاق المستأجر. |
409 |
Conflict | تعارض idempotency أو حالة غير متّسقة. |
422 |
Unprocessable Entity | فشل التحقق من الحقول. |
429 |
Too Many Requests | تجاوزت حدّ المعدّل. |
5xx |
Server Error | خطأ مؤقّت — أعد المحاولة مع backoff. |
حدود المعدّل (Rate limits)
كل طلب يحمل ترويسات تُخبرك بالحدّ المتبقي. عند تجاوز الحدّ يُردّ `429` مع `Retry-After` (ثوانٍ). احترم backoff الأُسّي عند إعادة المحاولة.
| Header | الوصف |
|---|---|
X-RateLimit-Limit |
الحدّ الأقصى للنافذة. |
X-RateLimit-Remaining |
المتبقّي في النافذة الحالية. |
Retry-After |
ثوانٍ حتى السماح بطلب جديد (مع 429). |
Webhooks
التطبيقات الخارجية (External) تستقبل أحداث المنصّة عبر webhooks موقَّعة. كل webhook هو HTTP POST بجسم JSON موقَّع بـ HMAC-SHA256 على المظروف `
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "education.students.created",
"tenant_id": 42,
"created_at": "2026-04-26T10:30:15+03:00",
"data": { "student": { "id": 123, "full_name": "..." } }
}
| Header | الوصف |
|---|---|
X-Okta-Event |
اسم الحدث. |
X-Okta-Delivery-Id |
UUID ثابت عبر إعادة المحاولات (للـ dedup). |
X-Okta-Timestamp |
Unix timestamp وقت التوقيع. |
X-Okta-Signature |
توقيع HMAC-SHA256 (hex). |
التحقق من التوقيع
$expected = hash_hmac(
'sha256',
$request->header('X-Okta-Timestamp').'.'.$request->getContent(),
$YOUR_WEBHOOK_SECRET,
);
if (! hash_equals($expected, $request->header('X-Okta-Signature'))) {
return response('invalid signature', 401);
}
- افحص أن `X-Okta-Timestamp` ضمن آخر 5 دقائق، وخزّن `X-Okta-Delivery-Id` لمدة 15 دقيقة على الأقل لرفض إعادة الإرسال.
- ردّك يجب أن يكون 2xx خلال 10 ثوانٍ. للمعالجة الطويلة اقبل بـ 202 فوراً وعالج خلفياً.
- backoff إعادة المحاولة: 30s → 2m → 10m → 1h → 6h، ثم يُعتبر التسليم فاشلاً ويظهر في صفحة تسليمات Webhook في لوحة الشريك.
مصادر ومراجع
هذا المرجع ملخّص عملي. للتفاصيل الكاملة (أنواع التكامل، دورة حياة التطبيق، الـ manifest، policy scanner) راجع دليل المطوّر.
- دليل المطوّر الكامل
- المصدر الخام (Markdown)
- llms.txt — فهرس صديق للذكاء الاصطناعي
- التقديم لتصبح شريكاً