الانتقال إلى المحتوى الرئيسي

إنشاء عملية

MarkdownChatGPTClaude

تتعامل نقطة النهاية هذه مع ثلاثة منتجات تشترك في نفس المسار لكنها تختلف في معاملات الجسم والإمكانيات وحقول الاستجابة:

  • التأهيل - يتحقق من هوية المستخدم عن طريق مقارنة وجهه مع قاعدة هويات Unico (مطلوب subject.duiType + subject.code).
  • المعاملات - يتحقق من أنه نفس الشخص من عملية سابقة عن طريق مقارنة وجه بوجه (مطلوب referenceProcessId أو مصفوفة references مع صورة سيلفي / معرّف عملية).
  • Cardholder Verification - يؤكد أن البطاقة تخص حاملها المُعلَن، دون أي التقاط لصورة سيلفي (مطلوب subject.code + card). يمكن اختيارياً إعادة استخدام عملية تم التحقق منها مسبقاً عبر referenceProcessId لتشغيل بوابة إعادة الاستخدام؛ بدونها، تُعيد الاستجابة تلقائياً النتيجة unsure. انظر إمكانية Cardholder Verification.

يتم تحديد المنتج النشط بواسطة APIKEY المرسل في ترويسة الطلب.

للاطلاع على تدفق التكامل الكامل، انظر نظرة عامة على API.

نقطة النهاية​

البيئةالرابط
الإنتاجPOST https://api.id.unico.app/processes/v1
SandboxPOST https://api.id.uat.unico.app/processes/v1

الطلب​

الترويسات
الترويسةالقيمة
AuthorizationBearer <access_token> (انظر المصادقة)
APIKEYمفتاح API المخصص - يحدد المنتج النشط والإمكانيات المفعّلة.
Content-Typeapplication/json
معاملات الجسم
الحقلالنوعمطلوبالوصف
subject.duiTypeintegerنعممعرّف نوع الوثيقة. انظر قيم duiType أدناه.
subject.codestringنعمقيمة المعرف كما هو محدد بواسطة subject.duiType. بدون نقاط أو شرطات.
subject.namestringلاالاسم الكامل.
subject.genderstringلاM أو F.
subject.birthDatestring (ISO 8601)لاتاريخ الميلاد (YYYY-MM-DD).
subject.emailstringلاعنوان البريد الإلكتروني.
subject.phonestringلارقم هاتف E.164.
subject.clientReferencestringمشروطالمعرّف الفريد للمستخدم في نظامك. مطلوب لقدرة حسابات متعددة. فريد في قاعدتك، بحد أقصى 256 حرفاً وبدون مسافات.
useCasestringلاسياق العملية، مثلاً Onboarding.
subsidiaryIdstringلامعرف الفرع — مطلوب فقط إذا كانت هناك فروع متعددة.
imageBase64stringنعمصورة سيلفي ملتقطة بواسطة واجهتك الأمامية، بتنسيق base64.
قيم duiType
الدولةالرمزالوصف
AR6جواز سفر أرجنتيني
AR7DNI الأرجنتيني
AR49رخصة القيادة الأرجنتينية (Licencia Nacional de Conducir)
AT34الرقم الضريبي النمساوي (STNR)
BE36الرقم الوطني البلجيكي (NN)
BR1CPF البرازيلي
BR5جواز سفر برازيلي
BR14CNPJ البرازيلي
CA28SIN الكندي
CH33رقم AHV/AVS السويسري
CL9RUN التشيلي
CL52جواز سفر تشيلي
CL57رخصة القيادة التشيلية (Licencia de Conducir)
CO26NIT الكولومبي
CO53جواز سفر كولومبي
CO55رخصة القيادة الكولومبية (Licencia de Conducción)
CO56بطاقة المواطنة الكولومبية (Cédula de Ciudadanía)
DE41رقم التعريف الضريبي الألماني (IdNr)
DK29CPR الدنماركي
EC10NI الإكوادوري
ES50رقم هوية الأجانب الإسباني (NIE)
ES51وثيقة الهوية الوطنية الإسبانية (DNI)
FI35رمز الهوية الشخصية الفنلندي (HETU)
FR46الرقم الضريبي المرجعي الفرنسي (SPI)
GB30رقم التأمين الوطني البريطاني (NINO)
GT12CUI الغواتيمالي
ID16NIK الإندونيسي
IE47رقم الخدمة العامة الشخصي الأيرلندي (PPSN)
IT37Codice Fiscale الإيطالي (CF)
LU48رقم الهوية الوطني اللوكسمبورغي (Matricule)
MX2CURP المكسيكي
MX25RFC المكسيكي (شخص طبيعي)
MX58رخصة القيادة المكسيكية (Licencia de Conducir)
NG8NIN النيجيري
NG20رقم التحقق المصرفي النيجيري (BVN)
NG43رمز BVN النيجيري (مُجزّأ)
NG44رمز NIN النيجيري (مُجزّأ)
NL42رقم خدمة المواطن الهولندي (BSN)
NO39رقم الهوية الوطني النرويجي (Fødselsnummer)
PE27RUC البيروفي
PE40DNI البيروفي
PE54جواز سفر بيروفي
PL31PESEL البولندي
PT45رقم التعريف الضريبي البرتغالي (NIF)
SE32الرقم الشخصي السويدي (PNR)
SE38الرقم التنسيقي السويدي (Samordningsnummer)
TR24رقم الهوية التركي (TCKN)
US4SSN الأمريكي
US11جواز سفر أمريكي
US18رخصة قيادة أمريكية
US21بطاقة جواز سفر أمريكية
US22جواز سفر أمريكي مصنوع من البولي كاربونات
US23بطاقة هوية أمريكية
UY13CI الأوروغوياني
ZZ15عنوان البريد الإلكتروني
ZZ17رقم الهاتف
—0غير محدد
—3معرّف Unico الداخلي
متطلبات الصورة
  • الدقة الدنيا: 640 × 480 (معيار HD)
  • الحجم الأقصى للملف: 800 KB (يُنصح بضغط JPEG92)
  • التنسيقات المقبولة: PNG، JPEG، WebP
  • رموز JWT من SDK تنتهي صلاحيتها بعد 10 دقائق ويمكن استخدامها مرة واحدة فقط
