أحداث التدقيق

للمسؤولين

يتيح سجل التدقيق لأداة المراقبة الأمنية لديك (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للطلب الذي أجرى التغيير.
occurredAtISO 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"
}