يتيح سجل التدقيق لأداة المراقبة الأمنية لديك (SIEM) جمع سجل تدقيق مساحة عملك: كل تغيير يتم في التطبيق أو عبر الواجهة البرمجية، وعمليات تسجيل الدخول، والتصدير، ونشاط مشرفي المنصة. ويعيد الصفوف نفسها الظاهرة في الإعدادات ← سجل التدقيق، الأقدم أولاً، لتسحبها دورياً باستخدام updatedSince والمؤشر.
جميع النقاط تحت /api/v1 وتتطلب مفتاح واجهة برمجية (Authorization: Bearer jdr_live_…) ينشئه مسؤول مساحة العمل من الإعدادات ← التكاملات.
النقاط
| الطريقة والمسار | ما تفعله | الصلاحية |
|---|---|---|
GET /api/v1/audit-events | سرد صفوف التدقيق، الأقدم أولاً (ترقيم بالمؤشر، updatedSince) | audit.view |
لا تُسجَّل قراءات الواجهة البرمجية في التدقيق، لذا يحمل السجل عمليات الكتابة وتسجيل الدخول والتصدير فقط.
كائن حدث التدقيق
| الحقل | النوع | ملاحظات |
|---|---|---|
id | نص | |
workspaceId | نص أو null | مساحة عملك. |
action | نص | مفتاح الإجراء، مثل recruitment.application.stage_changed وauth.signed_in وaudit.log.exported. |
actor | كائن | { type, id, name }. قيمة type: user (مستخدم في مساحة العمل)، أو integration (مفتاح واجهة برمجية؛ وname اسم التكامل؛ وقيمة id فارغة بعد حذف التكامل)، أو system (أتمتة بحسب metadata.source، أو مشرف منصة يعمل من لوحة المنصة). |
target | كائن أو null | { type, id, label }: السجل الذي تم عليه الإجراء. يبقى label مقروءاً بعد حذف السجل. |
metadata | كائن أو null | كما خُزّن: changes ({ field: { from, to } })، وlabel، وsource، وactorIntegration ({ name, keyPrefix } لعمليات الواجهة البرمجية) وتفاصيل خاصة بالإجراء. |
ipAddress، userAgent | نص أو null | للطلب الذي أجرى التغيير. |
occurredAt | ISO 8601 | وقت الحدوث. |
تُحجب كلمات المرور والرموز والأسرار الأخرى ([redacted]) عند كتابة الصف. وتظهر قيم تواصل المرشح (البريد والجوال ورقم الهوية) داخل metadata.changes بالقيمة [redacted] للمفاتيح التي لا تملك recruitment.candidate.contact. وفي صفوف الأوصاف الوظيفية تُستبعد من metadata.changes حقول التقييم الداخلية التي ليست جزءًا من الواجهة البرمجية (درجة التقييم وعلامة الوصف المؤقت). وللمفاتيح التي لا تملك structure.functional.salary يُستبعد الأجر: مفاتيح الأجر في metadata.changes لصفوف الوظائف (payScaleId وpayGradeId وpayStepNumber وbaseSalary) وصفوف الأوصاف الوظيفية (payScaleId وpayGradeId وsalaryMin وsalaryMax)، وmetadata.changes كاملة لصفوف سلالم الرواتب (ومنها مبالغ المراتب)، وmetadata.rank لمرتبة سلم الرواتب، وقيم الأجر المحفوظة في المستوى الأعلى من metadata في أي صف (payScaleId وpayGradeId وpayStepNumber وbaseSalary وpayPeriod وsalaryMin وsalaryMax وgradeCode)، مثل معرّفات الأجر عند إنشاء وظيفة أو شاغر. وتبقى المعرّفات والتسميات، مثل الوظائف والأوصاف المعاد تسعيرها المدرجة عند تعديل مرتبة رواتب.
السحب الدوري
- يصفّي
updatedSinceعلىoccurredAt: الصفوف المسجّلة في ذلك الوقت أو بعده. صفوف التدقيق لا تتغير. - تأتي الصفوف الأقدم أولاً؛ تابع
nextCursorحتى يصبحnull، ثم اسحب لاحقاً معupdatedSinceمضبوطاً على آخرoccurredAtخزّنته (وأزل التكرار بحسبid). - قيمة
limitمن 1 إلى 100 (الافتراضي 50).
ويُرسل الكائن نفسه كحدث خطاف الويب الاختياري audit.recorded: اختره صراحة على النقطة (ليس ضمن *).
الأخطاء
| الحالة والرمز | المعنى |
|---|---|
403 forbidden | المفتاح لا يملك audit.view. |
422 validation_failed | قيمة غير صالحة لـ limit أو cursor أو updatedSince. |
مثال
curl "https://jadiroon.com/api/v1/audit-events?updatedSince=2026-10-24T09:00:00Z&limit=1" \
-H "Authorization: Bearer $JADIROON_KEY"
{
"data": [
{
"id": "cmvm7ru0q0006kndle0fx4ivt",
"workspaceId": "cmvikf7rn0001knoq5veyug12",
"action": "recruitment.interview.reproposed",
"actor": { "type": "integration", "id": "cmvjkkvpz0001kndd3kvfcsj7", "name": "ERP sync" },
"target": { "type": "interview", "id": "cmvm7rmyv0001kndlb0qdm315", "label": "تركي العنزي" },
"metadata": {
"label": "تركي العنزي",
"changes": { "location": { "from": "HQ room 2", "to": "Online" }, "durationMinutes": { "from": 45, "to": 60 } },
"actorIntegration": { "name": "ERP sync", "keyPrefix": "jdr_live_ITY" }
},
"ipAddress": "203.0.113.10",
"userAgent": "curl/8.7.1",
"occurredAt": "2026-10-24T09:46:14.331Z"
}
],
"nextCursor": "Y212bTdydTBxMDAwNmtuZGxlMGZ4NGl2dA"
}