الطلبات المضغوطة

تدعم API إرسال جسم الطلب مضغوطاً، باستخدام ترويسة HTTP القياسية Content-Encoding. هذا اختياري ومتوافق بالكامل مع الإصدارات السابقة: العملاء الذين لا يرسلون هذه الترويسة يستمرون في العمل تماماً كما كان الحال من قبل.

التنسيقات المدعومة
الترميزترويسة Content-Encodingالحالة
Gzipgzip✅ مُوصى به
Deflatedeflate✅ مدعوم
بدون ضغط(الترويسة غير موجودة)✅ مدعوم (السلوك الافتراضي)
توصية

استخدم gzip. فهو يحظى بالدعم الأكثر شمولاً عبر اللغات ومكتبات HTTP، مما يجنّبك الغموض في التنفيذ الموجود في التنسيقات الأخرى.

يُنصح باستخدام الضغط للطلبات التي تحتوي على جسم كبير (مثل حمولات JSON ضخمة، أو رفع صور مشفّرة بـ base64، أو إرسال دفعات). بالنسبة للطلبات الصغيرة، قد لا يحقق عبء الضغط فائدة ملموسة.

كيفية إرسال طلب مضغوط
  1. اضغط جسم الطلب (مثل JSON المُسلسَل) باستخدام الخوارزمية المختارة.
  2. أرسل الجسم المضغوط كبايتات ثنائية في الطلب.
  3. أضف ترويسة Content-Encoding بالقيمة المطابقة (gzip أو deflate).
  4. احتفظ بترويسة Content-Type لوصف تنسيق المحتوى الأصلي (مثلاً application/json)، وليس ترميز النقل.
echo '{"subject":{"code":"12345678909"},"useCase":"Onboarding","imageBase64":"/9j/4AAQSkZJR..."}' | gzip > body.json.gz

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-H "Content-Encoding: gzip" \
--data-binary @body.json.gz
نصيحة

للمثال بلغة Python، استخدم معامل data=، وليس json=. معامل json= يُسلسل الحمولة تلقائيًا لكنه لا يضغطها.

استخدام deflate بدلاً من ذلك: التدفق أعلاه مطابق تمامًا — يتغير فقط استدعاء الضغط وقيمة Content-Encoding.

