lumex.id English ابدأ الآن

للمطورين

مرجع الواجهة البرمجية

الإصدار 1 · العنوان الأساسي https://api.lumex.id/v1

البداية السريعة

  1. أنشئ عملية تحقق من خادمك لأحد مستخدميك.
  2. أرسل المستخدم إلى الرابط url في الرد. يصور بطاقته المدنية أو جواز سفره ويلتقط صورة شخصية قصيرة من متصفح هاتفه.
  3. نرسل النتيجة إلى عنوان الإشعارات لديك، ونعيد المستخدم إلى redirect_url.

جميع الطلبات والردود بصيغة JSON. استدع الواجهة من خادمك فقط، وليس من المتصفح أو تطبيق الجوال، لأن مفتاحك السري يجب أن يبقى سريا.

المصادقة

أرسل مفتاحك السري في الترويسة Authorization. تحصل على مفتاحين في لوحة التحكم:

المفتاحالاستخدام
lx_test_…وضع التجربة. يشغل الخطوات كاملة مع شريط يوضح أنها تجربة. بلا رسوم.
lx_live_…الوضع الفعلي. تحقق حقيقي، يخصم من العمليات المشمولة أو من رصيدك المسبق.
Authorization: Bearer lx_live_…

إنشاء عملية تحقق

POST/v1/verifications
الحقلالنوعالوصف
referenceنص، إلزاميمعرف المستخدم لديك، حتى 100 حرف. يعود في كل رد وإشعار.
documentنصid_card أو passport أو any. الافتراضي any ويترك الاختيار للمستخدم.
localeنصen أو ar. الافتراضي en، ويمكن للمستخدم تغيير اللغة أثناء الخطوات.
redirect_urlنصعنوان HTTPS يعود إليه المستخدم عند الانتهاء. نضيف إليه ?verification=vrf_….
metadataكائنحتى 20 مفتاحا وقيمة نصية خاصة بك، تعود كما أرسلتها.

أرسل الترويسة Idempotency-Key بقيمة فريدة لتكون إعادة المحاولة آمنة. استخدام المفتاح نفسه خلال 24 ساعة يعيد النتيجة الأولى بدل إنشاء عملية ثانية.

curl https://api.lumex.id/v1/verifications \
  -H "Authorization: Bearer lx_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2b7e-signup-1042" \
  -d '{
    "reference": "user_1042",
    "document": "any",
    "locale": "ar",
    "redirect_url": "https://your-site.com/verified"
  }'

الرد 201 Created:

{
  "id": "vrf_7KQ2M9",
  "reference": "user_1042",
  "status": "created",
  "url": "https://verify.lumex.id/v/…",
  "expires_at": "2026-10-09T08:00:00Z",
  "created_at": "2026-10-08T08:00:00Z"
}

يعمل الرابط لمدة 24 ساعة ولشخص واحد فقط. أنشئ عملية جديدة إذا انتهت صلاحيته.

جلب عملية تحقق

GET/v1/verifications/{id}

يعيد كائن التحقق كاملا. استخدمه للتأكد من إشعار وصلك، أو للاستعلام الدوري إذا لم تتمكن من استقبال الإشعارات.

curl https://api.lumex.id/v1/verifications/vrf_7KQ2M9 \
  -H "Authorization: Bearer lx_live_…"

كائن التحقق

{
  "id": "vrf_7KQ2M9",
  "reference": "user_1042",
  "status": "approved",
  "decline_reasons": [],
  "document": {
    "type": "id_card",
    "country": "KWT",
    "number": "287041501234",
    "surname": "ALSALEM",
    "given_names": "FAHAD",
    "nationality": "KWT",
    "birth_date": "1987-04-15",
    "sex": "M",
    "expiry_date": "2029-03-01"
  },
  "checks": {
    "code_lines": "passed",
    "expiry": "passed",
    "liveness": "passed",
    "face_match": { "result": "passed", "score": 0.97 }
  },
  "metadata": {},
  "created_at": "2026-10-08T08:00:00Z",
  "completed_at": "2026-10-08T08:01:04Z"
}

الحالة تتقدم في اتجاه واحد:

الحالةالمعنى
createdتم إنشاء الرابط، ولم يفتحه المستخدم بعد.
in_progressفتح المستخدم الرابط ويقوم بالتصوير.
approvedنجحت جميع الفحوصات. حالة نهائية.
declinedفشل فحص أو أكثر، انظر decline_reasons. حالة نهائية.
expiredلم يكتمل الرابط خلال 24 ساعة. حالة نهائية ولا تحتسب.

أسباب الرفض: document_unreadable، document_unsupported، code_lines_invalid، document_expired، liveness_failed، face_mismatch.

رموز الدول هي الرموز الثلاثية المطبوعة في السطور المرمزة للوثيقة. تحذف صور الوثيقة والوجه بمجرد صدور النتيجة، لذلك لا تعيدها الواجهة أبدا.

الإشعارات

أضف عنوان الإشعارات في لوحة التحكم. نرسل طلب POST بمحتوى JSON لكل حدث:

الحدثمتى
verification.startedفتح المستخدم الرابط.
verification.approvedتم قبول التحقق.
verification.declinedتم رفض التحقق.
verification.expiredانتهت صلاحية الرابط دون إكمال.
{
  "id": "evt_3HZ81L",
  "type": "verification.approved",
  "created_at": "2026-10-08T08:01:04Z",
  "data": { /* the verification object */ }
}

رد بأي حالة 2xx خلال 10 ثوان. إن لم يحدث ذلك نعيد الإرسال على فترات متزايدة لمدة تصل إلى 24 ساعة. قد يصل الحدث نفسه أكثر من مرة، لذا تجاهل أي id سبق أن عالجته.

تحقق من التوقيع في كل إشعار. يحمل كل طلب الترويسة Lumex-Signature بالشكل t=1791446464,v1=5257a8…. احسب HMAC-SHA256 للنص t + "." + المحتوى الخام بالمفتاح السري للإشعارات وقارنه مع v1. ارفض الطلب إذا كان عمر t أكثر من 5 دقائق.

import crypto from "node:crypto";

export function verifyLumex(rawBody, header, secret) {
  const p = Object.fromEntries(header.split(",").map(x => x.split("=")));
  const t = Number(p.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
  const expected = crypto.createHmac("sha256", secret)
    .update(`${t}.${rawBody}`).digest("hex");
  if (!p.v1 || p.v1.length !== expected.length) return false;
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(p.v1));
}

استخدم المحتوى الخام كما وصل تماما. تحليل JSON ثم إعادة ترميزه يغير البايتات ويفسد التوقيع.

الأخطاء

تعيد الأخطاء محتوى JSON فيه رمز ثابت code يمكنك فحصه في برنامجك، ورسالة مقروءة message:

{ "error": { "code": "invalid_field", "message": "redirect_url must start with https://" } }
HTTPمتى
400حقل مفقود أو غير صحيح.
401المفتاح مفقود أو خاطئ أو ملغى.
402خطتك غير مفعلة أو نفد رصيدك المسبق. اشحن رصيدك من لوحة التحكم.
404لا توجد عملية تحقق بهذا المعرف في هذا الوضع.
409استخدم المفتاح Idempotency-Key نفسه مع محتوى مختلف.
429طلبات كثيرة. انتظر عدد الثواني في Retry-After.
5xxخطأ من جهتنا. أعد المحاولة بالمفتاح Idempotency-Key نفسه.

تحتاج مساعدة؟

أخبرنا عن نظامك عبر نموذج التواصل وسنساعدك في ربط موقعك الأول.