curl --request GET \
--url https://{issuer}/step-up/{step_up_id}/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://{issuer}/step-up/{step_up_id}/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{issuer}/step-up/{step_up_id}/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{issuer}/step-up/{step_up_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{issuer}/step-up/{step_up_id}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{issuer}/step-up/{step_up_id}/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{issuer}/step-up/{step_up_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "94efc2c3-ca84-42fe-900b-6fb61669a7a1",
"rule": "payout",
"method": "selfie",
"status": "approved",
"level": "liveness_face_match",
"amount": "900.00",
"currency": "USD",
"created_at": "2026-10-17T10:41:14.894632Z",
"completed_at": "2026-10-17T10:43:02.118204Z",
"expires_at": "2026-10-17T11:11:14.894581Z"
}الحصول على حالة التحقق الإضافي | واجهة Didit للمصادقة
يعرض GET /step-up// حالة التحقق الإضافي وطريقته ومستواه في Didit. نفّذ الإجراء الحساس فقط عند كون الحالة مقبولة.
curl --request GET \
--url https://{issuer}/step-up/{step_up_id}/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://{issuer}/step-up/{step_up_id}/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{issuer}/step-up/{step_up_id}/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{issuer}/step-up/{step_up_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{issuer}/step-up/{step_up_id}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{issuer}/step-up/{step_up_id}/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{issuer}/step-up/{step_up_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "94efc2c3-ca84-42fe-900b-6fb61669a7a1",
"rule": "payout",
"method": "selfie",
"status": "approved",
"level": "liveness_face_match",
"amount": "900.00",
"currency": "USD",
"created_at": "2026-10-17T10:41:14.894632Z",
"completed_at": "2026-10-17T10:43:02.118204Z",
"expires_at": "2026-10-17T11:11:14.894581Z"
}https://<name>.auth.didit.me، ولا تقبل مفتاح API الخاص بك لدى Didit أبدًا.404. تصبح عملية المصادقة المرحلية في الحالة pending بحالة expired بعد مرور 30 دقيقة.التفويضات
token الوصول الخاص بالشخص من POST /token/: عبارة عن ES256 JWT برأس typ: at+jwt، صالح لمدة 5 دقائق كحد أقصى. ليس مفتاح API الخاص بك في Didit.
معلمات المسار
معرّف id من POST /step-up/، وهو أيضاً معامل الاستعلام step_up في return_to الخاص بك. تؤدي القيمة التي ليست من نوع UUID إلى صفحة 404، وليس استجابة JSON.
الاستجابة
التحقق الإضافي.
عملية تحقق يتعين على الشخص اجتيازها قبل اتخاذ الإجراء.
"94efc2c3-ca84-42fe-900b-6fb61669a7a1"
القاعدة التي طلبت ذلك. عند انطباق عدة قواعد، يتم اختيار القاعدة ذات الطريقة الأقوى.
payout, device, bank, contact "payout"
ما يقوم به الشخص: liveness، أو selfie (كشف الحيوية مع مطابقته للوجه الذي بحوزة Didit بالفعل)، أو full_id (المستند وصورة سيلفي). عندما لا تحتفظ Didit بأي وجه للشخص بعد، يتحول selfie إلى full_id بمجرد فتحه لـ verification_url.
liveness, selfie, full_id "selfie"
اتخذ إجراءً فقط عند approved. ينتظر review مراجعة فريقك. لا يعد declined نهائياً طالما أن verification_url يعمل: يمكن للشخص المحاولة مرة أخرى، وتعود خطوة التحقق الإضافي إلى pending. يعني superseded أن فحصاً آخر قد تولى عملية التحقق الخاصة بها، أو أن النتيجة لم تكن لخطوة التحقق الإضافي هذه: أنشئ خطوة جديدة.
pending, review, approved, declined, expired, superseded "pending"
المستوى الذي بلغه التحقق بمجرد قبوله.
liveness, liveness_face_match, full_id, null null
مبلغ الدفع، بمنزلتين عشريتين.
"900.00"
"USD"
"2026-10-17T10:41:14.894632Z"
null
30 دقيقة بعد الإنشاء. تؤدي قراءة خطوة التوثيق الإضافي (step-up) أولاً إلى جمع أي نتيجة وصل إليها التحقق، لذا يمكن أن تظل قراءته approved أو review أو declined بعد هذا الوقت؛ وتلك التي لا تزال pending تُقرأ expired.
"2026-10-17T11:11:14.894581Z"