اللغةdeflate
Bash / cURLzlib-flate -compress < body.json > body.json.deflate (من qpdf)، ثم -H "Content-Encoding: deflate"
Pythonzlib.compress(data) بدلاً من gzip.compress(data)
.NET (C#)System.IO.Compression.DeflateStream بدلاً من GZipStream
deflate غامض في الممارسة العملية

يُحدَّد ترميز المحتوى deflate في HTTP على أنه تدفق zlib (RFC 1950)، لكن بعض العملاء والخوادم تاريخيًا تُصدر أو تتوقع تدفق DEFLATE الخام (RFC 1951) بدلاً من ذلك. تتوقع هذه الواجهة البرمجية (API) تدفق zlib القياسي المُغلَّف — وهو نفس الناتج الذي تُنتجه zlib.compress() (بايثون) أو DeflateStream (.NET) بشكل افتراضي. عند الشك، يُفضَّل استخدام gzip، الذي لا يحمل هذا الغموض.

سلوك الخطأ

إذا تم إرسال Content-Encoding بقيمة غير مدعومة، أو كان الجسم تالفاً أو غير صالح للترميز المُعلن، تُعيد API الخطأ 400 Bad Request مع رسالة تشير إلى فشل فك ضغط جسم الطلب.

الأسئلة الشائعة

هل يتعين علي تغيير أي شيء إذا لم أرغب في استخدام الضغط؟ لا. دعم Content-Encoding إضافي — تستمر معالجة الطلبات التي لا تحتوي على هذه الترويسة بشكل طبيعي.

هل يؤثر هذا على استجابة API؟ لا. تتعلق هذه الميزة فقط بالجسم المُرسل من العميل (الطلب). ضغط الاستجابة (ما تُعيده API) يُتحكم فيه بشكل منفصل بواسطة ترويسة Accept-Encoding.

ما التنسيق الذي يجب أن أختاره؟ استخدم gzip، إلا إذا كان هناك قيد معين في بيئتك يتطلب تنسيقاً آخر.

مثال​

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": {
"duiType": 1,
"code": "12345678909",
"name": "Luke Skywalker",
"gender": "M",
"birthDate": "2000-05-20",
"email": "[email protected]",
"phone": "5519725570707"
},
"useCase": "Onboarding",
"imageBase64": "/9j/4AAQSkZJR..."
}'

الاستجابات​

200 OK

التعاقد فريد — يحمل الحقل idCloud.result الحكم الموحّد للإمكانيات المستخدمة.

توحّد Unico نتائج الإمكانيات المنفّذة في idCloud.result واحد، جاهز لتحديد الخطوة التالية في تدفقك — دون الحاجة إلى تنسيق النتائج الفردية.

{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"idCloud": {
"result": "approved"
}
}
الحقلالنوعالوصف
idstring (UUID)معرّف العملية. استخدمه مع الحصول على العملية لإعادة الاستعلام.
statusinteger1 (قيد المعالجة)، 3 (انتهت بنجاح)، 5 (خطأ).
قيم النتيجة المحتملة
idCloud.resultالمعنىالإجراء الموصى به
approvedشخص حقيقي وهوية تم التحقق منها.تابع التدفق.
deniedلم يتم التحقق من الهوية، فشل فحص لايفنس، أو تم تحديد مخاطر شديدة.أنهِ التدفق أو أعد التوجيه إلى تدفق بديل.
critical-riskتم تحديد مستوى مخاطر حرج.أنهِ التدفق أو وجّهه إلى مراجعة يدوية.
high-riskتم تحديد مستوى مخاطر مرتفع.وجّه إلى مراجعة يدوية أو تدفق بديل.
retryالتقاط أو درجة غير كافية للتقييم.اطلب من المستخدم التقاطاً جديداً.
inconclusiveلا يوجد دليل كافٍ لإصدار حكم.وجّه إلى مراجعة يدوية أو تدفق بديل.

تعتمد القيم المُرجعة على الوصفة المكوّنة في APIKey الخاص بك. انظر التدفقات لمعرفة قيم النتيجة التي يمكن أن ترجعها كل وصفة.

Brazilقد يتلقى العملاء في البرازيل الاستجابة حسب الإمكانية

يظل الهيكل العام للاستجابة كما هو — النتيجة الواحدة هي الافتراضية.

