Jenga kwa Zoi ID
API mbili kwenye host moja, wateja wenye aina kwa lugha sita, mtiririko tunaouhifadhi na sandbox. Mwongozo kamili uko wazi kusoma, na funguo za sandbox zinakuja na ufikiaji wa mapema.
URL ya msingihttps://kyc.zoi.network
Kuanza haraka
- 1
Unda kipindi
Backend yako huita
POST /v1/partner/sessionskwa ufunguo wako wa mshirika. - 2
Endesha mtiririko
Pitisha tokeni ya mteja kwa SDK, au fungua
verificationUrlkwenye kivinjari. - 3
Pokea matokeo
Kagua sahihi ya webhook, kisha hifadhi kitambulisho cha utambulisho na hali yake.
curl https://kyc.zoi.network/v1/partner/sessions \
-H "Authorization: Bearer $ZOI_ID_PARTNER_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: signup-user_42" \
-d '{ "externalUserId": "user_42", "level": "standard", "appId": "com.example.app" }'API mbili
API ya washirika
Seva kwa seva, chini ya /v1/partner. Tuma ufunguo wako wa mshirika kama tokeni ya Bearer. Usiuweke kwenye programu kamwe.
API ya mteja
Hutumiwa na SDK, chini ya /v1/client. Hutuma tokeni ya mteja inayofanya kazi kwa kipindi kimoja kwa dakika 60.
Kanuni
- Muda ni milisekunde za epoch, kwenye sehemu ambazo majina yake huishia na
At. - Tarehe ziko kwa muundo
YYYY-MM-DD. Sehemu zisizojulikana niXX, kwa mfano1990-XX-XX. - Maombi ya POST yanayounda au kuamua kitu hukubali kichwa
Idempotency-Key. Funguo huhifadhiwa kwa saa 24. - Mabadiliko ya kipindi hutuma toleo linalotarajiwa. Likiwa limebadilika, unapata
revision_conflict.
Mtiririko wa kipindi
Seva yako huunda kipindi. SDK huendesha hatua. Seva hukagua mpangilio na hujibu step_not_allowed hatua ikija mapema mno.
1. Unda kipindi kutoka seva yako
Ukiita tena kwa mtumiaji yuleyule, kipindi kilicho wazi kinaendelea na tokeni mpya ya mteja inatolewa.
POST /v1/partner/sessions
Authorization: Bearer <partner key>
Content-Type: application/json
Idempotency-Key: 6f1c2a9e-signup-42
{
"externalUserId": "user_42",
"level": "standard",
"locale": "en",
"appId": "com.example.app"
}
200 OK
{
"sessionId": "ses_...",
"clientToken": "...",
"clientTokenExpiresAt": 1767225600000,
"status": "created",
"apiBaseUrl": "https://kyc.zoi.network",
"resumed": false
}2. Hatua ambazo SDK huendesha
- 01
Soma kipindi na hatua ambazo bado zinahitajika.
GET /v1/client/session
- 02
Rekodi idhini, pamoja na chaguo tofauti la hiari la kulinganisha uso.
POST /v1/client/consent
- 03
Kagua programu na kifaa. Matokeo ni sehemu ya uamuzi.
POST /v1/client/attestation/challenge, POST /v1/client/attestation
- 04
Tuma hati: soma chipu baada ya kuchanganua MRZ, au tuma picha.
POST /v1/client/document/mrz-scan, POST /v1/client/document/chip/challenge, POST /v1/client/document/chip or POST /v1/client/document/photos
- 05
Rekodi video fupi moja kwa kamera ya mbele wakati programu inaonyesha mijongeo ya kichwa.
POST /v1/client/liveness/challenge, POST /v1/client/liveness
- 06
Tuma nchi ya ukaazi, na anwani kwenye kiwango cha ziada.
POST /v1/client/profile
- 07
Pale tu kuna sharti la anwani: pakia hati, kisha thibitisha anwani. Huachwa pale hati ya utambulisho tayari imeitoa.
POST /v1/client/address/document, POST /v1/client/address/confirm
- 08
Pale tu kuna sharti la fedha: hifadhi majibu, ongeza hati sera inapozihitaji, kisha kamilisha hatua.
POST /v1/client/funds/answers, POST /v1/client/funds/document, POST /v1/client/funds/remove, POST /v1/client/funds/complete
- 09
Jibu maswali mawili: je, ni mtu mwenye wadhifa wa kisiasa, na je, anafanya kwa niaba yake mwenyewe.
POST /v1/client/declarations
- 10
Wasilisha kwa toleo la sasa.
POST /v1/client/submit
Mtumiaji pia anaweza kuomba mtu akague tena matokeo ya kiotomatiki (POST /review-request) au kuondoa idhini, jambo linalositisha kipindi na kufuta faili zake mara moja (POST /withdraw).
Uthibitisho wa anwani na chanzo cha fedha
Ongeza requirements kwenye POST /v1/partner/sessions ili kuthibitisha zaidi ya utambulisho. address huomba uthibitisho wa anwani. source_of_funds huuliza fedha zinatoka wapi, na source_of_wealth huuliza pia jumla ya utajiri na jinsi ulivyojengwa. Thamani hizo mbili za fedha kwa pamoja ni hatua moja, na zote mbili huchanganyika na address.
POST /v1/partner/sessions
Authorization: Bearer <partner key>
Content-Type: application/json
{
"externalUserId": "user_42",
"level": "standard",
"appId": "com.example.app",
"requirements": ["address", "source_of_funds"],
// Optional. Without them your partner default applies, else ours.
"addressPolicy": { "maxAgeDays": 90, "signedOnly": false },
"fundsPolicy": { "evidence": "optional", "currency": "EUR" }
}Sera za hiari
Bila sera, chaguo-msingi lako la mshirika hutumika, la sivyo letu. Sera hunakiliwa kwenye kipindi kinapoundwa.
addressPolicy:maxAgeDays(chaguo-msingi 90, 1 hadi 366),acceptedTypes(chaguo-msingi: hati za huduma, simu na benki, hati za kodi, barua za serikali na vyeti vya makazi) nasignedOnly(chaguo-msingi false).fundsPolicy:questions,evidence(none,optionalaurequired, chaguo-msinginone),acceptedTypes,maxAgeDays(chaguo-msingi 180),currency(ISO 4217, chaguo-msingi USD) nabracketskwa viwango.- Kipindi kilicho wazi chenye masharti mengine ambacho bado hakijawasilishwa hughairiwa na kipya huanza, kama ilivyo kwa kubadilisha kiwango.
- Jaribu kila matokeo kwa hali za majaribio za sandbox kama
address_signed_pdf,address_document_review,funds_signed_documentsnafunds_review.
Vipindi vya ufuatiliaji
Thibitisha masharti tu kwa mtumiaji ambaye utambulisho wake tayari uko hai kwako. Tuma reuseIdentity: true pamoja na requirements.
- Mtumiaji hutoa idhini na hukamilisha hatua mpya tu. Hati, selfie au matamko haviombwi tena.
- Ikikubaliwa, utambulisho hubaki na kitambulisho chake, tarehe ya uthibitisho na muda wa uhalali, na hupata matokeo mapya. Unapokea
session.approvednaidentity.updated. - Bila utambulisho ulio hai, mwito hujibu 409
step_not_allowed. - Kianzishe kutokana na kanuni zako za hatari, kama amana kubwa, alama ya PEP au nchi ya hatari. Kanuni zako hubaki kwenye backend yako, mahali pamoja.
POST /v1/partner/sessions
Authorization: Bearer <partner key>
Content-Type: application/json
Idempotency-Key: edd-user_42-2026-11
{
"externalUserId": "user_42",
"appId": "com.example.app",
"requirements": ["source_of_funds", "source_of_wealth"],
"reuseIdentity": true,
"fundsPolicy": { "evidence": "required" }
}
// No active identity for user_42:
409 { "error": { "code": "step_not_allowed", ... } }Matokeo na ruhusa
Vipindi vilivyokubaliwa hubeba address na funds, na utambulisho huhifadhi matokeo ya hivi karibuni ya kila kimoja. Sehemu za muhtasari huja na kila ruhusa. Taarifa za kina zinahitaji ruhusa.
- Ruhusa
address: mistari ya anwani. Bila hiyo unapataverified,method,evidenceLevel,documentType,documentDate,verifiedAtnacountry. - Ruhusa
financial_data:answers,documentsnafindings. Bila hiyo unapatakinds,evidenceLevel,reviewed,documentCountnaverifiedAt. Kamwe si sehemu yaeligibility. evidenceLevelnihigh,medium,lowaunone. Njia za anwani, kuanzia iliyo imara zaidi:wallet,id_document,signed_pdf,official_code,document_reviewnadeclared.- Hati hazitumwi kupitia API. Wanachama wenye jukumu la uzingatiaji wanaweza kuona kurasa za hati za chanzo cha fedha kwenye dashibodi pale mazingira yana ruhusa
financial_data. Kila mtazamo hurekodiwa.
"session": {
"id": "ses_...",
"status": "approved",
"requirements": ["address", "source_of_funds"],
"reusesIdentity": false,
"address": {
"verified": true,
"method": "signed_pdf",
"evidenceLevel": "high",
"documentType": "bank_statement",
"documentDate": "2026-10-14",
"verifiedAt": 1767225600000,
"country": "DE",
// scope "address"
"address": { "line1": "Musterstrasse 12", "city": "Berlin", "postalCode": "10115", "country": "DE" }
},
"funds": {
"kinds": ["source_of_funds"],
"evidenceLevel": "medium",
"reviewed": true,
"documentCount": 2,
"verifiedAt": 1767225600000,
// scope "financial_data"
"answers": {
"employmentStatus": "employed",
"income": { "min": 50000, "max": 100000, "currency": "EUR" },
"sources": ["salary", "savings"],
...
},
"documents": [
{ "documentType": "payslip", "documentDate": "2026-10-31", "amount": 5200, "currency": "EUR",
"signature": "valid", "signedByKnownIssuer": true, "nameMatch": "match", "findings": [], ... },
...
],
"findings": []
}
}Mtiririko wa wavuti
Huna SDK? Mtume mtumiaji kwenye ukurasa wetu tunaouhifadhi. Unatumia API ile ile, ukaguzi ule ule na foleni ile ile ya ukaguzi wa binadamu.
1. Pata kiungo
POST /v1/partner/sessions hurudisha verificationUrl. Tuma redirectUrl ili kumrudisha mtumiaji kwako akimaliza. Lazima ianze na mojawapo ya asili za kuelekeza ulizosajili.
POST /v1/partner/sessions
Authorization: Bearer <partner key>
Content-Type: application/json
{
"externalUserId": "user_42",
"level": "standard",
"locale": "en",
"appId": "com.example.app",
"redirectUrl": "https://example.com/kyc/done"
}
200 OK
{
"sessionId": "ses_...",
"clientToken": "...",
"verificationUrl": "https://kyc.zoi.network/verify/#token=...&lang=en",
...
}- Tokeni ya mteja iko kwenye fragment ya URL, baada ya
#. Vivinjari havitumi fragment kwa seva kamwe, kwa hiyo tokeni haiko kwenye kumbukumbu za seva wala kwenye kichwa chaReferer. Ukurasa huisoma, huiondoa kwenye upau wa anwani na huiweka kwenye kumbukumbu ya kifaa tu. - Ongeza
langkwenye fragment ili kuchagua mojawapo ya lugha 19. Bila hiyo, ukurasa hutumia lugha ya kivinjari. - Kupakia upya kunapoteza tokeni. Tengeneza kiungo kipya cha kipindi kile kile kutoka kwenye backend yako.
- Ukurasa hutuma
channel: "web"pamoja na idhini. Vivinjari haviwezi kusoma chipu za vitambulisho, kwa hiyo vipindi vya wavuti hutumia picha za hati au pochi ya utambulisho wa kidijitali. Huruka ukaguzi wa kifaa, na picha za hati kutoka kwenye wavuti daima huamuliwa na mkaguzi aliyefunzwa. - Kwenye kompyuta, ukurasa huonyesha msimbo wa QR ili mtumiaji aendelee kwenye simu.
2. Mtumiaji akimaliza
Mtiririko ukiisha (umetumwa, umeghairiwa au hali ya mwisho), ukurasa hutuma ujumbe huu kwa kila kimoja kilichopo kati ya hivi: window.ReactNativeWebView, window.webkit.messageHandlers.zoiId, window.ZoiIdAndroid na window.opener. Kisha hufungua redirectUrl pamoja na zoiIdSession na zoiIdStatus.
Usiamini kamwe ujumbe huo au vigezo vya kuelekeza. Amini tu webhook yako au GET /v1/partner/sessions/:id.
// Sent to each bridge that exists:
// window.ReactNativeWebView.postMessage(JSON string)
// window.webkit.messageHandlers.zoiId.postMessage(object)
// window.ZoiIdAndroid.postMessage(JSON string)
// window.opener.postMessage(object, "<origin of your redirectUrl>")
// (popups only, and only when the session has a redirectUrl)
{
"source": "zoi-id",
"type": "finished", // or "cancelled"
"sessionId": "ses_...",
"status": "processing" // the session status at that moment
}
// Then, if redirectUrl was set (the page uses the one stored with the
// session, never one from the address bar):
https://example.com/kyc/done?zoiIdSession=ses_...&zoiIdStatus=processing3. Mipangilio ya webview
Android WebView
Washa javaScriptEnabled na domStorageEnabled, na weka mediaPlaybackRequiresUserGesture kuwa false. Ndani ya WebChromeClient, ruhusu onPermissionRequest kwa RESOURCE_VIDEO_CAPTURE baada ya programu yako kupata ruhusa ya CAMERA. Ongeza kichagua faili kwa njia mbadala ya picha.
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.mediaPlaybackRequiresUserGesture = false
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
// Only after your app holds Manifest.permission.CAMERA.
if (request.resources.contains(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
request.grant(arrayOf(PermissionRequest.RESOURCE_VIDEO_CAPTURE))
} else {
request.deny()
}
}
override fun onShowFileChooser(
view: WebView, callback: ValueCallback<Array<Uri>>, params: FileChooserParams,
): Boolean {
// Open a picker and pass the result to callback (photo fallback).
return true
}
}iOS WKWebView
iOS 14.3 au mpya zaidi. Weka allowsInlineMediaPlayback kuwa true na ongeza NSCameraUsageDescription kwenye programu yako. Kwenye iOS 15 na mpya zaidi unaweza kuamua ruhusa ya kamera ndani ya UI delegate.
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
let webView = WKWebView(frame: .zero, configuration: config)
webView.uiDelegate = self // iOS 15+: decide camera access below
func webView(_ webView: WKWebView,
requestMediaCapturePermissionFor origin: WKSecurityOrigin,
initiatedByFrame frame: WKFrameInfo,
type: WKMediaCaptureType,
decisionHandler: @escaping (WKPermissionDecision) -> Void) {
decisionHandler(origin.host == "kyc.zoi.network" ? .grant : .deny)
}
// Info.plist: NSCameraUsageDescriptionReact Native WebView
Weka mediaCapturePermissionGrantType="grant", allowsInlineMediaPlayback na javaScriptEnabled. Programu yako inahitaji ruhusa ya kamera.
<WebView
source={{ uri: verificationUrl }}
javaScriptEnabled
allowsInlineMediaPlayback
mediaCapturePermissionGrantType="grant"
onMessage={(event) => {
const message = JSON.parse(event.nativeEvent.data);
if (message.source === "zoi-id") {
// Close the webview, then ask your backend for the real status.
}
}}
/>iframe hazitumiki, kwa sababu ya ruhusa za kamera na clickjacking. Tumia kichupo cha kivinjari, dirisha ibukizi au webview.
Hali
Kipindi
created- Kipindi kipo, hakuna kilichopakiwa bado.
in_progress- Idhini imetolewa, hatua zinapakiwa.
processing- Kimewasilishwa, ukaguzi unaendelea.
review- Kinamsubiri mkaguzi aliyefunzwa.
approved- Mwisho. Utambulisho umethibitishwa.
rejected- Mwisho. Tazama misimbo ya sababu.
resubmit- Mtumiaji lazima arudie hatua zilizo kwenye requiredSteps.
expired- Hakuna uamuzi wa mwisho kwa wakati.
cancelled- Kimesitishwa na mshirika, mtumiaji au ufutaji.
Utambulisho
active- Unaweza kutumika.
suspended- Umesimamishwa, kwa mfano baada ya mgombea mpya wa vikwazo.
expired- Muda wa hati au wa uthibitisho umeisha. Kipindi kipya kinathibitisha tena.
revoked- Mwisho.
SDK
SDK ya React Native (Expo) inakupa mteja wa API wenye aina, usomaji wa chipu kwa NFC na ukaguzi wa kifaa. Haina kiolesura, kwa hiyo programu yako inabaki na udhibiti kamili wa skrini zake na kamera yake. Kwa seva zako, tumia wateja wenye aina kwa TypeScript, Python, Go, PHP, Java na Ruby.
import { ZoiIdClient, nextStep } from "@zoi/id-sdk";
// clientToken and apiBaseUrl come from your backend (POST /v1/partner/sessions).
const client = new ZoiIdClient({ baseUrl: apiBaseUrl, clientToken });
const session = await client.getSession();
switch (nextStep(session)) {
case "consent": /* show the notice and the biometric choice */ break;
case "document": /* chip read or photos */ break;
case "liveness": /* record the video */ break;
case "address": /* upload a document, then confirm the address */ break;
case "funds": /* answers, then documents when the policy asks */ break;
case "submit": await client.submit(session.revision); break;
case "done": /* wait for your backend to get the webhook */ break;
}Webhook
Tunatuma webhook kipindi au utambulisho unapobadilika. Kagua sahihi kila mara kabla ya kuamini maudhui.
- Kila webhook ina kichwa
Zoi-Id-Signature:t=unix seconds,v1=hex. v1ni HMAC-SHA256 ya maandishit.raw bodykwa siri yako ya webhook. Tumia mwili ghafi, kabla ya kuchanganua JSON.- Siri inapobadilishwa, kichwa kina
v1moja kwa kila siri hai. Kubali webhook ikiwa yoyote kati yake inalingana. - Ikatae ikiwa
tiko mbali na sasa kwa zaidi ya sekunde 300. - Utumaji ulioshindwa hujaribiwa tena kwa saa 72. Kila jaribio husainiwa upya kwa
tmpya. - Utambulisho una
revision. Tumia tukio tu ikiwa toleo lake ni jipya kuliko ulilohifadhi.
POST <your webhook URL>
Zoi-Id-Signature: t=1767225600,v1=5f2b...e9
{
"v": 1,
"eventId": "evt_...",
"type": "identity.suspended",
"createdAt": 1767225600000,
"object": "identity",
"externalUserId": "user_42",
"identity": {
"identityId": "idn_...",
"revision": 7,
"status": "suspended",
"level": "standard",
"verifiedAt": 1764547200000,
"validUntil": 1859155200000,
"ageOver18": true,
"captureMethod": "nfc"
}
}Aina za matukio
session.processingsession.reviewsession.approvedsession.rejectedsession.resubmitsession.expiredsession.cancelledidentity.updatedidentity.suspendedidentity.reinstatedidentity.expiredidentity.revoked
Kagua sahihi kwa TypeScript
import { createHmac, timingSafeEqual } from "node:crypto";
const TOLERANCE_SECONDS = 300;
export function verifyZoiIdSignature(
rawBody: string,
header: string | null,
secret: string,
nowSeconds = Math.floor(Date.now() / 1000),
): boolean {
if (!header) return false;
let t: string | undefined;
const signatures: Buffer[] = [];
for (const part of header.split(",")) {
const [key, value] = part.trim().split("=");
if (!value) continue;
if (key === "t") t = value;
if (key === "v1" && /^[0-9a-f]+$/i.test(value)) signatures.push(Buffer.from(value, "hex"));
}
if (!t || !/^\d+$/.test(t) || signatures.length === 0) return false;
if (Math.abs(nowSeconds - Number(t)) > TOLERANCE_SECONDS) return false;
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
return signatures.some((sig) => sig.length === expected.length && timingSafeEqual(sig, expected));
}
// Example handler: read the raw body first, parse JSON only after the check.
export async function POST(request: Request) {
const rawBody = await request.text();
const ok = verifyZoiIdSignature(rawBody, request.headers.get("Zoi-Id-Signature"), process.env.ZOI_ID_WEBHOOK_SECRET!);
if (!ok) return new Response("bad signature", { status: 400 });
const event = JSON.parse(rawBody);
// Store event.eventId to skip duplicates, then apply it if the revision is newer.
return new Response(null, { status: 204 });
}Kagua sahihi kwa Go
package zoiid
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"strconv"
"strings"
"time"
)
const toleranceSeconds = 300
// VerifySignature checks the Zoi-Id-Signature header against the raw body.
func VerifySignature(rawBody []byte, header, secret string, now time.Time) bool {
var t string
var sigs [][]byte
for _, part := range strings.Split(header, ",") {
key, value, ok := strings.Cut(strings.TrimSpace(part), "=")
if !ok || value == "" {
continue
}
switch key {
case "t":
t = value
case "v1":
if b, err := hex.DecodeString(value); err == nil {
sigs = append(sigs, b)
}
}
}
ts, err := strconv.ParseInt(t, 10, 64)
if err != nil || len(sigs) == 0 {
return false
}
if d := now.Unix() - ts; d > toleranceSeconds || d < -toleranceSeconds {
return false
}
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(t + "."))
mac.Write(rawBody)
expected := mac.Sum(nil)
for _, sig := range sigs {
if hmac.Equal(sig, expected) {
return true
}
}
return false
}Mlisho wa matukio
GET /v1/partner/events hurudisha kila tukio la siku 30 zilizopita, la zamani zaidi kwanza. Tuma after pamoja na nextCursor ya mwisho kusoma ukurasa unaofuata. Itumie baada ya hitilafu ndefu, au kuhakikisha hukukosa chochote.
GET /v1/partner/events?after=<nextCursor>&limit=100
Authorization: Bearer <partner key>
200 OK
{
"items": [ /* webhook payloads, oldest first */ ],
"nextCursor": "..." // null when there is nothing more
}Ripoti za ulaghai
Tuambie kipindi kilichoamuliwa kinapobainika kuwa ulaghai, kwa mfano baada ya chargeback. Ripoti husaidia kupima idhini zisizo sahihi. Hazibadilishi kipindi, utambulisho wala matokeo ya mtumiaji.
- Ruhusa
sessions:write. Kwa vipindi vilivyoamuliwa tu (vilivyokubaliwa au kukataliwa). Kabla ya uamuzi, mwito hujibu 409. - Mwili mtupu huripoti
confirmed_fraudyenye ainaother.statusinaweza pia kuwasuspected_fraud, auclearedili kufuta ripoti yako mwenyewe. - Aina:
forged_document,impostor,deepfake_or_replay,synthetic_identity,account_takeovernaother. Hakuna aina pamoja nacleared. noteni maandishi huru kwa wachambuzi wetu, yasiyozidi herufi 1000. Usiweke kamwe majina, namba za hati au data nyingine binafsi ndani yake.- Ripoti mpya hujibu 201. Ripoti ileile ikitumwa tena hurudisha iliyohifadhiwa pamoja na 200. Tuma
Idempotency-Keyili kujaribu tena kwa usalama. Hadi ripoti 20 kwa kila kipindi. - Ripoti hiyohiyo iko mbofyo mmoja tu kwenye ukurasa wa kipindi kwenye dashibodi.
POST /v1/partner/sessions/ses_.../fraud-reports
Authorization: Bearer <partner key>
Content-Type: application/json
Idempotency-Key: chargeback-8812
{
"status": "confirmed_fraud",
"category": "impostor",
"note": "Chargeback on the first deposit"
}
201 Created
{
"id": "flb_...",
"sessionId": "ses_...",
"status": "confirmed_fraud",
"category": "impostor",
"noteKept": true,
"createdAt": 1767225600000
}Kufuta data
DELETE /v1/partner/users/:externalUserId hufuta data ya mtumiaji anapofunga akaunti yake au kuomba kufutwa. Jibu linaorodhesha kilichofutwa sasa, na kinachohifadhiwa, kwa nini na hadi lini.
DELETE /v1/partner/users/user_42
Authorization: Bearer <partner key>
200 OK
{
"deleted": ["images", "chip_files", "video", "personal_data", "address"],
"retained": [
{ "category": "dedup_keys", "reason": "fraud_prevention", "until": 1924992000000 },
{ "category": "sanctions_screening_records", "reason": "legal_obligation", "until": 2082758400000 }
],
"backupsPurgedWithinDays": 30
}Makosa
Kila kosa lina muundo uleule na hali ya HTTP isiyobadilika kwa kila msimbo.
{
"error": {
"code": "step_not_allowed",
"message": "This step is not allowed now.",
"requestId": "req_..."
}
}| Msimbo | HTTP | Maana |
|---|---|---|
bad_request | 400 | Ombi halilingani na mkataba. |
unauthorized | 401 | Ufunguo au tokeni haipo au si sahihi. |
token_expired | 401 | Tokeni ya mteja imeisha muda. Unda mpya kutoka seva yako. |
forbidden | 403 | Ufunguo huu hauruhusiwi kufanya hivi. |
not_found | 404 | Hakuna kipindi au mtumiaji kama huyo. |
session_closed | 409 | Kipindi kimefika mwisho. Hakuna kupakia zaidi. |
step_not_allowed | 409 | Mpangilio si sahihi, au hatua haihitajiki sasa. |
revision_conflict | 409 | Toleo la kipindi limebadilika. Kisome tena. |
idempotency_conflict | 409 | Idempotency-Key ileile imetumika na ombi tofauti. |
challenge_expired | 410 | Changamoto imeisha muda au tayari imetumika. Omba mpya. |
payload_too_large | 413 | Upakiaji ni mkubwa mno. |
unsupported_media_type | 415 | Aina ya faili haikubaliwi. |
rate_limited | 429 | Maombi mengi mno. Jaribu tena baadaye. |
internal | 500 | Kuna tatizo upande wetu. |
dependency_unavailable | 503 | Huduma tunayoihitaji haifanyi kazi. Jaribu tena baadaye. |
Misimbo ya sababu
Vipindi vina reasonCodes vinapohitaji kuwasilishwa tena au vimekataliwa. Onyesha ujumbe wako uliotafsiriwa kwa kila msimbo. Usimwonyeshe mtumiaji msimbo ghafi kamwe.
consent_missingconsent_withdrawnattestation_faileddocument_expireddocument_unreadabledocument_not_supporteddocument_suspected_tamperingdocument_number_visiblechip_verification_failedchip_proof_missingchip_data_mismatchmrz_invalidphoto_qualityface_not_foundface_mismatchliveness_failedunderagelocation_not_supportedresidence_not_supportedsanctions_matchpep_reviewduplicate_identitypossible_duplicatedeclaration_requires_reviewuser_requested_reviewreviewer_otheraddress_unreadableaddress_document_too_oldaddress_document_not_acceptedaddress_name_mismatchaddress_signature_requiredfunds_document_unreadablefunds_document_too_oldfunds_document_not_acceptedfunds_more_evidencefunds_evidence_rejected