Ikhtisar
Setiap laporan per fitur mengikuti bentuk serializer V3 yang didefinisikan diservice-didit-verification. Objek yang sama muncul di tiga tempat, sehingga skema yang Anda lihat di sini menjadi satu-satunya sumber kebenaran untuk ketiganya:
GET /v3/session/{sessionId}/decision/: setiap fitur dikembalikan sebagai array jamak (id_verifications[],nfc_verifications[],liveness_checks[],face_matches[],poa_verifications[],phone_verifications[],email_verifications[],aml_screenings[],ip_analyses[],database_validations[],questionnaire_responses[],signatures[],bank_verifications[](lihat Metode verifikasi bank), serta padanan KYB-nya, yaituregistry_checks[],document_verifications[],key_people_checks[]).- Payload webhook (
status.updated,data.updated): bentuk yang sama di dalam pembungkusdecision. - API mandiri: respons objek tunggal (Face Search, Age Estimation, Biometric Authentication) memakai kumpulan kolom yang sama.
V3 memperkenalkan alur kerja multi-instance: setiap objek fitur membawa
node_id yang mengaitkan laporan dengan node grafik alur kerja yang menghasilkannya. Endpoint V2 (kyc, face, aml, dll. yang berbentuk tunggal) tetap kompatibel mundur, tetapi hanya mengembalikan instans pertama.Kolom umum
Setiap objek laporan memiliki kolom berikut:| Kolom | Tipe | Deskripsi |
|---|---|---|
status | string | Status siklus hidup tingkat fitur, salah satu nilai di Enum status. Sumber: common/config/choices.py:FeatureStatusChoices (baris 343-348). status tingkat atas sesi induk memakai enum sesi yang lebih luas (StatusChoices, baris 106-117). |
node_id | string | null | Identifier node grafik alur kerja. Diisi untuk alur kerja multi-instance V3; null untuk sesi fitur tunggal lama. |
warnings | array yang berisi objek peringatan | Sinyal risiko yang difilter berdasarkan fitur ini dan node_id. Dikembalikan oleh Session.get_logs(...) (sessions/models/session.py:1611). |
portrait_image, front_image, document_file, …) berupa URL yang telah ditandatangani sebelumnya dengan masa berlaku terbatas, jadi unduh segera alih-alih menyimpan URL-nya. Contoh menampilkannya sebagai https://<media-host>/....
Objek peringatan
Dikembalikan di setiap arraywarnings[]. Skema dari logs/serializers/log.py:8-65 (LogV3Serializer).
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
feature | string (enum) | Tidak | Fitur yang menghasilkan peringatan. Nilai dari LogWarningChoices (common/config/choices.py:190-204): ID_VERIFICATION, NFC, LIVENESS, FACEMATCH, PROOF_OF_ADDRESS, PHONE, EMAIL, AML, LOCATION, DATABASE_VALIDATION, QUESTIONNAIRE, KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE. | "ID_VERIFICATION" |
risk | string | Tidak | Kode risiko yang stabil (misalnya DOCUMENT_EXPIRED, LOW_LIVENESS_SCORE). Nilai dari logs/choices.py:RiskChoices. Dipakai sebagai kunci untuk tabel deskripsi. | "DOCUMENT_EXPIRED" |
additional_data | object | null | Ya | Konteks spesifik risiko (misalnya ambang batas skor, kolom yang cocok). Bentuknya bervariasi menurut kode risiko. | { "score": 42.1, "threshold": 70 } |
log_type | string (enum) | Tidak | Salah satu dari error, warning, information. Dari LogTypeChoices (common/config/choices.py:207-210). | "error" |
short_description | string | Tidak | Label yang mudah dibaca untuk risiko. Dari logs/choices.py:RISK_SHORT_DESCRIPTIONS. | "Document expired" |
long_description | string | Tidak | Penjelasan yang lebih panjang dan mudah dibaca, cocok untuk ditampilkan kepada pengguna akhir. Dari logs/choices.py:RISK_LONG_DESCRIPTIONS. | "The document's expiration date has passed, rendering it no longer valid for use." |
node_id | string | null | Ya | Node grafik alur kerja tempat peringatan dimunculkan. null untuk log V2 lama tanpa node_id. | "first_id_verification" |
{
"feature": "ID_VERIFICATION",
"risk": "DOCUMENT_EXPIRED",
"additional_data": null,
"log_type": "error",
"short_description": "Document expired",
"long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
"node_id": "first_id_verification"
}
Objek laporan
Bagian-bagian berikutnya membahas setiap objek laporan per fitur. Teks heading H3 sengaja dibuat tetap agar dokumen lain dapat menautkannya secara langsung.Verifikasi identitas
Dikembalikan untuk setiap dokumen KYC/ID yang dikirimkan pengguna. Muncul sebagaiid_verifications[] di GET /v3/session/{sessionId}/decision/ dan di dalam kolom kyc pada respons V2. Sumber: kyc/serializers/kyc.py:383-414 (IDVerificationV3Serializer, memperluas IDVerificationV2Serializer di kyc/serializers/kyc.py:320-380).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
document_type | string | Ya | Kelas dokumen yang mudah dibaca (Passport, Identity Card, Driver's License, Residence Permit, Health Insurance Card, Tax Card, Social Security Card, Work Permit, Visa, Public Service Card, Birth Certificate, Firearm License, Other). Sumber: DOC_TYPE_MAPPING (common/config/choices.py:1275-1289). | "Passport" |
document_subtype | string | Ya | Kode subtipe dokumen dari registri dokumen Didit, disaring agar hanya mencakup yang diizinkan oleh pengaturan dokumen alur kerja. Dokumen khusus wilayah menyertakan wilayahnya. Daftar kode lengkap: Subtipe dokumen. | "QUEENSLAND_DRIVER_LICENSE_GENERIC" |
document_number | string | Ya | Nomor dokumen yang diekstrak dengan OCR. | "AB1234567" |
personal_number | string | Ya | Pengenal pribadi/nasional yang diekstrak dengan OCR. | "99999999R" |
portrait_image | string (URL) | Ya | URL presigned ke potongan wajah. | "https://<media-host>/.../portrait.jpg?..." |
front_image | string (URL) | Ya | URL presigned ke bagian depan dokumen yang sudah dibersihkan. | "https://<media-host>/.../front.jpg?..." |
front_video | string (URL) | Ya | URL presigned ke video pengambilan bagian depan (jika tersedia). | "https://<media-host>/.../front.mp4?..." |
back_image | string (URL) | Ya | URL presigned ke bagian belakang dokumen yang sudah dibersihkan. | "https://<media-host>/.../back.jpg?..." |
back_video | string (URL) | Ya | URL presigned ke video pengambilan bagian belakang. | null |
full_front_image | string (URL) | Ya | Hasil pengambilan bagian depan tanpa pemotongan (bingkai penuh). | "https://<media-host>/.../full_front.jpg?..." |
full_back_image | string (URL) | Ya | Hasil pengambilan bagian belakang tanpa pemotongan (bingkai penuh). | null |
front_image_camera_front | string (URL) | Ya | Gambar dari kamera depan yang diambil bersamaan dengan bagian depan dokumen. | null |
back_image_camera_front | string (URL) | Ya | Gambar dari kamera depan yang diambil bersamaan dengan bagian belakang dokumen. | null |
front_image_camera_front_face_match_score | float (0-100) | Ya | Tingkat kemiripan antara potret pada dokumen dan hasil pengambilan kamera depan. | null |
back_image_camera_front_face_match_score | float (0-100) | Ya | Sama seperti di atas, tetapi untuk pengambilan bagian belakang. | null |
document_selfie_face_matches | array | Ya | Sesi sebelumnya atau entri daftar blokir wajah yang cocok dengan swafoto yang diambil saat pengambilan dokumen. Format entri sama dengan liveness_checks[].matches. null jika pencarian tidak dijalankan, [] jika tidak ada yang cocok. | null |
front_image_quality_score | object | Ya | Metrik kualitas untuk gambar bagian depan: skor 0-100 (focus_score, brightness_score, resolution_score, overall_score), ditambah brightness_issue (ok, too_dark, too_bright) dan is_document_fully_visible (boolean). | { "focus_score": 91.0, "overall_score": 88.5 } |
back_image_quality_score | object | Ya | Bentuk yang sama dengan front_image_quality_score. | null |
date_of_birth | string (YYYY-MM-DD) | Ya | Tanggal lahir yang diekstrak dengan OCR. | "1990-05-12" |
age | integer | Ya | Usia dalam tahun yang dihitung pada saat ekstraksi. | 35 |
expiration_date | string (YYYY-MM-DD) | Ya | Tanggal kedaluwarsa dokumen. | "2032-05-11" |
date_of_issue | string (YYYY-MM-DD) | Ya | Tanggal penerbitan dokumen. | "2022-05-11" |
issuing_state | string (ISO 3166-1 alpha-3) | Ya | Kode negara penerbit. | "ESP" |
issuing_state_name | string | Ya | Nama negara penerbit yang dilokalkan. | "Spain" |
first_name | string | Ya | Nama depan yang diekstrak dengan OCR. | "María" |
last_name | string | Ya | Nama belakang yang diekstrak dengan OCR. | "García López" |
full_name | string | Ya | Nama lengkap yang sudah dinormalisasi (disediakan vendor). | "María García López" |
gender | string | Ya | M, F, atau nilai lain yang disediakan vendor. | "F" |
address | string | Ya | Baris alamat mentah yang diekstrak dengan OCR. | "Calle Mayor 1, 28001 Madrid" |
formatted_address | string | Ya | Alamat yang di-geocode dan diformat (jika dapat diurai). | "Calle Mayor 1, 28001 Madrid, Spain" |
parsed_address | object | Ya | Alamat terstruktur yang di-geocode: street_1, street_2, city, region, country, postal_code, address_type, formatted_address, document_location ({latitude, longitude}), raw_results, is_best_match. Sumber: kyc/utils/address.py:147-197. | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" } |
place_of_birth | string | Ya | Tempat lahir yang diekstrak dengan OCR. | "Madrid" |
marital_status | string | Ya | Jika dapat diekstrak. | null |
nationality | string (ISO 3166-1 alpha-3) | Ya | Kewarganegaraan yang diekstrak dengan OCR. | "ESP" |
extra_fields | object | Ya | Kolom khusus tipe dokumen yang tidak tercakup dalam skema kanonis (misalnya kategori SIM). | { "DL Class": "B" } |
mrz | object | Ya | Kolom MRZ yang diurai jika ada (document_number, birth_date, expiry_date, surname, given_names, …). | { "document_number": "AB1234567", "surname": "GARCIA", "given_names": "MARIA" } |
extra_files | array string (URL) | Tidak | URL presigned ke file tambahan yang diunggah. | [] |
matches | array objek | Tidak | Kecocokan dokumen lintas sesi. Setiap item: { session_id, session_number, vendor_data, verification_date, user_details: { name, document_type, document_number }, status, is_blocklisted, api_service, front_image_url }. front_image_url berupa URL presigned. | [] |
verification_method | string | Tidak | Metode Verifikasi Identitas yang menghasilkan baris ini: document, id_lookup, atau wallet. Selalu document untuk dokumen yang difoto, termasuk setiap sesi yang dibuat sebelum metode lain tersedia. | "id_lookup" |
assurance | string | Tidak | Tingkat jaminan yang diturunkan dari verification_method: documentary, data_match, atau cryptographic. | "data_match" |
wallet_provider | string | null | Ya | ID dompet dari katalog saat dompet menghasilkan baris ini (mitid, bankid_se, itsme, …). null selain itu. | "mitid" |
fallback_from | object | null | Ya | Alasan langkah ID berakhir dengan metode non-dokumen: { method, reason, action }. Diisi saat pencarian atau login melalui dompet gagal: pada baris yang ditolak jika pengaturan negara adalah decline (action: "decline"), dan pada verifikasi dokumen yang dilanjutkan pengguna ketika pengaturan negara adalah fallback_to_document (action: "fallback_to_document"). null jika tidak ada kegagalan metode non-dokumen sebelumnya yang tercatat. | { "method": "id_lookup", "reason": "no_match", "action": "decline" } |
id_lookup | object | null | Ya | Bukti sumber, hanya ada saat verification_method bernilai id_lookup: source (sumber persis yang dikonsultasikan, yaitu registri pemerintah di sebagian besar negara, atau berkas biro kredit atau catatan tempat tinggal di beberapa negara), checked_at, attempts, max_attempts, outcome (match, partial_match, no_match, provider_error, format_rejected), comparison[] ({ field, label, provided, record, result }; field salah satu dari identification_number, full_name, date_of_birth, address, dan result bernilai match, partial, atau no_match; rilis sebelumnya mungkin menyertakan baris provider dengan error), source_errors[] (staging saat ini: diagnostik sumber terpisah; konfirmasikan peluncuran ke produksi), registry_portrait (URL presigned, hanya untuk sumber yang mengembalikannya), dan face_match_score. | lihat di bawah |
wallet_verification | object | null | Ya | Bukti kredensial, hanya ada saat verification_method bernilai wallet: provider, provider_name, issuing_authority, issuing_country, credential_type, level_of_assurance (low, substantial, high), verified_at, signature_valid, attributes (yang dibagikan dompet), portrait (URL presigned saat dompet membagikannya), dan face_match_score. | lihat di bawah |
document_liveness | object | null | Ya | Skor liveness dokumen per jenis penipuan (portrait_replace, printed_copy, screen_replay), dilaporkan baik peringatan terpicu maupun tidak. Setiap entri: score (0-100, makin tinggi makin mungkin asli; nilai terendah, yaitu nilai yang digunakan oleh keputusan), front, back, decline_threshold, review_threshold, bucket (approve, review, decline, atau null). Ambang batas dan bucket disimpan pada saat evaluasi; ketiganya bernilai null jika bukti evaluasi historis tidak tersedia, sementara skor yang tersimpan tetap terlihat. null jika pemeriksaan tidak dijalankan. Lihat Skor liveness dokumen. Hanya V3. | { "portrait_replace": { "score": 96.46, "bucket": "approve" } } |
node_id | string | null | Ya | Pengidentifikasi node alur kerja (V3). | "first_id_verification" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
region | string | Ya | Wilayah atau negara bagian dari negara penerbit, jika dokumen mengidentifikasinya. | "CA" |
extracted_data | object | Ya | Salinan data yang diekstrak dari dokumen dan ditampilkan kepada orang tersebut untuk ditinjau, disimpan bersama nilai yang dikonfirmasi agar Anda dapat membandingkannya. null jika orang tersebut tidak diminta untuk meninjau. | |
barcodes | array of objects | Tidak | Data yang dibaca dari barcode dokumen, satu entri per barcode dengan type, position, data, data_raw, dan side. [] jika tidak ada barcode. | [] |
{
"status": "Approved",
"document_type": "Passport",
"document_subtype": "PASSPORT_GENERIC",
"document_number": "AB1234567",
"personal_number": "99999999R",
"portrait_image": "https://<media-host>/.../portrait.jpg?signature=...",
"front_image": "https://<media-host>/.../front.jpg?signature=...",
"front_video": null,
"back_image": "https://<media-host>/.../back.jpg?signature=...",
"back_video": null,
"full_front_image": "https://<media-host>/.../full_front.jpg?signature=...",
"full_back_image": null,
"front_image_camera_front": null,
"back_image_camera_front": null,
"front_image_camera_front_face_match_score": null,
"back_image_camera_front_face_match_score": null,
"front_image_quality_score": {
"focus_score": 91.0,
"brightness_score": 88.0,
"brightness_issue": "ok",
"is_document_fully_visible": true,
"resolution_score": 95.0,
"overall_score": 88.5
},
"back_image_quality_score": null,
"date_of_birth": "1990-05-12",
"age": 35,
"expiration_date": "2032-05-11",
"date_of_issue": "2022-05-11",
"issuing_state": "ESP",
"issuing_state_name": "Spain",
"first_name": "María",
"last_name": "García López",
"full_name": "María García López",
"gender": "F",
"address": "Calle Mayor 1, 28001 Madrid",
"formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"parsed_address": { "street_1": "Calle Mayor 1", "street_2": null, "city": "Madrid", "region": "Madrid", "postal_code": "28001", "country": "ES", "address_type": "Calle" },
"place_of_birth": "Madrid",
"marital_status": null,
"nationality": "ESP",
"extra_fields": {},
"mrz": {
"document_number": "AB1234567",
"surname": "GARCIA",
"given_names": "MARIA",
"birth_date": "900512",
"expiry_date": "320511"
},
"extra_files": [],
"matches": [],
"node_id": "first_id_verification",
"verification_method": "document",
"assurance": "documentary",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": null,
"wallet_verification": null,
"document_liveness": {
"portrait_replace": {
"score": 96.46,
"front": 96.46,
"back": 98.2,
"decline_threshold": 35,
"review_threshold": 70,
"bucket": "approve"
},
"printed_copy": {
"score": 91.2,
"front": 91.2,
"back": 93.7,
"decline_threshold": 35,
"review_threshold": 77,
"bucket": "approve"
},
"screen_replay": {
"score": 99.9,
"front": 99.9,
"back": 99.5,
"decline_threshold": 30,
"review_threshold": 70,
"bucket": "approve"
}
},
"warnings": []
}
null.
{
"status": "Approved",
"issuing_state": "ZAF",
"first_name": "Thabo",
"last_name": "Mokoena",
"full_name": "Thabo Mokoena",
"date_of_birth": "1991-06-15",
"personal_number": "9106155043088",
"node_id": "first_id_verification",
"verification_method": "id_lookup",
"assurance": "data_match",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": {
"source": "Department of Home Affairs",
"checked_at": "2026-09-04T09:12:44Z",
"attempts": 1,
"max_attempts": 2,
"outcome": "match",
"comparison": [
{ "field": "identification_number", "label": "ID number", "provided": "9106155043088", "record": "9106155043088", "result": "match" },
{ "field": "full_name", "label": "Full name", "provided": "Thabo Mokoena", "record": "Thabo Mokoena", "result": "match" },
{ "field": "date_of_birth", "label": "Date of birth", "provided": "1991-06-15", "record": "1991-06-15", "result": "match" }
],
"registry_portrait": "https://<media-host>/.../registry_portrait.jpg?signature=...",
"face_match_score": 96.4
},
"wallet_verification": null,
"warnings": []
}
{
"status": "Approved",
"issuing_state": "DNK",
"first_name": "Freja",
"last_name": "Nielsen",
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"node_id": "first_id_verification",
"verification_method": "wallet",
"assurance": "cryptographic",
"wallet_provider": "mitid",
"fallback_from": null,
"id_lookup": null,
"wallet_verification": {
"provider": "mitid",
"provider_name": "MitID",
"issuing_authority": "Danish Agency for Digital Government",
"issuing_country": "DNK",
"credential_type": "person_identification",
"level_of_assurance": "substantial",
"verified_at": "2026-09-04T09:12:44Z",
"signature_valid": true,
"attributes": {
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"cpr_alias": "b0f1c2d3-e4f5-4678-9abc-def012345678"
},
"portrait": null,
"face_match_score": null
},
"warnings": []
}
Verifikasi NFC
Dikembalikan untuk setiap pembacaan chip terhadap dokumen identitas: chip ePassport atau eID ICAO 9303, atau pembacaan My Number Card Jepang melalui JPKI (chip_protocol: "jpki"). Muncul sebagai nfc_verifications[] di GET /v3/session/{sessionId}/decision/ (satu per rekaman KYC induk). Sumber: kyc/serializers/epassport.py:121-139 (NFCV3Serializer, memperluas NFCV2Serializer di kyc/serializers/epassport.py:83-118).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
portrait_image | string (URL) | Ya | URL presigned ke gambar wajah yang diekstrak dari chip. | "https://<media-host>/.../nfc_portrait.jpg?..." |
signature_image | string (URL) | Ya | URL presigned ke gambar tanda tangan yang diekstrak dari chip (jika disimpan di chip). | null |
chip_data | object | Ya | Data pribadi yang diurai dari Grup Data pada chip, dalam format datar (kyc/utils/epassport.py:165-212): dgs (Grup Data yang dibaca), surname, name, country, nationality, birth_date (YYYY-MM-DD), expiry_date (YYYY-MM-DD), sex (M/F), document_type (kode dokumen MRZ), document_number, optional_data, digit cek MRZ (birth_date_hash, expiry_date_hash, document_number_hash, optional_data_hash, final_hash), mrz_string, mrz_type (TD1/TD2/TD3); serta place_of_birth dan address (dan full_name / full_name_non_latin untuk nama non-Latin) jika chip memuat DG11. Kunci-kunci tersebut tidak ada jika chip tidak memuat DG11. null jika langkah NFC dilewati. | { "document_number": "AB1234567", "name": "MARIA" } |
authenticity | object | Ya | { sod_integrity, dg_integrity }; null untuk pembacaan JPKI. sod_integrity memvalidasi bahwa rantai tanda tangan Document Security Object (SOD) berujung pada CSCA negara penerbit yang valid (dan DSC tidak dicabut maupun kedaluwarsa); dg_integrity memvalidasi bahwa hash setiap Grup Data sesuai dengan SOD. Jika keduanya true, chip asli dan tidak diubah. | { "sod_integrity": true, "dg_integrity": true } |
certificate_summary | object | Ya | Ringkasan sertifikat penandatangan dokumen (kyc/utils/epassport.py:338-348): issuer, subject, serial_number (integer), not_valid_before, not_valid_after (YYYY-MM-DD HH:MM:SS), serta objek validation { csca_verified, dsc_revoked, dsc_expired, csca_expired } (kyc/views/epassport.py:86). | { "issuer": "Common Name: CSCA SPAIN, Country: ES", "not_valid_after": "2031-02-18 10:21:11" } |
node_id | string | null | Ya | Identifier node alur kerja (V3). | "first_nfc" |
is_nfc_skipped | boolean | Tidak | true jika langkah NFC ini dilewati secara eksplisit, bukan dibaca. skip_reason menjelaskan alasannya. | false |
skip_reason | string | Ya | Alasan langkah dilewati. Hanya diisi jika is_nfc_skipped bernilai true. Salah satu dari USER_SKIPPED, DOCUMENT_WITHOUT_CHIP, CHIP_CERTIFICATE_UNAVAILABLE, DEVICE_WITHOUT_NFC, INTEGRATION_WITHOUT_NFC_ACCESS, MRZ_KEY_UNAVAILABLE, JPKI_UNAVAILABLE; lihat Alasan pelewatan. Payload keputusan juga memuat nfc_skip_reason tingkat sesi dengan taksonomi yang sama, yang mencakup langkah NFC yang dilewati sebelum laporan apa pun dibuat. | null |
chip_protocol | string | Tidak | Cara chip dibaca: icao (chip ePassport ICAO 9303 atau eID) atau jpki (Japan My Number Card). Untuk jpki, portrait_image, signature_image, chip_data, authenticity dan certificate_summary bernilai null. Juga diisi pada langkah yang dilewati. | "icao" |
jpki | object | Ya | Yang dibuktikan oleh pembacaan My Number Card: certificate_types, chain_valid, signature_valid, revocation_status (good, revoked atau unchecked), ca_generation, certificate_expires_at, certificates[], attributes (nama, tanggal lahir, jenis kelamin dan alamat dari sertifikat tanda tangan), attributes_match_ocr dan mismatched_attributes. Tidak pernah berisi sertifikat, nomor serinya, atau tanda tangannya. Bernilai null untuk chip ICAO, untuk langkah yang dilewati, dan jika langkah ditutup tanpa pembacaan kartu sama sekali. Lihat Kolom JPKI. | null |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"status": "Approved",
"portrait_image": "https://<media-host>/.../nfc_portrait.jpg?signature=...",
"signature_image": null,
"chip_data": {
"dgs": ["DG1", "DG2", "DG11"],
"surname": "GARCIA LOPEZ",
"name": "MARIA",
"country": "ESP",
"nationality": "ESP",
"birth_date": "1990-05-12",
"expiry_date": "2032-05-11",
"sex": "F",
"document_type": "P",
"document_number": "AB1234567",
"optional_data": "",
"birth_date_hash": "4",
"expiry_date_hash": "7",
"document_number_hash": "3",
"optional_data_hash": "",
"final_hash": "8",
"mrz_string": "P<ESPGARCIA<LOPEZ<<MARIA<<<<<<<<<<<<<<<<<<<<AB1234567ESP9005124F3205117<<<<<<<<<<<<<<08",
"mrz_type": "TD3",
"place_of_birth": "MADRID",
"address": "CALLE MAYOR 1, MADRID"
},
"authenticity": { "sod_integrity": true, "dg_integrity": true },
"certificate_summary": {
"issuer": "Common Name: CSCA SPAIN, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"subject": "Common Name: DS n-eID SPAIN 2, Organizational Unit: PASSPORT, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"serial_number": 118120836164494130086420187336801405660,
"not_valid_before": "2020-11-18 10:21:11",
"not_valid_after": "2031-02-18 10:21:11",
"validation": {
"csca_verified": true,
"dsc_revoked": false,
"dsc_expired": false,
"csca_expired": false
}
},
"node_id": "first_nfc",
"is_nfc_skipped": false,
"skip_reason": null,
"chip_protocol": "icao",
"jpki": null,
"warnings": []
}
Pemeriksaan liveness
Dikembalikan per sesi liveness. Muncul sebagailiveness_checks[] di GET /v3/session/{sessionId}/decision/. Sumber: face/serializers/face.py:301-320 (LivenessV3Serializer, memperluas LivenessV2Serializer di face/serializers/face.py:216-298).
| Kolom | Tipe | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
method | string (enum) | Ya | ACTIVE_3D, FLASHING, atau PASSIVE (LivenessMethodChoices, common/config/choices.py:514-517). Mode pasif berjalan saat sesi desktop diizinkan dan pengguna berada di desktop. | "PASSIVE" |
score | float (0-100) | Ya | Tingkat keyakinan liveness, dibulatkan hingga 2 desimal. | 92.41 |
reference_image | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke potongan wajah referensi pengguna. | "https://<media-host>/.../reference.jpg?..." |
video_url | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke video liveness (hanya mode aktif). | "https://<media-host>/.../liveness.webm?..." |
age_estimation | float | Ya | Perkiraan usia (dalam tahun) dari wajah terbesar pada gambar referensi. | 34.2 |
matches | array objek | Tidak | Pencocokan wajah lintas sesi. Setiap item: { session_id, session_number, similarity_percentage, vendor_data, vendor_user_id, biometric_template_id, verification_date, user_details: { full_name, document_type, document_number }, match_image_url, status, is_blocklisted, is_allowlisted, api_service, source }. source berisi session, imported, list_entry, atau retained_template. Pencocokan templat yang disimpan memiliki vendor_user_id, vendor_data, dan biometric_template_id. Kolom sesi, gambar, detail identitas, status, dan layanan API-nya bernilai null. | [] |
face_quality | float (0-100) | Ya | Skor kualitas wajah liveness pasif (dinormalisasi menjadi persentase). | 87.50 |
face_luminance | float (0-100) | Ya | Skor luminansi wajah liveness pasif (dinormalisasi dari 0-255 menjadi persentase). | 54.12 |
node_id | string | null | Ya | Identifier node alur kerja (V3). | "first_liveness" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"status": "Approved",
"method": "PASSIVE",
"score": 92.41,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": 34.2,
"matches": [],
"face_quality": 87.50,
"face_luminance": 54.12,
"node_id": "first_liveness",
"warnings": []
}
Pencocokan wajah
Dikembalikan untuk setiap perbandingan pencocokan wajah (biasanya wajah liveness pengguna dengan potret dokumen). Muncul sebagaiface_matches[] di GET /v3/session/{sessionId}/decision/. Sumber: face/serializers/face.py:367-389 (FaceMatchV3Serializer, memperluas FaceMatchV2Serializer di face/serializers/face.py:323-364).
| Kolom | Tipe | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
score | float (0-100) | Ya | Tingkat kemiripan, dibulatkan hingga 2 desimal. Jika penyedia hanya mengembalikan unmatched_faces[].Confidence, nilainya dikonversi menjadi 100 - confidence. | 97.83 |
source_image_session_id | string (UUID) | Ya | Sesi yang potret tersimpannya digunakan sebagai gambar sumber (referensi). Diisi pada alur berbasis potret (autentikasi biometrik, atau potret yang diberikan saat pembuatan sesi). Bernilai null jika referensinya adalah potret dokumen dari sesi yang sama. | null |
source_image | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke gambar sumber (referensi), biasanya potret dokumen, atau potret tersimpan pada alur autentikasi biometrik. | "https://<media-host>/.../source.jpg?..." |
target_image | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke gambar target (wajah langsung) yang diambil selama liveness. | "https://<media-host>/.../target.jpg?..." |
node_id | string | null | Ya | Identifier node alur kerja (V3). | "first_face_match" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
face_coverage | object | Ya | Apakah eyes, mouth dan face tertutup dalam gambar yang diambil. Setiap area memiliki covered, calibrated dan visibility_score. calibrated: false berarti bukti bayangan yang tidak ditindaklanjuti oleh peringatan mana pun. Hanya dikembalikan oleh GET /v3/session/{sessionId}/decision/, tidak pernah ada di payload webhook. | { "eyes": { "covered": false, "calibrated": true, "visibility_score": 0.98 } } |
{
"status": "Approved",
"score": 97.83,
"source_image_session_id": null,
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "first_face_match",
"warnings": []
}
Pencarian Wajah
Dikembalikan oleh API Pencarian Wajah mandiri (POST /v3/face-search/). Pencarian Wajah tidak pernah muncul sebagai array berisi banyak elemen di /v3/session/{sessionId}/decision/. Saat disimpan dengan save_api_request=true, sesi tampil di sana sebagai entri FACE_SEARCH dalam features[], ditambah item liveness_checks[] yang memuat matches tersimpan. Sumber: apis/serializers/face_search.py:8-79 (FaceSearchResponseSerializer yang membungkus FaceSearchDetailsSerializer); dict kecocokan dibuat di face/utils/utils.py:869-884.
Respons tingkat atas:
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
request_id | string (UUID) | Tidak | ID sesi yang tersimpan saat save_api_request=true (dapat digunakan dengan GET /v3/session/{sessionId}/decision/); jika tidak, UUID korelasi sementara. | "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f" |
face_search | objek | Tidak | Payload detail pencarian, lihat kolom di bawah. | - |
vendor_data | string | Ya | vendor_data yang digemakan dari permintaan. | null |
metadata | objek | Ya | metadata yang digemakan dari permintaan. | null |
created_at | string (ISO 8601) | Tidak | Stempel waktu permintaan di sisi server. | "2026-06-12T01:04:42.763237+00:00" |
face_search:
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Declined hanya jika peringatan FACE_IN_BLOCKLIST atau POSSIBLE_FACE_IN_BLOCKLIST terpicu; Approved jika tidak. Kecocokan duplikat saja tidak pernah menyebabkan penolakan (apis/views/face_search.py:242-248). | "Approved" |
total_matches | integer | Tidak | Jumlah kecocokan yang dikembalikan di matches[] (0–5). | 1 |
matches | array objek objek kecocokan Pencarian Wajah | Tidak | Hingga 5 kecocokan di atas ambang kemiripan minimum, diurutkan berdasarkan kemiripan menurun (entri daftar blokir lebih dulu, dengan search_type=blocklisted_or_approved). | […] |
user_image | objek | Tidak | Hasil deteksi untuk gambar yang dikirim: { entities: [{ bbox, confidence }], best_angle }, satu entitas per wajah yang terdeteksi. | { "entities": [{ "bbox": [40, 40, 120, 120], "confidence": 0.73 }], "best_angle": 0 } |
warnings | array objek | Tidak | Bentuk peringatan yang dipersingkat untuk API mandiri ini, tanpa node_id. Kontrak serializer mendeklarasikan { risk, additional_data, log_type, short_description, long_description } (apis/serializers/face_search.py:49-54); payload runtime juga memuat feature, yang selalu "LIVENESS" (apis/views/face_search.py:332-341). | [] |
Objek kecocokan Pencarian Wajah
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
session_id | string (UUID) | Ya | Sesi verifikasi yang cocok. null saat source adalah imported, list_entry, atau retained_template. | "a3f2a6f1-…" |
session_number | integer | Ya | Nomor sesi yang cocok dalam format yang mudah dibaca di konsol; null untuk kecocokan non-sesi. | 1024 |
similarity_percentage | float (0-100) | Tidak | Kemiripan antara wajah yang dikirim dan wajah yang cocok. | 96.42 |
source | string (enum) | Tidak | Asal pendaftaran wajah yang cocok: session (sesi verifikasi atau panggilan mandiri yang disimpan), imported (unggahan wajah langsung ke profil pengguna), list_entry (wajah yang dilampirkan ke daftar), retained_template (templat biometrik tanpa gambar yang disimpan setelah sesi sumber dihapus). | "session" |
vendor_data | string | Ya | vendor_data dari sesi yang cocok, atau milik pengguna terkait untuk kecocokan imported dan retained_template. | "user-12345" |
vendor_user_id | string (UUID) | Ya | Pengguna terkait. null untuk kecocokan list_entry dan untuk sesi tanpa pengguna. | "2f7c1a9e-…" |
biometric_template_id | string (UUID) | Ya | Templat yang dipertahankan dan cocok. Hanya diisi untuk kecocokan retained_template; gunakan dengan GET/DELETE /v3/biometric-templates/{id}/. | null |
verification_date | string (ISO 8601) | Ya | Saat wajah yang cocok diambil, atau saat retained_template dipertahankan; null untuk kecocokan list_entry. | "2024-11-04T09:14:02Z" |
user_details | objek | Ya | { full_name, document_type, document_number } dari verifikasi dokumen sesi yang cocok; untuk kecocokan imported hanya full_name yang diisi; null jika tidak ada data identitas dan selalu null untuk kecocokan retained_template. | { "full_name": "María García López", "document_type": "Passport", "document_number": "AB1234567" } |
match_image_url | string (URL) | Ya | Wajah referensi pengguna yang cocok: URL presigned saat save_api_request=true, jalur penyimpanan mentah jika tidak. Selalu null untuk kecocokan retained_template, yang tidak menyimpan gambar. | "https://<media-host>/.../matched.jpg?..." |
status | string | Ya | Status verifikasi sesi yang cocok (lihat Enum status); null untuk kecocokan non-sesi. | "Approved" |
is_blocklisted | boolean | Tidak | Apakah wajah yang cocok ada dalam daftar blokir wajah Anda. Selalu false untuk kecocokan retained_template; wajah dalam daftar blokir dilaporkan terpisah sebagai kecocokan list_entry. | false |
is_allowlisted | boolean | Tidak | Apakah wajah yang cocok ada dalam salah satu daftar izin Anda. | false |
api_service | string (enum) | Ya | Tipe API mandiri huruf besar dari sesi yang cocok (misalnya PASSIVE_LIVENESS, FACE_MATCH); null untuk sesi alur kerja dan kecocokan non-sesi. | null |
{
"request_id": "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f",
"face_search": {
"status": "Approved",
"total_matches": 1,
"matches": [
{
"session_id": "a3f2a6f1-1c1c-4eec-8b69-1c1c2f3a2c7f",
"session_number": 1024,
"similarity_percentage": 96.42,
"source": "session",
"vendor_data": "user-12345",
"verification_date": "2024-11-04T09:14:02Z",
"user_details": {
"full_name": "María García López",
"document_type": "Passport",
"document_number": "AB1234567"
},
"match_image_url": "https://<media-host>/.../matched.jpg?signature=...",
"status": "Approved",
"is_blocklisted": false,
"is_allowlisted": false,
"api_service": null
}
],
"user_image": {
"entities": [
{
"bbox": [40, 40, 120, 120],
"confidence": 0.732973
}
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-06-12T01:04:42.763237+00:00"
}
Skrining AML
Dikembalikan untuk setiap entitas yang menjalani skrining. Muncul sebagaiaml_screenings[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC maupun KYB. Sumber: aml/serializers/aml.py:63-85 (AMLV3Serializer, memperluas AMLV2Serializer di aml/serializers/aml.py:28-60).
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
total_hits | integer | Tidak | Jumlah temuan skrining (selalu ada dan secara default bernilai 0). | 2 |
entity_type | string (enum) | Ya | person atau company (EntityTypeChoices, common/config/choices.py:675-677). | "person" |
hits | array objek | Tidak | Satu entri per hit. Kolom utama: id, caption, match (bool), target (bool | null, apakah entitas menjadi target langsung dari daftar), match_score (float 0-100, keyakinan identitas), risk_score (float 0-100, risiko entitas), score (float 0-1, usang), datasets[] (misalnya PEP, PEP Level 1-4, Sanctions, Adverse Media, Warnings and Regulatory Enforcement, Fitness and Probity), properties (nama, alias, tanggal lahir, …), features, url, first_seen, last_seen, rca_name, risk_view, score_breakdown, pep_matches, sanction_matches, warning_matches, adverse_media_matches, adverse_media_details, linked_entities, additional_information, dan review_status (Unreviewed, Confirmed Match, False Positive, Inconclusive; dapat diubah melalui endpoint update-AML-hit-status, AMLHitStatusChoices). | […] |
score | float (0-100) | Ya | Skor skrining keseluruhan, yaitu risk_score tertinggi di antara temuan yang tidak ditandai False Positive (aml/services/aml.py:832-842); 0 jika setiap temuan adalah positif palsu. null sampai dihitung. | 42.7 |
screened_data | object | Ya | Salinan data yang dikirim ke skrining: full_name, nationality, date_of_birth, document_number. | { "full_name": "María García López", "date_of_birth": "1990-05-12" } |
is_ongoing_monitoring_enabled | boolean | Tidak | Apakah entitas berlangganan skrining ulang dalam pemantauan berkelanjutan. | false |
next_ongoing_monitoring_bill_date | string (YYYY-MM-DD) | Ya | Dihitung sebagai last_aml_bill_date + 365 days saat pemantauan berkelanjutan diaktifkan. Ini adalah tanggal penagihan, bukan tanggal skrining. | null |
last_ongoing_screening_at | string (ISO 8601) | Ya | Waktu pemantauan berkelanjutan terakhir menyelesaikan skrining ulang catatan ini, terlepas dari apakah hasilnya berubah. null jika belum pernah dipindai ulang; tidak pernah diisi mundur. | "2026-09-12T04:03:11Z" |
last_ongoing_screening_datasets_updated_at | string (ISO 8601) | Ya | Pembaruan dataset AML terbaru yang dilaporkan penyedia untuk skrining tersebut. null jika tidak ada tanggal dataset yang dilaporkan; tidak pernah diperkirakan. | null |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_aml" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"status": "In Review",
"total_hits": 1,
"entity_type": "person",
"hits": [
{
"id": "Q7XW3-aml-hit-1",
"caption": "Maria Garcia Lopez",
"match": true,
"target": true,
"match_score": 86.4,
"risk_score": 42.7,
"datasets": ["PEP Level 2"],
"properties": {
"name": ["María García López", "M. García"],
"alias": ["Maria Garcia"],
"birthDate": ["1990-05-12"]
},
"url": "https://example.org/registry/entities/Q7XW3",
"first_seen": "2023-11-02T00:00:00Z",
"last_seen": "2026-05-01T00:00:00Z",
"review_status": "Unreviewed"
}
],
"score": 42.7,
"screened_data": {
"full_name": "María García López",
"date_of_birth": "1990-05-12",
"nationality": "ES",
"document_number": "AB1234567"
},
"is_ongoing_monitoring_enabled": false,
"next_ongoing_monitoring_bill_date": null,
"last_ongoing_screening_at": null,
"last_ongoing_screening_datasets_updated_at": null,
"node_id": "first_aml",
"warnings": []
}
Analisis IP
Dikembalikan per lokasi jaringan yang ditangkap. Muncul sebagaiip_analyses[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC maupun KYB. Sumber: kyc/serializers/location.py:196-243 (IPAnalysisSerializerV3).
| Kolom | Tipe | Dapat berupa null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_ip_analysis" |
device_brand | string | Ya | Merek perangkat yang diturunkan dari user agent. | "Apple" |
device_model | string | Ya | Model perangkat. | "iPhone" |
browser_family | string | Ya | Keluarga browser. | "Mobile Safari" |
os_family | string | Ya | Keluarga OS. | "iOS" |
platform | string | Ya | Platform tingkat tinggi (mobile, desktop, tablet). | "mobile" |
device_fingerprint | string | Ya | Hash sidik jari perangkat yang stabil. | "f2a3…" |
ip_country | string | Ya | Nama negara yang diperoleh dari IP. | "Spain" |
ip_country_code | string (ISO 3166-1 alpha-2) | Ya | Kode negara yang diperoleh dari IP. | "ES" |
ip_state | string | Ya | Wilayah / provinsi yang diperoleh dari IP. | "Comunidad de Madrid" |
ip_city | string | Ya | Kota yang diperoleh dari IP. | "Madrid" |
latitude | float | Ya | Lintang yang diperoleh dari IP. | 40.4168 |
longitude | float | Ya | Bujur yang diperoleh dari IP. | -3.7038 |
ip_address | string | Ya | Alamat yang ditangkap. | "203.0.113.42" |
isp | string | Ya | Nama ISP. | "Telefonica de Espana" |
organization | string | Ya | Nama organisasi (sering sama dengan ISP). | "Telefonica de Espana" |
is_vpn_or_tor | boolean | Ya | true jika IP berasal dari VPN, proxy, atau node keluar Tor. | false |
is_data_center | boolean | Ya | true jika IP termasuk ASN hosting / pusat data yang dikenal. | false |
time_zone | string | Ya | Nama zona waktu IANA. | "Europe/Madrid" |
time_zone_offset | string | Ya | Offset UTC. | "+02:00" |
ip | object | Tidak | { location, distance_from_id_document, distance_from_poa_document }. location = { latitude, longitude }. Jarak dalam km, null jika salah satu sisi tidak tersedia. | { "location": { "latitude": 40.4168, "longitude": -3.7038 }, "distance_from_id_document": 3.4, "distance_from_poa_document": 1.1 } |
id_document | object | Tidak | { location, distance_from_ip, distance_from_poa_document }. Lokasi dokumen identitas diperoleh dari issuing_state dan alamat yang diparsing. | { "location": { "latitude": 40.4165, "longitude": -3.7026 }, "distance_from_ip": 3.4, "distance_from_poa_document": 4.0 } |
poa_document | object | Tidak | { location, distance_from_ip, distance_from_id_document }. Alamat POA yang digeocode. | { "location": { "latitude": 40.4170, "longitude": -3.7040 }, "distance_from_ip": 1.1, "distance_from_id_document": 4.0 } |
matches | array objek | Tidak | Kecocokan alamat/perangkat lintas sesi. Setiap item: { session_id, session_number, vendor_data, verification_date, match_type, match_source, matched_value, status, is_blocklisted, api_service, source, device_info, location_info, confidence, match_mode }. match_type adalah ip_address atau device_fingerprint; match_source adalah ip_address, persistent_id, legacy_fp, atau recovered_high (kecocokan yang dipulihkan juga memuat recovery_similarity, tls_ja4_corroborated, recovery_gate_reason). Dibatasi 5 kecocokan IP + 5 kecocokan perangkat. | [] |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
browser_version, os_version | string | Ya | Versi browser dan OS dari user agent. | "17.4" |
user_agent, accept_language | string | Ya | String user agent dan header Accept-Language yang dikirim browser. | "en-US,en;q=0.9" |
session_identifier, session_age_ms | string, integer | Ya | Sesi penjelajahan tempat langkah ini dijalankan, serta usianya dalam milidetik. | 48210 |
coords_accuracy | float | Ya | Radius akurasi, dalam meter, dari koordinat yang dilaporkan perangkat. | 35.0 |
raw_device_data | object | Ya | Sinyal perangkat mentah yang dikumpulkan untuk langkah ini. | {} |
{
"status": "Approved",
"node_id": "first_ip_analysis",
"device_brand": "Apple",
"device_model": "iPhone",
"browser_family": "Mobile Safari",
"os_family": "iOS",
"platform": "mobile",
"device_fingerprint": "f2a3c1de8b994a3f9e4cdf3a02b1a7c9",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_state": "Comunidad de Madrid",
"ip_city": "Madrid",
"latitude": 40.4168,
"longitude": -3.7038,
"ip_address": "203.0.113.42",
"isp": "Telefonica de Espana",
"organization": "Telefonica de Espana",
"is_vpn_or_tor": false,
"is_data_center": false,
"time_zone": "Europe/Madrid",
"time_zone_offset": "+02:00",
"ip": {
"location": { "latitude": 40.4168, "longitude": -3.7038 },
"distance_from_id_document": 3.4,
"distance_from_poa_document": 1.1
},
"id_document": {
"location": { "latitude": 40.4165, "longitude": -3.7026 },
"distance_from_ip": 3.4,
"distance_from_poa_document": 4.0
},
"poa_document": {
"location": { "latitude": 40.4170, "longitude": -3.7040 },
"distance_from_ip": 1.1,
"distance_from_id_document": 4.0
},
"matches": [],
"warnings": []
}
Verifikasi lokasi
Dikembalikan per langkah Verifikasi lokasi. Muncul sebagaigeolocation_checks[] di GET /v3/session/{sessionId}/decision/: satu item per langkah, yaitu percobaan yang diterimanya. geolocation_attempts[] mencantumkan setiap percobaan dari setiap langkah, dimulai dari yang paling lama. Keduanya bernilai null untuk alur kerja tanpa langkah tersebut. Sumber: GeolocationDecisionSerializer.
| Kolom | Tipe | Dapat berupa null | Deskripsi | Contoh |
|---|---|---|---|---|
node_id | string | Ya | Node alur kerja yang menghasilkan hasil. | "geolocation_1" |
status | string | Tidak | Lihat Enum status. | "Declined" |
outcome | string | Ya | Hasil yang terjadi pada percobaan: verified, low_accuracy, accuracy_undetermined, stale, approximate, denied, restricted, unavailable, timeout, mock_detected, outside_geofence, in_blocked_area, anonymizer_detected, skipped, replay_rejected atau unsupported_client. | "outside_geofence" |
permission | string | Ya | Izin yang diberikan sistem: granted_precise, granted_approximate, denied, restricted, unavailable, timeout, dismissed atau not_requested. | "granted_precise" |
latitude, longitude | float | Ya | Posisi WGS84. null jika tidak ada posisi. | 48.8566 |
accuracy_m | float | Ya | Radius ketidakpastian dalam meter. | 35.0 |
accuracy_confidence | string | Ya | p95, p68 atau unspecified. | "p95" |
measured_at, age_seconds | datetime, integer | Ya | Waktu perangkat memperoleh posisi, dan jumlah detik hingga Didit menerimanya. | 2 |
source, platform, sdk_version | string | Ya | Asal posisi, klien yang menghasilkannya, dan versi SDK-nya. | "browser" |
is_mock, produced_by_accessory | boolean | Ya | Bukti spoofing yang dilaporkan platform. null berarti platform tidak melaporkannya. | null |
integrity | string | Tidak | attested, not_attested, failed, unsupported (web) atau not_determined. | "unsupported" |
country_code, region_code, city | string | Ya | Tempat yang ditetapkan berdasarkan posisi tersebut. | "FR" |
geofence, inside_geofence, geofence_basis, inside_areas, blocked_areas | object, boolean, string, arrays | Ya | Hasil negara dan area. | { "enabled": true, "result": "outside" } |
position_source, anonymizers | string, object | Ya | Dari mana langkah ini mengambil posisi, serta sinyal VPN, proxy, Tor, spoofing dan emulator. | "device_and_ip" |
ip_distance_km, ip_distance_uncertainty_km, ip_consistent, document_distance_km, travel_excused, consecutive_mismatches | number, boolean, integer | Ya | Perbandingan dengan lokasi IP dan alamat yang tersimpan. | 12.4 |
attempts | integer | Tidak | Nomor percobaan dalam langkah. | 3 |
consent | object | Ya | accepted_at, version dan locale dari pemberitahuan yang disetujui pengguna. | |
warnings | array berisi objek peringatan | Tidak | Peringatan LOCATION_* pada langkah ini. Tidak ada di geolocation_attempts[], yang menambahkan received_at dan created_at. | [] |
Bukti Alamat
Dikembalikan untuk setiap dokumen alamat yang dikirim. Muncul sebagaipoa_verifications[] di GET /v3/session/{sessionId}/decision/. Sumber: poa/serializers/poa.py:212-227 (POAV3Serializer, memperluas POAV2Serializer di poa/serializers/poa.py:173-209).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
issuing_state | string (ISO 3166-1 alpha-3) | Ya | Kode negara penerbit dokumen. | "ESP" |
document_type | string | Tidak | Jenis umum dari PoaDocumentTypeChoices (common/config/choices.py:868-873): UTILITY_BILL, BANK_STATEMENT, GOVERNMENT_ISSUED_DOCUMENT, OTHER_POA_DOCUMENT. Jika tidak dikenali, nilainya UNKNOWN, tidak pernah null. | "UTILITY_BILL" |
document_subtype | string | Tidak | Kode subjenis dari PoaDocumentSubtypeChoices (misalnya ELECTRICITY_BILL, WATER_BILL, ACCOUNT_STATEMENT). Jika tidak dikenali, nilainya UNKNOWN, tidak pernah null. | "ELECTRICITY_BILL" |
issuer | string | Ya | Nama entitas penerbit. | "Iberdrola" |
issue_date | string (YYYY-MM-DD) | Ya | Tanggal penerbitan dokumen. | "2026-04-15" |
expiration_date | string (YYYY-MM-DD) | Ya | Tanggal kedaluwarsa yang tercetak pada dokumen, jika ada. | null |
poa_address | string | Ya | Alamat mentah hasil ekstraksi OCR. | "Calle Mayor 1, 28001 Madrid" |
poa_formatted_address | string | Ya | Alamat hasil geocoding atau pemformatan. | "Calle Mayor 1, 28001 Madrid, Spain" |
poa_parsed_address | object | Ya | Alamat terstruktur (street_1, street_2, city, region, postal_code, country (alpha-2), address_type, document_location, …). | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001" } |
document_file | string (URL) | Ya | URL presigned ke dokumen yang diunggah. | "https://<media-host>/.../poa.pdf?..." |
document_language | string | Ya | Bahasa dokumen yang terdeteksi (ISO 639-1). | "es" |
document_metadata | object | Ya | Metadata yang difilter: file_size, content_type, creation_date, modified_date, creator, producer, software, encryption, is_signed, is_tampered, signature_info, exif_original_date, exif_digitized_date, processed_by_known_editor, has_different_creation_mod_date, overlay_manipulation. | { "file_size": 184221, "content_type": "application/pdf", "is_tampered": false } |
extra_fields | object | Tidak | Kolom rekening bank (bank_account_number, bank_iban, bank_sort_code, bank_routing_number, bank_swift_bic, bank_branch_name, bank_branch_address), document_phone_number, additional_names, serta kunci kustom apa pun yang tersimpan pada catatan. | { "bank_iban": null, "additional_names": [] } |
name_on_document | string | Ya | Nama seperti tertulis pada bukti alamat. | "María García López" |
expected_details_address | string | Ya | Alamat yang diketik pelanggan saat pendaftaran (persis seperti yang diketik). | "Calle Mayor 1, Madrid" |
expected_details_formatted_address | string | Ya | Alamat yang diharapkan, setelah geocoding. | "Calle Mayor 1, 28001 Madrid, Spain" |
expected_details_parsed_address | object | Ya | Alamat yang diharapkan dalam bentuk terstruktur. | { "city": "Madrid", "postal_code": "28001" } |
name_match_score_expected_details | float (0-100) | Ya | Pencocokan berdasarkan kemiripan antara name_on_document dan nama yang diberikan saat sesi dibuat. | 94.0 |
name_match_score_id_verification | float (0-100) | Ya | Pencocokan berdasarkan kemiripan antara name_on_document dan full_name pada ID yang terverifikasi. | 100.0 |
extra_files | array of strings (URL) | Tidak | URL presigned ke file tambahan yang diunggah. | [] |
detected_codes | array objek | Tidak | Kode QR dan barcode yang terdeteksi di seluruh halaman dokumen yang diproses: type, page_number (berbasis 1), position (poligon), x/y/width/height (kotak pembatas), page_width/page_height, raw_payload (base64), parsed_payload (nilai hasil dekode, null saat kode ditemukan tetapi tidak dapat didekode). Berupa array kosong saat deteksi tidak menemukan apa pun. | [{ "type": "QR_CODE", "page_number": 1, "parsed_payload": "https://issuer.example/inv/9981" }] |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_poa" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"status": "Approved",
"issuing_state": "ESP",
"document_type": "UTILITY_BILL",
"document_subtype": "ELECTRICITY_BILL",
"issuer": "Iberdrola",
"issue_date": "2026-04-15",
"expiration_date": null,
"poa_address": "Calle Mayor 1, 28001 Madrid",
"poa_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"poa_parsed_address": { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" },
"document_file": "https://<media-host>/.../poa.pdf?signature=...",
"document_language": "es",
"document_metadata": {
"file_size": 184221,
"content_type": "application/pdf",
"creation_date": "2026-04-15T08:11:32Z",
"modified_date": "2026-04-15T08:11:32Z",
"creator": "Iberdrola Billing",
"producer": "Adobe PDF Library 15.0",
"software": null,
"encryption": null,
"is_signed": true,
"is_tampered": false,
"signature_info": { "signer_name": "Iberdrola Clientes", "date": "2026-04-15T08:11:32Z" },
"exif_original_date": null,
"exif_digitized_date": null,
"processed_by_known_editor": false,
"has_different_creation_mod_date": false,
"overlay_manipulation": null
},
"extra_fields": {
"bank_account_number": null,
"bank_iban": null,
"bank_sort_code": null,
"bank_routing_number": null,
"bank_swift_bic": null,
"bank_branch_name": null,
"bank_branch_address": null,
"document_phone_number": null,
"additional_names": []
},
"name_on_document": "María García López",
"expected_details_address": "Calle Mayor 1, Madrid",
"expected_details_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"expected_details_parsed_address": { "city": "Madrid", "postal_code": "28001", "country": "ES" },
"name_match_score_expected_details": 94.0,
"name_match_score_id_verification": 100.0,
"extra_files": [],
"detected_codes": [
{
"type": "QR_CODE",
"page_number": 1,
"position": [[820, 1120], [1002, 1120], [1002, 1302], [820, 1302]],
"x": 820,
"y": 1120,
"width": 182,
"height": 182,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "aHR0cHM6Ly9pYmVyZHJvbGEuZXMvZmFjdHVyYS85OTgx",
"parsed_payload": "https://iberdrola.es/factura/9981"
},
{
"type": "CODE_128",
"page_number": 1,
"position": [[112, 1480], [560, 1480], [560, 1540], [112, 1540]],
"x": 112,
"y": 1480,
"width": 448,
"height": 60,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "MDA5OTgxMDAwNDI=",
"parsed_payload": "0099810042"
}
],
"node_id": "first_poa",
"warnings": []
}
Verifikasi Telepon
Dikembalikan per percobaan verifikasi telepon. Muncul sebagaiphone_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC dan KYB. Sumber: phone/serializers/phone.py:251-266 (PhoneV3Serializer, memperluas PhoneV2Serializer di phone/serializers/phone.py:103-248).
| Kolom | Tipe | Dapat berupa null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
phone_number_prefix | string | Tidak | Prefiks negara E.164 (dengan +). | "+34" |
phone_number | string | Tidak | Nomor pelanggan tanpa prefiks. | "612345678" |
full_number | string | Tidak | Nomor E.164 lengkap (phone_number_prefix + phone_number). | "+34612345678" |
country_code | string (ISO 3166-1 alpha-2) | Ya | Negara nomor tersebut. | "ES" |
country_name | string | Ya | Nama negara dalam bahasa lokal. | "Spain" |
carrier | object | Tidak | { name, type } dengan type berupa nilai LineTypeChoices (common/config/choices.py:648-667): mobile, fixed_line, voip, isp, vpn, toll_free, premium_rate, satellite, pager, payphone, voice_mail, unknown, dan kelas saluran lainnya. | { "name": "Movistar", "type": "mobile" } |
is_disposable | boolean | Tidak | true saat operator menandai nomor sebagai sementara atau sekali pakai. | false |
is_virtual | boolean | Tidak | true saat carrier.type bernilai salah satu dari voip, isp, vpn. | false |
verification_method | string | Tidak | Saluran yang digunakan untuk mengirim OTP (whatsapp, sms, …). Dibaca dari actual_channel pada percobaan pengiriman terakhir (jika tidak ada, kembali ke channel yang diminta, lalu sms). | "whatsapp" |
verification_attempts | integer | Tidak | Total percobaan pengiriman OTP (pengiriman awal ditambah pengiriman ulang). | 1 |
verified_at | string (ISO 8601) | Ya | Stempel waktu saat OTP berhasil dimasukkan. | "2026-05-17T10:14:02Z" |
lifecycle | array objek | Tidak | Peristiwa dalam urutan kronologis: percobaan pengiriman, callback pengiriman, pemeriksaan kode, dan peristiwa status akhir. Setiap event berbentuk { type, timestamp, details, fee }. Tipe event berasal dari PhoneEventChoices. | […] |
matches | array objek | Tidak | Kecocokan nomor telepon lintas sesi. Setiap item: { session_id, session_number, vendor_data, verification_date, phone_number, status, is_blocklisted, api_service, source }. source berupa session atau list_entry. | [] |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_phone" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
phone_intelligence | object | Ya | Sinyal intelijen telepon. Hanya ada jika add-on intelijen dijalankan untuk nomor tersebut. | |
phone_social | object | Ya | Jejak sosial nomor tersebut. Hanya ada jika add-on jejak sosial dijalankan. |
{
"status": "Approved",
"phone_number_prefix": "+34",
"phone_number": "612345678",
"full_number": "+34612345678",
"country_code": "ES",
"country_name": "Spain",
"carrier": { "name": "Movistar", "type": "mobile" },
"is_disposable": false,
"is_virtual": false,
"verification_method": "whatsapp",
"verification_attempts": 1,
"verified_at": "2026-05-17T10:14:02Z",
"lifecycle": [
{
"type": "PHONE_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:13:51Z",
"details": { "status": "Success", "reason": null, "channel": "whatsapp", "actual_channel": "whatsapp" },
"fee": 0.02
},
{
"type": "PHONE_DELIVERY_DELIVERED",
"timestamp": "2026-05-17T10:13:52Z",
"details": { "channel": "whatsapp", "status": "delivered" },
"fee": 0
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:14:02Z",
"details": { "code_tried": "482917", "status": "Approved" },
"fee": 0
},
{
"type": "PHONE_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:14:02Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_phone",
"warnings": []
}
Verifikasi Email
Dikembalikan per percobaan verifikasi email. Muncul sebagaiemail_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC dan KYB. Sumber: email_verification/serializers/email.py:149-164 (EmailV3Serializer, memperluas EmailV2Serializer di email_verification/serializers/email.py:38-146).
| Kolom | Tipe | Dapat berupa null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
email | string | Tidak | Alamat email yang dikirimkan oleh pengguna. | "maria.garcia@example.com" |
is_breached | boolean | Tidak | true saat email muncul dalam kebocoran data yang diketahui. | false |
breaches | array objek | Tidak | Detail per kebocoran saat is_breached bernilai true: { name, domain, logo_path, breach_date, description, is_verified, data_classes, breach_emails_count }. | [] |
is_disposable | boolean | Tidak | true saat email berasal dari penyedia email sekali pakai. | false |
is_undeliverable | boolean | Tidak | true saat probing pengiriman SMTP menunjukkan kotak masuk tidak menerima email. | false |
verification_attempts | integer | Tidak | Total percobaan pemeriksaan OTP. | 1 |
verified_at | string (ISO 8601) | Ya | Stempel waktu saat OTP berhasil dimasukkan. | "2026-05-17T10:15:22Z" |
lifecycle | array objek | Tidak | Peristiwa dalam urutan kronologis: percobaan pengiriman, pemeriksaan kode, dan peristiwa status akhir. Setiap event berbentuk { type, timestamp, details, fee }. Tipe event berasal dari EmailEventChoices. | […] |
matches | array objek | Tidak | Kecocokan email lintas sesi. Setiap item: { session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source }. source berupa session atau list_entry. | [] |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_email" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
email_intelligence | object | Ya | Sinyal intelijen email. Hanya ada jika add-on intelijen dijalankan untuk alamat tersebut. | |
email_social | object | Ya | Jejak sosial alamat tersebut. Hanya ada jika add-on jejak sosial dijalankan. |
{
"status": "Approved",
"email": "maria.garcia@example.com",
"is_breached": false,
"breaches": [],
"is_disposable": false,
"is_undeliverable": false,
"verification_attempts": 1,
"verified_at": "2026-05-17T10:15:22Z",
"lifecycle": [
{
"type": "EMAIL_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:15:11Z",
"details": { "status": "Success", "reason": null },
"fee": 0.02
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:15:22Z",
"details": { "code_tried": "739204", "status": "Approved" },
"fee": 0
},
{
"type": "EMAIL_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:15:22Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_email",
"warnings": []
}
Validasi Database
Dikembalikan per pencarian database yang dijalankan terhadap data yang dikirimkan pengguna. Muncul sebagaidatabase_validations[] di GET /v3/session/{sessionId}/decision/. Sumber: database_validation/serializers/database_validation.py:21-142 (DatabaseValidationV3Serializer, memperluas DatabaseValidationV2Serializer).
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
issuing_state | string (ISO 3166-1 alpha-3) | Ya | Negara yang registrinya dikueri. | "ESP" |
validation_type | string (enum) | Tidak | Cara hasil dikonfirmasi: one_by_one (hasil dari satu layanan), two_by_two (dua layanan atau lebih yang masing-masing secara independen mencocokkan nomor identifikasi secara penuh), atau not_enabled (validator dilewati atau tidak ada penyedia yang merespons; no_match yang definitif tetap menghasilkan one_by_one). Tidak pernah null. Sumber: DatabaseValidationChoices (common/config/choices.py:1097-1100). | "one_by_one" |
screened_data | object | Tidak | Data yang dikirim ke registri. Kolom file (selfie, cnh_qr_code_image, document_image) diberi URL presigned saat dibaca. | { "document_number": "99999999R", "date_of_birth": "1990-05-12" } |
validations | array dari objek | Tidak | Satu entri untuk setiap layanan dalam katalog yang menghasilkan kecocokan. Setiap entri dapat menyertakan service_id, service_name, validation (objek keputusan dari penyedia), outcome_code, outcome_detail, dan source_data (profil warga yang sudah dibersihkan: full_name, gender, date_of_birth, photo (URL presigned), signature (URL presigned), …). | […] |
errors | array dari objek | Ya | Error per layanan saat pencarian gagal; kunci ini dihilangkan sepenuhnya jika kosong. Setiap entri adalah objek error dari layanan upstream ditambah service_id yang menghasilkannya. | [] |
match_type | string (enum) | Ya | Keputusan kecocokan agregat di seluruh layanan yang dikueri: full_match, partial_match, atau no_match (DatabaseValidationMatchTypeChoices, common/config/choices.py:1103-1106). null sampai dievaluasi. | "full_match" |
status | string | Tidak | Lihat Enum status. | "Approved" |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_db_validation" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"issuing_state": "ESP",
"validation_type": "one_by_one",
"screened_data": {
"document_number": "99999999R",
"date_of_birth": "1990-05-12",
"first_name": "María",
"last_name": "García López"
},
"validations": [
{
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"validation": { "is_valid": true, "match_score": 100 },
"outcome_code": "MATCH",
"outcome_detail": "All identifiers match the registry record.",
"source_data": {
"full_name": "María García López",
"gender": "F",
"date_of_birth": "1990-05-12",
"photo": "https://<media-host>/.../registry_photo.jpg?signature=...",
"signature": null
}
}
],
"match_type": "full_match",
"status": "Approved",
"node_id": "first_db_validation",
"warnings": []
}
Respons kuesioner
Dikembalikan per pengiriman kuesioner. Muncul sebagaiquestionnaire_responses[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC dan KYB. Sumber: questionnaires/serializers/questionnaire.py:591-597 (QuestionnaireResponseV3Serializer, memperluas QuestionnaireResponseSerializer di questionnaires/serializers/questionnaire.py:520-588).
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
questionnaire_id | string (UUID) | Tidak | Pengenal versi kuesioner yang dijawab. | "6a0f1c2c-…" |
title | string | Tidak | Nama kuesioner, sebagaimana diatur di Console. | "Customer risk profile" |
description | string | Ya | Deskripsi kuesioner. | "Short risk-profile questions." |
languages | array string | Tidak | Kode bahasa tempat kuesioner dipublikasikan. | ["en", "es"] |
default_language | string | Tidak | Kode bahasa cadangan. | "en" |
is_active | boolean | Tidak | Apakah versi kuesioner ini adalah versi yang aktif. | true |
is_simple_questionnaire | boolean | Tidak | true ketika kuesioner tidak memiliki percabangan (daftar datar). | true |
questionnaire_group_id | string (UUID) | Tidak | Pengenal yang sama untuk semua versi dari kuesioner yang sama. | "a7c2c2c2-…" |
version | integer | Tidak | Nomor versi templat yang aktif. | 3 |
status | string | Tidak | Salah satu dari Approved, In Review, Not Finished (penolakan di tingkat kuesioner dipetakan ke In Review). | "Approved" |
published_at | string (ISO 8601) | Ya | Kapan templat dipublikasikan. | "2026-01-12T11:00:00Z" |
sections | array dari objek | Tidak | Bagian yang berurutan setelah traversal graf dan penyaringan visibilitas diterapkan. Setiap bagian berbentuk { title, description, items[] } (judul dan deskripsi berasal dari SECTION_HEADER pembuka, sudah diterjemahkan sebelumnya). Setiap item adalah elemen formulir (uuid, value (id node), element_type, is_required, title, description, placeholder, choices, max_files, required_if, repeatable_config, serta kolom answer: null jika belum dijawab, dihilangkan pada item tata letak HEADING/PARAGRAPH/SEPARATOR). Jawaban file berisi { files: [<presigned URL>, …] }. | […] |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_questionnaire" |
{
"questionnaire_id": "6a0f1c2c-3b7d-4d2c-9eb6-fdc6c7c92ef9",
"title": "Customer risk profile",
"description": "Short risk-profile questions.",
"languages": ["en", "es"],
"default_language": "en",
"is_active": true,
"is_simple_questionnaire": true,
"questionnaire_group_id": "a7c2c2c2-1111-4d2c-9eb6-fdc6c7c92ef9",
"version": 3,
"status": "Approved",
"published_at": "2026-01-12T11:00:00Z",
"sections": [
{
"title": "Source of funds",
"description": null,
"items": [
{
"uuid": "4f1d5e2c-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"value": "q_source_of_funds",
"element_type": "SINGLE_CHOICE",
"is_required": true,
"title": "What is your main source of funds?",
"description": null,
"placeholder": null,
"choices": [
{ "label": "Salary", "value": "salary" },
{ "label": "Business income", "value": "business" },
{ "label": "Investments", "value": "investments" }
],
"max_files": 1,
"required_if": null,
"repeatable_config": null,
"answer": { "value": "salary" }
}
]
}
],
"node_id": "first_questionnaire"
}
Tanda Tangan Elektronik
Dikembalikan per penandatangan dari langkah Tanda Tangan Elektronik. Muncul sebagaisignatures[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC dan KYB, hanya jika alur kerja memiliki langkah tersebut. Berbeda dengan objek laporan lainnya, status-nya adalah tahap penandatanganan dan hasilnya ada di verdict, sedangkan item warnings[]-nya berbentuk { code, node_id }, bukan objek peringatan.
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
id | string (UUID) | Tidak | Tanda tangan penandatangan. Gunakan sebagai signature_id untuk rute evidence dan validate. | "0e6c2a8e-…" |
node_id | string | Tidak | Pengenal node alur kerja. | "feature_signature" |
status | string | Tidak | Tahap penandatanganan: intro, review, code, signing, signed atau declined. Hanya signed yang berarti dokumen telah ditandatangani. | "signed" |
verdict | string | Tidak | Not Finished, Approved, In Review atau Declined. | "Approved" |
level | string | Tidak | simple (default) atau aes. qes adalah fitur tambahan yang belum tersedia. | "aes" |
format | string | Tidak | pdf untuk tanda tangan Simple, pades untuk Advanced (AES). | "pades" |
profile | string | Ya | PAdES-B-LT setelah tanda tangan Advanced (AES) ditandatangani, jika tidak maka null. | "PAdES-B-LT" |
signer | object | Tidak | { name, capacity, company, role, roles, identity_session_id }. capacity adalah self (KYC) atau company (KYB). | { "name": "Jane Doe", "capacity": "self", … } |
identity_used | object | Tidak | { session_id, kyc_id, verified, expected_name }: identitas terverifikasi yang menjadi dasar tanda tangan. Kosong untuk tanda tangan Simple tanpa identitas terverifikasi. | { "verified": true, … } |
certificate | object | Ya | { issuer, issued_to, serial, valid_from, valid_until }. null sampai ditandatangani, dan selalu null untuk tanda tangan Simple. | { "serial": "5A3F9C21", … } |
confirmation | object | Tidak | { channel, destination, confirmed_at, attempts }. destination disamarkan; attempts menghitung kode yang dimasukkan, termasuk kode yang benar. Tanda tangan Sederhana tidak memiliki kode, sehingga channel dan destination bernilai null. | { "channel": "email", … } |
timestamp | object | Ya | { time, qualified, valid }. qualified selalu false untuk AES. null sampai dokumen ditandatangani, dan selalu null untuk tanda tangan Sederhana. | { "qualified": false, … } |
documents | array objek | Tidak | { id, uuid, title, file_name, pages, size_bytes, sha256_original, sha256_signed, status, opened_at, read_at, read_to_end, consented_at, consent, signed_file, mode, source_format, conversion, fields }. status bernilai signed, declined, not_signed atau not_reached. mode bernilai fields atau read_and_agree. source_format bernilai pdf atau docx; conversion menjelaskan file Word asli, atau bernilai null untuk PDF. | […] |
documents[].fields | array objek | Tidak | { key, type, role, label, page, x, y, width, height, required, value, display_value, value_source, filled_at, image_url, value_unavailable_reason } untuk setiap kolom pada dokumen. value berupa string, boolean untuk kotak centang, atau true untuk tanda tangan atau paraf yang diterapkan. Kosong untuk dokumen tanpa kolom. | […] |
adopted_signature | object | Ya | { method, font, adopted_at }: tanda tangan dan paraf yang diadopsi oleh penandatangan. method bernilai typed atau drawn; font adalah gaya tulisan tangan dari tanda tangan yang diketik. null sampai diadopsi. | { "method": "drawn", … } |
electronic_signature_consent_at | string (ISO 8601) | Ya | Waktu penandatangan menyetujui untuk menandatangani dokumen secara elektronik. Diisi ketika ada dokumen yang memiliki kolom. | "2026-11-03T10:41:40Z" |
evidence_file | string | Ya | Jalur PDF bukti, setelah ditandatangani. | "/v3/session/…/evidence/?signature_id=…" |
warnings | array objek | Tidak | { code, node_id }, dengan code berupa salah satu dari SIGNATURE_DECLINED, SIGNATURE_OTP_FAILED, SIGNATURE_NAME_MISMATCH, SIGNATURE_IDENTITY_NOT_VERIFIED, SIGNATURE_DOCUMENT_CHANGED. | [] |
validation | object | Ya | { valid, checked_at, documents[] }: pemeriksaan kriptografis terakhir terhadap dokumen yang sudah ditandatangani. null sampai ditandatangani. { valid: null, reason: "signature_provider_outcome_unknown", checked_at } ketika hasil penandatanganan tidak dapat dikonfirmasi. | { "valid": true, … } |
declined_at | string (ISO 8601) | Ya | Waktu penandatangan menolak. | null |
declined_action | string | Tidak | signature_declined_action dari langkah tersebut. | "REVIEW" |
signed_at | string (ISO 8601) | Ya | Waktu dokumen ditandatangani. | "2026-11-03T10:42:24Z" |
expires_at | string (ISO 8601) | Tidak | Waktu tautan penandatanganan berhenti berfungsi. | "2026-11-10T10:30:00Z" |
email_sent_at | string (ISO 8601) | Ya | Waktu salinan yang sudah ditandatangani dikirim melalui email kepada penandatangan. | "2026-11-03T10:42:30Z" |
email_unavailable_reason | string | Ya | Alasan salinan tidak dikirim melalui email, ketika salinan diminta. | null |
ip_address | string | Ya | Alamat IP penandatangan ketika meminta kodenya. | "203.0.113.10" |
place | string | Ya | Tidak dikumpulkan: selalu null. | null |
place_unavailable_reason | string | Ya | not_collected. | "not_collected" |
Estimasi Usia
Dikembalikan oleh API Estimasi Usia mandiri (POST /v3/age-estimation/). Respons memuat subset dari bentuk Liveness check di dalam envelope age_estimation, yaitu status, method, score, age_estimation, warnings, serta blok deteksi wajah user_image yang hanya ada pada mode mandiri. Respons tidak menyertakan reference_image, video_url, matches, face_quality, atau face_luminance. Pada sesi alur kerja tidak ada array terpisah. Usia yang diestimasi muncul sebagai liveness_checks[].age_estimation di GET /v3/session/{sessionId}/decision/. Sumber: apis/serializers/age_estimation.py:50-55 (AgeEstimationResponseSerializer), envelope dibangun di apis/views/age_estimation.py:138-174.
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
request_id | string (UUID) | Tidak | ID sesi yang disimpan ketika save_api_request=true (nilai default); jika tidak, UUID korelasi sementara. | "3b1f1e2c-…" |
age_estimation | object | Tidak | Envelope hasil: status (Approved / Declined), method (selalu PASSIVE), score (liveness 0-100, dapat null), age_estimation (usia prediksi dalam tahun dari wajah terbesar, dapat null), user_image (entities[] dengan age, bbox [x_min, y_min, x_max, y_max], confidence, gender untuk setiap wajah; serta best_angle), warnings[]. | { … } |
vendor_data | string | Ya | vendor_data dari permintaan, dikembalikan apa adanya. | null |
metadata | object | Ya | metadata dari permintaan, dikembalikan apa adanya. | null |
created_at | string (ISO 8601) | Tidak | Stempel waktu permintaan di sisi server. | "2026-05-17T10:22:13.512941+00:00" |
{
"request_id": "3b1f1e2c-7777-4d2c-9eb6-fdc6c7c92ef9",
"age_estimation": {
"status": "Approved",
"method": "PASSIVE",
"score": 94.10,
"age_estimation": 28.7,
"user_image": {
"entities": [
{ "age": 28.7, "bbox": [40, 40, 100, 100], "confidence": 0.72, "gender": "male" }
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-05-17T10:22:13.512941+00:00"
}
Autentikasi Biometrik
Autentikasi biometrik menjalankan pipeline Liveness + Pencocokan Wajah yang sama seperti pada KYC standar, tetapi dikonfigurasi untuk membandingkan wajah yang diambil dengan gambar referensi milik pengguna yang sudah ada, bukan dengan potret dokumen yang baru di-OCR. Tidak ada serializer khusus.GET /v3/session/{sessionId}/decision/ mengembalikan objek pemeriksaan liveness dan Pencocokan Wajah standar di bawah liveness_checks[] dan face_matches[]. Alur kerja sesi dikonfigurasi dengan workflow_type = "biometric_authentication" (WorkflowTypeChoices, common/config/choices.py:636).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
liveness_checks | array dari pemeriksaan liveness | Tidak | Hasil liveness untuk percobaan autentikasi. | [ { "status": "Approved", … } ] |
face_matches | array dari Pencocokan Wajah | Tidak | Hasil pencocokan terhadap referensi yang terdaftar. source_image_session_id diisi dengan session_id milik sesi itu sendiri. Wajah referensi (portrait_image yang diberikan, atau wajah tersimpan yang dipakai ulang melalui vendor_data ketika portrait_image dihilangkan) dicatat di bawah sesi autentikasi itu sendiri (face/views/face.py:656-659). | [ { "status": "Approved", "source_image_session_id": "…", … } ] |
status | string | Tidak | Status sesi tingkat atas (lihat Enum status). | "Approved" |
{
"session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"status": "Approved",
"liveness_checks": [
{
"status": "Approved",
"method": "PASSIVE",
"score": 95.10,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": null,
"matches": [],
"face_quality": 91.20,
"face_luminance": 53.10,
"node_id": "biometric_auth_liveness",
"warnings": []
}
],
"face_matches": [
{
"status": "Approved",
"score": 98.42,
"source_image_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "biometric_auth_face_match",
"warnings": []
}
]
}
Registri KYB
Dikembalikan untuk setiap perusahaan yang dikonfirmasi oleh registri dalam alur kerja KYB. Muncul sebagairegistry_checks[] di GET /v3/session/{sessionId}/decision/ untuk sesi bisnis. Sumber: kyb/serializers/kyb.py:939-964 (RegistryCheckV3Serializer).
| Kolom | Tipe | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
node_id | string | null | Ya | Pengidentifikasi node alur kerja (V3). | "first_registry" |
data_resolved | boolean | Tidak | true saat pengambilan data dari registri selesai (atau is_from_registry bernilai false, yang berarti data dimasukkan secara manual). | true |
company | object | Tidak | Payload perusahaan lengkap, lihat Objek perusahaan di bawah. | { … } |
ownership_structure | object | Ya | Tabel kepemilikan yang dibuktikan oleh registri: shareholders[] dan beneficial_owners[], dengan setiap pemilik beserta identitas registrinya, porsi kepemilikan, dan shareholding kanonis. | { "shareholders": [...], "beneficial_owners": [] } |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
Objek perusahaan
Darikyb/serializers/kyb.py:220-321 (KYBCompanyResponseSerializer).
| Kolom | Tipe | Dapat null | Deskripsi |
|---|---|---|---|
uuid | string (UUID) | Tidak | Pengidentifikasi internal perusahaan. |
node_id | string | null | Ya | Pengidentifikasi node alur kerja. |
status | string | Tidak | Status fitur (FeatureStatusChoices). |
registry_status | string | Ya | Status perusahaan dari registri (active, dissolved, …). |
data_resolved | boolean | Tidak | Definisinya sama dengan pada objek induk. |
company_name | string | Ya | Nama perusahaan yang terdaftar. |
registration_number | string | Ya | Pengidentifikasi registri. |
country_code | string (ISO 3166-1 alpha-2) | Ya | Negara tempat pendirian. |
region | string | Ya | Subdivisi ISO 3166-2 bila berlaku (misalnya US-CA). |
company_type | string | Ya | Bentuk hukum (LLC, SL, …). |
incorporation_date | string (YYYY-MM-DD) | Ya | Tanggal pendirian. |
registered_address | string | Ya | Alamat hukum yang terdaftar. |
tax_number | string | Ya | Pengidentifikasi pajak / PPN. |
risk_level | string | Ya | Peringkat risiko yang disediakan penyedia. |
verification_status | string | Ya | Enum status verifikasi internal. |
is_from_registry | boolean | Tidak | true jika bersumber dari registri (bukan entri manual). |
fetch_status | string | Ya | pending, resolved, failed. |
alternative_names | string | Ya | Nama dagang alternatif, dipisahkan koma. |
nature_of_business | string | Ya | Deskripsi kegiatan usaha dalam teks bebas. |
registered_capital | string | Ya | Modal terdaftar sebagai string yang mudah dibaca. |
registered_capital_amount | string (decimal) | Ya | Jumlah modal terdaftar yang sudah diuraikan. |
registered_capital_currency | string (ISO 4217) | Ya | Kode mata uang. |
website | string (URL) | Ya | Situs web perusahaan. |
email | string | Ya | Email kontak publik. |
phone | string | Ya | Telepon kontak publik. |
legal_entity_identifier | string | Ya | LEI jika tersedia. |
location_of_registration | string | Ya | Kantor registri / wilayah. |
vat_number | string | Ya | Nomor PPN yang diajukan untuk perusahaan. |
vat_validation_status | string | Tidak | Hasil validasi nomor PPN, atau tax_number jika tidak ada nomor PPN: valid, invalid, format_valid, invalid_format, could_not_validate, atau not_applicable. Lihat Validasi PPN dan ID pajak. |
vat_validated_number | string | Ya | Nomor yang diperiksa, sesuai dengan data yang diketahui oleh sumber. |
vat_validation_source | string | Ya | Sumber yang menentukan status: eu_vies, pl_vat_white_list, no_brreg, ch_uid_register, br_receita_federal, co_rues, cr_hacienda, ec_sri, py_dnit, atau format_rules. |
vat_validated_name | string | Ya | Nama yang terdaftar pada sumber (kosong jika sumber tidak mengungkapkannya). |
vat_validated_address | string | Ya | Alamat yang terdaftar pada sumber (kosong jika tidak diungkapkan). |
vat_checked_at | string (ISO 8601) | Ya | Stempel waktu pemeriksaan; null jika tidak ada pemeriksaan yang dijalankan. |
financial_summary | object | Ya | Ringkasan informasi keuangan terbaru jika disediakan oleh registri. |
officers | array objek | Tidak | Daftar pejabat yang aman untuk B2C: { uuid, name, designation, role, nationality, is_active, kyc_status, kyc_session_url }. |
beneficial_owners | array objek | Tidak | Daftar UBO yang aman untuk B2C: { uuid, name, first_name, last_name, entity_type, roles, ownership_min_shares, ownership_max_shares, is_active, kyc_status, kyc_session_url, effective_ownership_percent }. |
addresses | array objek | Ya | Detail per alamat dari registri. |
industries | array objek | Ya | Klasifikasi bergaya SIC/NAICS. |
accounts | array objek | Ya | Metadata laporan keuangan yang diajukan. |
registry_data | object | Ya | Detail registri ternormalisasi milik Didit (hasil kepemilikan, koreksi konsol, fakta registri yang tidak memiliki kolom sendiri). Bukan kontrak yang stabil. |
user_provided_data | object | Ya | Salinan data kolom yang diedit pengguna. |
confirmed_by_user_at | string (ISO 8601) | Ya | Stempel waktu saat pengguna mengonfirmasi data yang diekstrak. |
last_console_edit_at | string (ISO 8601) | Ya | Stempel waktu pengeditan konsol terakhir. |
is_editable | boolean | Tidak | true selama data yang bersumber dari registri masih dapat diedit oleh pengguna akhir. |
{
"status": "Approved",
"node_id": "first_registry",
"data_resolved": true,
"company": {
"uuid": "b1f1e2c2-9999-4d2c-9eb6-fdc6c7c92ef9",
"node_id": "first_registry",
"status": "Approved",
"registry_status": "active",
"data_resolved": true,
"company_name": "Sante Clinics SL",
"registration_number": "B12345678",
"country_code": "ES",
"region": null,
"company_type": "SL",
"incorporation_date": "2018-03-22",
"registered_address": "Calle Mayor 1, 28001 Madrid, Spain",
"tax_number": "B12345678",
"risk_level": "low",
"verification_status": "verified",
"is_from_registry": true,
"fetch_status": "resolved",
"alternative_names": "Sante Clinics",
"nature_of_business": "Medical clinic operations",
"registered_capital": "EUR 50,000",
"registered_capital_amount": "50000.00",
"registered_capital_currency": "EUR",
"website": "https://santeclinics.com",
"email": "info@santeclinics.com",
"phone": "+34911223344",
"legal_entity_identifier": null,
"location_of_registration": "Registro Mercantil de Madrid",
"vat_number": "ESB12345678",
"vat_validation_status": "valid",
"vat_validated_name": "SANTE CLINICS SL",
"vat_validated_address": "CALLE MAYOR 1, 28001 MADRID",
"vat_checked_at": "2026-05-17T10:11:05Z",
"financial_summary": null,
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…"
}
],
"beneficial_owners": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"entity_type": "person",
"roles": ["UBO"],
"ownership_min_shares": "75.00",
"ownership_max_shares": "75.00",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"effective_ownership_percent": 75.0
}
],
"addresses": [],
"industries": [],
"accounts": [],
"registry_data": {},
"user_provided_data": {},
"confirmed_by_user_at": "2026-05-17T10:11:02Z",
"last_console_edit_at": null,
"is_editable": false
},
"ownership_structure": null,
"warnings": []
}
Dokumen KYB
Dikembalikan untuk setiap node yang mengumpulkan dokumen pendukung KYB. Muncul sebagaidocument_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi bisnis, satu entri per node_id, dengan items[] yang mencantumkan setiap dokumen yang diunggah. Sumber: kyb/serializers/kyb.py:1053-1068 (DocumentVerificationV3Serializer); setiap item mengikuti kyb/serializers/kyb.py:811-851 (KYBDocumentResponseSerializer).
| Kolom | Tipe | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Status gabungan di seluruh dokumen node ini: Approved hanya jika setiap dokumen pipeline telah disetujui; Declined jika ada dokumen yang ditolak; In Review jika tidak demikian; Not Finished selama masih menunggu. Lihat Enum status. | "Approved" |
node_id | string | null | Ya | ID node alur kerja (V3). | "first_kyb_documents" |
items | array yang berisi objek item dokumen KYB | Tidak | Satu entri untuk setiap dokumen yang diunggah atau diminta. | […] |
groups | object | Tidak | Jumlah per grup dokumen: { <group_name>: { total, approved, pending, declined, in_review, other, missing } }. | { "incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 } } |
required_groups | array string | Tidak | Grup dokumen yang diwajibkan oleh konfigurasi alur kerja. | ["incorporation_certificate", "shareholder_register"] |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
Objek item dokumen KYB
| Kolom | Tipe | Dapat bernilai null | Deskripsi |
|---|---|---|---|
uuid | string (UUID) | Tidak | ID dokumen internal. |
document_type | string | Ya | Grup tingkat tinggi (incorporation_certificate, shareholder_register, …). |
document_subtype | string | Ya | Subtipe spesifik penyedia. |
document_group | string | Ya | Cermin dari document_type (alias dipertahankan agar lebih jelas). |
file_url | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke file yang sudah dibersihkan. |
original_filename | string | Ya | Nama file seperti saat diunggah. |
file_size | integer | Ya | Ukuran file dalam byte. |
status | string | Tidak | Status per dokumen (FeatureStatusChoices). |
created_at | string (ISO 8601) | Tidak | Stempel waktu unggah. |
cross_check_result | object | Ya | Keputusan pemeriksaan silang terhadap registri / dokumen lainnya. |
document_metadata | object | Ya | Bentuk metadata yang difilter sama seperti document_metadata milik POA. |
description | string | Ya | Deskripsi yang diberikan oleh peninjau atau sistem. |
is_requested | boolean | Tidak | true jika alur kerja mengharapkan dokumen ini. |
ocr_data | object | Ya | Kolom hasil ekstraksi OCR jika tersedia. |
is_console_upload | boolean | Tidak | true jika dokumen diunggah oleh peninjau konsol (tidak disertakan dalam keputusan agregat). |
is_confirmed | boolean | Tidak | true jika peninjau telah secara eksplisit mengonfirmasi dokumen. |
{
"status": "Approved",
"node_id": "first_kyb_documents",
"items": [
{
"uuid": "e1f1e2c2-cccc-4d2c-9eb6-fdc6c7c92ef9",
"document_type": "incorporation_certificate",
"document_subtype": "registro_mercantil_extract",
"document_group": "incorporation_certificate",
"file_url": "https://<media-host>/.../incorporation.pdf?signature=...",
"original_filename": "incorporation_certificate.pdf",
"file_size": 256412,
"status": "Approved",
"created_at": "2026-05-17T10:08:00Z",
"cross_check_result": { "matches_registry_name": true, "matches_registration_number": true },
"document_metadata": {
"file_size": 256412,
"content_type": "application/pdf",
"is_signed": true,
"is_tampered": false
},
"description": null,
"is_requested": true,
"ocr_data": { "company_name": "Sante Clinics SL", "registration_number": "B12345678" },
"is_console_upload": false,
"is_confirmed": true
}
],
"groups": {
"incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
},
"required_groups": ["incorporation_certificate", "shareholder_register"],
"warnings": []
}
Pihak kunci KYB
Dikembalikan untuk setiap node Pihak Kunci dalam alur kerja KYB. Muncul sebagaikey_people_checks[] dalam GET /v3/session/{sessionId}/decision/ untuk sesi bisnis. Sumber: kyb/serializers/kyb.py:967-1050 (KeyPeopleCheckV3Serializer).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
node_id | string | null | Ya | ID node alur kerja (V3). | "first_key_people" |
registry | object | Tidak | { officers[], beneficial_owners[] } yang diekstrak dari registri. Struktur pejabat mengikuti KYBPersonResponseSerializer (kyb/serializers/kyb.py:533-645); struktur pemilik manfaat mengikuti KYBBeneficialOwnerResponseSerializer (kyb/serializers/kyb.py:648-788, yang menambahkan date_of_birth, country_of_birth, email, company_name, registration_number, entity_type, roles, ownership_min_shares, ownership_max_shares, child_beneficial_owners, effective_ownership_percent). Keduanya menyertakan pengayaan AML + KYC per pihak (aml_status, kyc_status, kyc_session_url, kyc_session_id, verification_workflow_type, verification_workflow_id, verification_workflow_label, verification_workflow_features, didit_internal_id, kyc_document_type, kyc_nationality, kyc_liveness_passed, kyc_verified_at, kyc_aml_categories, kyc_notification_sent_at). | { "officers": [...], "beneficial_owners": [...] } |
submitted | object | Tidak | { parties[] } - entri yang dikonfirmasi atau dikirim oleh bisnis melalui alur pihak kunci (baris BusinessParty dengan source=USER). Setiap pihak mengikuti BusinessPartySubmissionResponseSerializer (kyb/serializers/party.py:146-194): uuid, entity_type, source, name, first_name, last_name, company_name, registration_number, email, nationality, phone_number, date_of_birth, position, custom_fields, is_active, is_skipped, requires_verification, roles[] ({ role, ownership_percent, voting_percent }), kyc_session_id, kyc_session_status, kyc_session_url, kyc_session_deleted, kyb_sub_session_id, kyb_sub_session_status, kyb_sub_session_url, kyb_sub_session_deleted, verification_workflow_type, verification_workflow_id, verification_workflow_label, verification_workflow_features, didit_internal_id. kyc_session_deleted / kyb_sub_session_deleted menandai sesi turunan yang telah dihapus: statusnya tetap beku pada nilai terakhir, *_session_url yang sesuai dikembalikan sebagai null karena tautan tersebut tidak lagi dapat diakses, dan pihak tersebut berhenti memblokir induk (pemeriksaan turun menjadi In Review). Hapus penanda tersebut dengan PATCH /v3/session/{id}/kyb/parties/{party_uuid}/. | { "parties": [...] } |
ubo_kyc_summary | object | Ya | Jumlah di seluruh UBO aktif yang memiliki KYC tertaut: { total, approved, flagged, pending }. null jika tidak ada UBO aktif yang memiliki KYC tertaut. | { "total": 2, "approved": 2, "flagged": 0, "pending": 0 } |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
{
"status": "Approved",
"node_id": "first_key_people",
"registry": {
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"appointment_date": "2018-03-22",
"termination_date": null,
"is_active": true,
"address": "Calle Mayor 1, 28001 Madrid",
"aml_status": "Approved",
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" },
{ "feature": "FACE_MATCH", "status": "Approved" }
],
"didit_internal_id": "user-12345",
"kyc_document_type": "Passport",
"kyc_nationality": "ESP",
"kyc_liveness_passed": true,
"kyc_verified_at": "2026-05-17T10:10:11Z",
"kyc_aml_categories": [],
"kyc_notification_sent_at": "2026-05-15T08:00:00Z"
}
],
"beneficial_owners": []
},
"submitted": {
"parties": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"entity_type": "person",
"source": "USER",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"company_name": null,
"registration_number": null,
"email": "maria.garcia@example.com",
"nationality": "ESP",
"phone_number": null,
"date_of_birth": "1990-05-12",
"position": "Administrador único",
"custom_fields": {},
"is_active": true,
"is_skipped": false,
"requires_verification": true,
"roles": [
{ "role": "UBO", "ownership_percent": 75.0, "voting_percent": null }
],
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"kyc_session_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyb_sub_session_id": null,
"kyb_sub_session_status": null,
"kyb_sub_session_url": null,
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" }
],
"didit_internal_id": "user-12345"
}
]
},
"ubo_kyc_summary": { "total": 1, "approved": 1, "flagged": 0, "pending": 0 },
"warnings": []
}
Decision-level fields
Kolom-kolom ini berada di samping array fitur padaGET /v3/session/{sessionId}/decision/ dan di dalam decision pada webhook.
| Kolom | Tipe | Nullable | Deskripsi |
|---|---|---|---|
status_override | object | Ya | { overridden_at, automatic_status } setelah peninjau mengubah status secara manual; null jika status yang berlaku adalah status otomatis. |
decision_trace | object | Tidak | Cara status ditetapkan: status, decided_by (manual, automatic atau investigator), decided_at, automatic_status, terminal_node_id, actor, warning_counts dan status_warnings. |
linked_records | object | Ya | Ringkasan same_face, earlier_verifications dan networks; null jika tidak ada yang perlu ditampilkan. |
biometric_retention | object | Tidak | { jurisdictions, deletes_at }. deletes_at adalah tanggal data biometrik langsung dari sesi dihapus, dan null jika belum ada tanggal yang berlaku. |
database_validation_not_performed_reason | object | Ya | { code, message } yang menjelaskan mengapa Validasi Database yang dikonfigurasi tidak menghasilkan hasil. |
assignee, waiting_since, sla_due_at | object, datetime | Ya | Peninjau Console yang ditugaskan untuk menangani sesi dan waktu peninjauannya; penghitung waktu ini bernilai null kecuali sesi berstatus In Review. |
shared_from_session, shared_from_session_number | UUID, integer | Ya | Sesi sumber dari sesi yang diimpor. |
sandbox_scenario | string | Ya | Skenario yang digunakan saat sesi sandbox dibuat. |
fraud_check | object | Ya | Hasil Fraud Check API; null untuk setiap sesi lainnya. |
full_session_video, full_session_video_recorded_at | URL, datetime | Ya | Rekaman video sesi penuh dan waktu pembuatannya. Hanya dikembalikan jika organisasi Anda merekam video sesi penuh. |
Persetujuan biometrik
Setiap keputusan Verifikasi Pengguna dan webhook sesi memuat satu objekbiometric_consent (bukan array): apakah sesi memerlukan persetujuan biometrik eksplisit, alasannya, dan bukti atas jawabannya. Nilainya null jika sesi tidak pernah dievaluasi, misalnya alur kerja tanpa pengambilan wajah. Sumber: BiometricConsentDecisionSerializer (sessions/serializers/biometric_consent.py). Kapan langkah ini muncul dan arti setiap kasus dijelaskan di Persetujuan biometrik.
Kolom yang tidak memiliki nilai tercatat berisi null, tidak pernah string kosong.
| Kolom | Tipe | Deskripsi |
|---|---|---|
required | boolean | Apakah sesi wajib mengumpulkan persetujuan biometrik eksplisit. Tidak pernah kembali ke false. |
trigger | string (enum) | null | Alasan persetujuan diwajibkan, atau bagaimana persetujuan itu terpenuhi: declared_state, ip_state, ip_unknown, document_issuer, forced (mode aplikasi adalah Always), customer_collected (Anda mengirim biometric_consent saat membuat sesi). null selama tidak diwajibkan. |
status | string (enum) | not_required, pending (diwajibkan, belum diberikan), given, declined (penolakan telah dicatat; saat ini tidak ada layar Didit yang menawarkan penolakan). |
given_at | string (ISO 8601) | null | Kapan persetujuan diberikan. Untuk customer_collected, nilai given_at yang Anda kirim. |
declined_at | string (ISO 8601) | null | Kapan penolakan dicatat. |
text_version | string | null | ID versi teks persetujuan yang dijawab orang tersebut, atau yang Anda kirim. |
text_hash | string | null | SHA-256 (heksadesimal) dari teks persis yang ditampilkan, dalam bahasa tempat teks itu ditampilkan. |
locale | string | null | Bahasa tempat teks ditampilkan. |
policy_url | string | null | Kebijakan data biometrik yang ditautkan oleh langkah ini. |
step | string | null | Langkah alur kerja tempat sesi berada saat orang tersebut menjawab (misalnya LIVENESS). |
node_id | string | null | Node graf alur kerja tempat sesi berada saat orang tersebut menjawab. |
ip_address | string | null | IP tempat jawaban berasal. |
ip_country_code | string | null | Negara ISO 3166-1 alpha-2 dari IP jawaban. |
ip_state | string | null | Subdivisi ISO 3166-2 dari IP jawaban (misalnya US-IL). |
ip_city | string | null | Kota dari IP jawaban. |
user_agent | string | null | User agent dari permintaan jawaban. |
detected_ip_address | string | null | IP orang tersebut yang digunakan untuk evaluasi persyaratan terakhir. Dapat berbeda dari ip_address jika orang tersebut menjawab di perangkat lain. |
detected_country_code | string | null | Negara ISO 3166-1 alpha-2 dari IP yang terdeteksi. |
detected_state | string | null | Subdivisi ISO 3166-2 dari IP yang terdeteksi. |
detected_city | string | null | Kota dari IP yang terdeteksi. |
declared_state | string | null | Subdivisi ISO 3166-2 yang Anda nyatakan: user_state, atau negara bagian dari alamat AS di expected_details. |
document_state | string | null | Subdivisi ISO 3166-2 yang menerbitkan dokumen identitas, dibaca saat pengambilan ID. |
jurisdictions | array of string | Negara bagian AS (kode USPS, misalnya IL) yang hukum biometriknya mencakup orang tersebut. US jika bukti menempatkan orang tersebut di AS tetapi negara bagiannya tidak diketahui. Kosong jika tidak ada yang berlaku. |
retention_months | integer | null | Batas retensi biometrik terpendek, dalam bulan, di antara jurisdictions. null jika tidak ada yang berlaku. |
reason | string (enum) | null | BIOMETRIC_CONSENT_UNSUPPORTED_SDK: persetujuan diwajibkan dan SDK native di bawah 4.10.0, atau SDK yang tidak melaporkan versinya, mengambil wajah tanpa langkah ini; status tetap pending, atau given jika orang tersebut kemudian menyetujui di alur yang di-hosting. BIOMETRIC_CONSENT_DECLINED: penolakan telah dicatat (menggantikan alasan SDK). null selain itu, dan selalu null jika sesi tidak memerlukan persetujuan. |
decline_reason | string | null | BIOMETRIC_CONSENT_DECLINED ketika penolakan yang dicatat mengakhiri sesi, selain itu null. |
face_data_deleted_at | string (ISO 8601) | null | Kapan penolakan menghapus gambar wajah, video, dan templat wajah sesi. null kecuali penolakan telah dicatat. |
{
"required": true,
"trigger": "ip_state",
"status": "pending",
"given_at": null,
"declined_at": null,
"text_version": null,
"text_hash": null,
"locale": null,
"policy_url": null,
"step": null,
"node_id": null,
"ip_address": null,
"ip_country_code": null,
"ip_state": null,
"ip_city": null,
"user_agent": null,
"detected_ip_address": "203.0.113.42",
"detected_country_code": "US",
"detected_state": "US-IL",
"detected_city": "Chicago",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK",
"decline_reason": null,
"face_data_deleted_at": null
}
{
"required": true,
"trigger": "declared_state",
"status": "given",
"given_at": "2026-10-13T18:31:07.412000Z",
"declined_at": null,
"text_version": "bio-consent-2026-10-12",
"text_hash": "9b2f0c5e4d8a7f61c3e2b4a5d6f7081923a4b5c6d7e8f90a1b2c3d4e5f6a7b8c",
"locale": "en",
"policy_url": "https://didit.me/legal/biometric-data-policy",
"step": "LIVENESS",
"node_id": "feature_liveness_1",
"ip_address": "198.51.100.23",
"ip_country_code": "ES",
"ip_state": "ES-M",
"ip_city": "Madrid",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",
"detected_ip_address": "198.51.100.23",
"detected_country_code": "ES",
"detected_state": "ES-M",
"detected_city": "Madrid",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": null,
"decline_reason": null,
"face_data_deleted_at": null
}
Referensi enum status
Dua ruang nilai yang saling terkait menggunakan nama kolomstatus yang sama. Setiap objek laporan per fitur di halaman ini memakai enum tingkat fitur. status tingkat atas pada sesi induk memakai enum sesi yang lebih luas.
Status tingkat fitur
Dipakai oleh kolomstatus di setiap objek laporan. Sumber: common/config/choices.py:343-348 (FeatureStatusChoices).
| Nilai | Arti |
|---|---|
Not Finished | Fitur sudah disiapkan, tetapi pengguna belum menyelesaikannya. |
Approved | Fitur lulus semua pemeriksaan. |
Declined | Fitur gagal pada setidaknya satu pemeriksaan ketat (lihat warnings[] dengan log_type: "error"). |
In Review | Fitur memicu sinyal kegagalan lunak dan menunggu peninjauan manual (lihat warnings[] dengan log_type: "warning"). |
Resub Requested | Seorang peninjau meminta pengguna mengirim ulang fitur ini. |
Expired saat langkahnya melewati batas waktu (PhoneStatusChoices di common/config/choices.py:377-382, EmailStatusChoices di common/config/choices.py:434-439).
Status tingkat sesi
Dipakai olehstatus tingkat atas pada sesi induk. Sumber: common/config/choices.py:106-117 (StatusChoices).
| Nilai | Arti |
|---|---|
Not Started | Sesi sudah dibuat, tetapi pengguna belum memulainya. |
In Progress | Pengguna sudah memulai alur, tetapi hasilnya belum ditetapkan. |
Approved | Sesi lulus semua pemeriksaan. |
Declined | Sesi gagal pada setidaknya satu pemeriksaan ketat. |
In Review | Sesi menunggu peninjauan manual. |
Expired | Sesi kedaluwarsa sebelum selesai. |
Abandoned | Pengguna meninggalkan alur tanpa menyelesaikannya. |
Kyc Expired | Masa berlaku KYC telah berakhir (digunakan dalam alur verifikasi ulang). |
Resubmitted | Pengguna mengirim ulang setelah penolakan sebelumnya. Sesi ini digantikan oleh sesi yang lebih baru. |
Awaiting User | Sistem menunggu tindakan dari sisi pengguna (misalnya memasukkan OTP). |
Nilai terminal sesi adalah
Approved, Declined, In Review, Expired, Kyc Expired, dan Abandoned. Sesi dapat mencapai keputusan keseluruhannya sementara satu fitur individual tetap berstatus In Review.