قد تتلقى عمليات التكامل في البرازيل النتائج المفتوحة لكل إمكانية على حدة. تضيف كل إمكانية مفعّلة في APIKey كتلتها الخاصة إلى الاستجابة — يتم حذف الحقول الخاصة بالإمكانيات غير المفعّلة.

{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"unicoId": { "result": "yes" },
"riskLevel": { "result": "inconclusive" },
"idFace": {
"personId": "a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890",
"result": "FOUND"
},
"government": { "serpro": 87 },
"liveness": 1
}
تعتمد حقول الاستجابة على مفتاح APIKey الخاص بك

يعرض المثال أعلاه جميع حقول الإمكانيات الممكنة. ستتضمن استجابتك الفعلية فقط الحقول المتعلقة بالإمكانيات المفعّلة في إعدادات APIKey الخاصة بك — يتم حذف الحقول المتعلقة بالإمكانيات غير المفعّلة كلياً. تواصل مع مدير مشروع Unico لتفعيل الإمكانيات أو تعديلها.

الحقلالنوعالوصف
unicoId.resultstringyes، no، inconclusive - انظر التحقق من الهوية.
riskLevel.resultstringapproved، reproved، risk-critical، risk-high، inconclusive — انظر القيم المحتملة أدناه أو تصنيف مخاطر الاحتيال.
idFace.resultstringFOUND — انظر معرّف الوجه.
idFace.personIdstringمعرّف مستقر وغير شفاف للوجه، يُعاد جنبًا إلى جنب مع idFace.result = FOUND. عندما يتعذّر التعرف على أي وجه في الصورة، يفشل الطلب بالخطأ 20532 بدلاً من إعادة كتلة idFace.
identityFraudsters.resultstringمهجور. استخدم riskLevel بدلاً منه. يمكن للعملاء الذين لديهم عمليات تكامل جارية الاستمرار في استخدامه أثناء تنسيق الترحيل مع الفريق المسؤول عن المشروع.
government.serprointegerدرجة تشابه Serpro (0-100، -1، -2). متاح في البرازيل فقط. انظر عائد تشابه Serpro.
livenessinteger1 (نجح)، 2 (فشل) - انظر لايفنس.
riskLevel.result — القيم المحتملة
القيمةالمعنى
approvedهذا هو وجه صاحب الهوية، ولم يتم العثور على أي دليل يتعلق بالاحتيال.
reprovedيُوصى بالرفض، إذ تم اكتشاف مؤشرات احتيال متعددة.
risk-criticalيُوصى بالرفض، غير أن القرار النهائي يعود إلى تقديركم. تشير المخاطرة الحرجة إلى وجود ما لا يقل عن دليلين قويين على الاحتيال.
risk-highيُوصى بالرفض أيضاً، لكن القرار يبقى بيدكم. تشير المخاطرة العالية إلى وجود دليل قوي واحد على الأقل على الاحتيال.
inconclusiveلم يتم العثور على أدلة قوية على الاحتيال، وبالتالي لا يمكن استنتاج ما إذا كانت هناك مخاطرة ذات صلة أم لا.
معلومة

عندما يكون unicoId.result = inconclusive وتنسيق درجة المخاطر نشط، قد تُرجع العملية status: 1 (قيد المعالجة). استعلم عبر الحصول على العملية أو استخدم webhooks لاسترداد النتيجة النهائية.

Mexicoقد يتلقى العملاء في المكسيك كتلة التحقق من RENAPO

تحتفظ الاستجابة بالهيكل نفسه وتضيف كتلة idGov.

تتلقى عمليات التكامل في المكسيك التي فُعّل فيها التحقق من RENAPO كتلة idGov إضافية تتضمن السجل الذي تحتفظ به RENAPO لـ CURP الخاص بالمستخدم. وهي إجابة منفصلة عن نتيجة الهوية.

