واجهة برمجة المطورين

ادمج AssessFit مع نظام ATS لديك أو Zapier أو أدواتك الداخلية — أنشئ وظائف، وادعُ مرشحين، واسحب النتائج، واستقبل Webhooks موقعة لحظة إنهاء المرشح.

المصادقة

أنشئ مفتاح API من Employer Dashboard → Settings → API & integrations وأرسله مع كل طلب:

curl https://assessfit.com/api/v1/jobs \
  -H "X-Api-Key: tp_live_…"

المفاتيح مرتبطة بمساحة العمل. تدوير المفتاح يبطل السابق فورًا. الطلبات محدودة بـ 300/دقيقة لكل IP.

نقاط النهاية

GET/api/v1/jobs

يسرد الوظائف مع عدد الدعوات والإكمالات.

POST/api/v1/jobs

أنشئ وظيفة وادعُ مرشحين في نداء واحد. تُرسل رسائل الدعوة تلقائيًا؛ وكل دعوة تستهلك رصيدًا واحدًا.

curl -X POST https://assessfit.com/api/v1/jobs \
  -H "X-Api-Key: tp_live_…" -H "Content-Type: application/json" \
  -d '{
    "title": "Senior Accountant",
    "roleKey": "accountant",
    "tests": ["attention", "financial", "numerical", "conscientiousness"],
    "cameraRequired": true,
    "shareResults": false,
    "candidates": [
      { "name": "Ana Putri", "email": "ana@example.com" }
    ]
  }'

مفاتيح الأدوار: accountant, engineer, sales, support, marketing, analyst, custom. هل يمكن إغفال tests؟ لا — مرّر مفاتيح الاختبارات التي تريد؛ وتصفح المكتبة من اللوحة.

GET/api/v1/jobs/:id

تفاصيل الوظيفة كاملة: كل دعوة بطوابعها الزمنية في القمع (tracking.sent/opened/loggedIn)، ورابط الدعوة الشخصي link، وكائن result بعد الإكمال.

POST/api/v1/jobs/:id/invites

أضف مرشحين إلى وظيفة قائمة: {"candidates":[{"name":"…","email":"…"}]}. يعيد الدعوات المنشأة بروابطها.

GET/api/v1/invites/:id/result

اسحب نتيجة مرشح مكتملة: الدرجة الإجمالية، ودرجات كل اختبار، ودرجة النزاهة، والحكم والعلامات، وتحليل الوقت. يعيد 404 حتى ينهي المرشح.

Webhooks

عيّن رابط Webhook في Settings. يرسل AssessFit أحداث JSON بطلبات POST مع توقيع HMAC-SHA256 محسوب على المتن الخام باستخدام مفتاح API الخاص بك سرًّا:

POST https://your-app.example.com/hooks/assessfit
X-AssessFit-Event: candidate.completed
X-AssessFit-Signature: sha256=3f5a…

{
  "event": "candidate.completed",
  "createdAt": "2026-07-22T09:14:03.000Z",
  "data": {
    "inviteId": "inv_…",
    "jobId": "job_…",
    "jobTitle": "Senior Accountant",
    "candidate": { "name": "Ana Putri", "email": "ana@example.com" },
    "overall": 84,
    "scores": { "attention": 83, "numerical": 100 },
    "integrity": { "score": 100, "verdict": "clean" }
  }
}

تحقق من التوقيع قبل الوثوق بأي حمولة:

// Node.js
const crypto = require("crypto");
function verify(rawBody, signatureHeader, apiKey) {
  const expected = "sha256=" +
    crypto.createHmac("sha256", apiKey).update(rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
}

يُعاد إرسال التسليم 3 مرات (فورًا، +2 ث، +8 ث). كل محاولة مرئية في Settings → Recent webhook deliveries، ويمكنك إطلاق حدث webhook.test في أي وقت بزر "Send Test Event". الأحداث: candidate.completed, webhook.test.

وصفات التكامل