{
"id": "11111111-2222-3333-4444-555555555555",
"status": 3,
"idCloud": { "result": "approved" },
"idGov": {
"government_valid": true,
"curp": "PUEA880304MDFRJN04",
"government_name": "ANA PRUEBA EJEMPLO",
"date_of_birth": "1988-03-04",
"age": 38,
"gender": "F",
"deceased": false,
"is_mexican": true,
"citizenship": "MEXICO",
"state_of_birth": "Ciudad de México",
"state_iso": "MX-CMX",
"issuing_entity_code": "DF",
"municipality_registration": ""
}
}
الحقلالنوعالوصف
idGovobjectسجل RENAPO لـ CURP. غائب عندما لا تكون القدرة مفعّلة. {} عندما لا تستجيب RENAPO. المكسيك فقط. انظر التحقق من RENAPO.

رموز الخطأ​

الرمزالرسالةالوصف
40221This flow does not support reusing a prior process (referenceProcessId or bioTokenId) without an image; send an image (imageBase64, or references[0] with type IMAGE_BASE64) instead.تم رفض تدفق إعادة الاستخدام (referenceProcessId/bioTokenId، بدون صورة) لأن إعادة استخدام العملية غير مفعّلة لهذا مفتاح API.
20900O base64 informado não é válido.معامل base64 غير صالح. الأسباب المحتملة: ليس صورة أو محاولة حقن.
20807A imagem precisa estar no padrão HD ou possuir uma resolução superior a 640 x 480.دقة الصورة المرفوعة منخفضة جداً.
20532No face detected in image.تعذّر اكتشاف أي وجه في الصورة المرسلة.
20513The referenced process was not found.يشير referenceProcessId إلى عملية غير موجودة أو لم تعد متاحة.
20512The referenced process is not available for reuse.العملية المرجعية موجودة لكنها غير متاحة لإعادة الاستخدام.
20509The subject.name field is invalid.يحتوي subject.name على أحرف غير صالحة.
20508The subject.gender field is invalid.يجب أن يكون subject.gender هو M أو F.
20507O parâmetro subject.code é inválido.CPF غير قياسي أو غير موجود.
20506O base64 informado é muito grande. O tamanho máximo suportado é até 800kb.حجم الصورة يتجاوز 800 KB؛ اضغط إلى JPEG92.
20505O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp.تنسيق base64 غير صالح أو غير مدعوم.
20065The referenceProcessId field is invalid.referenceProcessId ليس UUID صالحاً.
20062The useCase field is invalid.قيمة غير معروفة في حقل useCase.
20024The referenceProcessId field is missing.لم يتم تقديم معامل referenceProcessId ولم يتم إرسال references كبديل. لا ينطبق على Cardholder Verification — لا يتم أبداً التحقق من referenceProcessId فيها كحقل مطلوب؛ بوابة إعادة استخدام غير مستوفاة تُجيب بـ unsure عوضاً عن ذلك.
20533The card field is missing.Cardholder Verification: لم يتم تقديم كائن card.
20534The card.bin field is missing.Cardholder Verification: لم يتم تقديم card.bin.
20535The card.last4 field is missing.Cardholder Verification: لم يتم تقديم card.last4.
20536The card data is invalid.Cardholder Verification: تم رفض بيانات البطاقة باعتبارها غير صالحة.
20021The subject.phone field is invalid.تنسيق subject.phone غير صالح (IDD + رمز المنطقة + الرقم، 13 حرف).
20019The subject.birthDate field is invalid.subject.birthDate خارج تنسيق ISO 8601 (YYYY-MM-DD).
20009O parâmetro imagebase64 não foi informado.معامل صورة السيلفي مفقود.
20008The subject.email field is invalid.تنسيق بريد إلكتروني غير صالح في subject.email.
20006O parâmetro subject.name não foi informado.معامل subject.name مفقود.
20005O parâmetro subject.code não foi informado.معامل subject.code مفقود.
20004O parâmetro subject não foi informado.معامل subject مفقود.
20003The request body is missing or invalid.حمولة فارغة أو غير صالحة.
20002O parâmetro APIKey não foi informado.معامل APIKEY مفقود من ترويسة الطلب.
20001O parâmetro authtoken não foi informado.معامل رمز التكامل مفقود من ترويسة الطلب.
10508The JWT with the captured face has already been used.يمكن استخدام JWT مرة واحدة فقط.
10507The JWT with the captured face is expired.انتهت صلاحية JWT؛ يجب إرساله خلال 10 دقائق.
10506The imageBase64 field is not a valid JWT from SDK.imageBase64 ليس JWT صالحاً تم إنشاؤه بواسطة SDK.

ما التالي​

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