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 dokumentasi 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 | Nullable | 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 sesuai dengan yang diterima 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 OCR. | "AB1234567" |
personal_number | string | Ya | Pengenal pribadi/nasional yang diekstrak 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 yang tidak terpotong (bingkai penuh). | "https://<media-host>/.../full_front.jpg?..." |
full_back_image | string (URL) | Ya | Hasil pengambilan bagian belakang yang tidak terpotong (bingkai penuh). | null |
front_image_camera_front | string (URL) | Ya | Gambar dari kamera depan yang diambil pada waktu yang sama dengan bagian depan dokumen. | null |
back_image_camera_front | string (URL) | Ya | Gambar dari kamera depan yang diambil pada waktu yang sama dengan bagian belakang dokumen. | null |
front_image_camera_front_face_match_score | float (0-100) | Ya | Tingkat kemiripan antara potret 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 | Bentuknya sama dengan front_image_quality_score. | null |
date_of_birth | string (YYYY-MM-DD) | Ya | Tanggal lahir yang diekstrak 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 dalam bahasa setempat. | "Spain" |
first_name | string | Ya | Nama depan yang diekstrak OCR. | "María" |
last_name | string | Ya | Nama belakang yang diekstrak 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 OCR. | "Calle Mayor 1, 28001 Madrid" |
formatted_address | string | Ya | Alamat yang di-geocode/diformat (jika dapat diurai). | "Calle Mayor 1, 28001 Madrid, Spain" |
parsed_address | object | Ya | Alamat terstruktur dan 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 OCR. | "Madrid" |
marital_status | string | Ya | Jika dapat diekstrak. | null |
nationality | string (ISO 3166-1 alpha-3) | Ya | Kewarganegaraan yang diekstrak OCR. | "ESP" |
extra_fields | object | Ya | Kolom khusus jenis dokumen yang tidak tercakup dalam skema kanonik (misalnya kategori SIM). | { "DL Class": "B" } |
mrz | object | Ya | Kolom MRZ yang sudah diurai jika ada (document_number, birth_date, expiry_date, surname, given_names, …). | { "document_number": "AB1234567", "surname": "GARCIA", "given_names": "MARIA" } |
extra_files | array berisi string (URL) | Tidak | URL presigned ke file tambahan apa pun yang diunggah. | [] |
matches | array berisi 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 bersifat presigned. | [] |
verification_method | string | No | 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 | No | Tingkat jaminan yang diturunkan dari verification_method: documentary, data_match atau cryptographic. | "data_match" |
wallet_provider | string | null | Ya | ID dompet dari katalog ketika sebuah dompet menghasilkan baris ini (mitid, bankid_se, itsme, …). null selain itu. | "mitid" |
fallback_from | object | null | Ya | Alasan metode non-dokumen mengakhiri langkah ID: { method, reason, action }. Diisi ketika pencarian data atau login dompet gagal: pada baris yang ditolak jika pengaturan negara bernilai decline (action: "decline"), dan pada verifikasi dokumen yang dilanjutkan pengguna ketika nilainya fallback_to_document (action: "fallback_to_document"). null jika tidak ada kegagalan non-dokumen sebelumnya yang tercatat. | { "method": "id_lookup", "reason": "no_match", "action": "decline" } |
id_lookup | object | null | Ya | Bukti sumber, hanya ada ketika verification_method bernilai id_lookup: source (sumber persis yang dikueri, yaitu registri pemerintah di sebagian besar negara, atau berkas biro kredit atau catatan tempat tinggal di sebagian negara), checked_at, attempts, max_attempts, outcome (match, partial_match, no_match, provider_error, format_rejected), comparison[] ({ field, label, provided, record, result }; field adalah salah satu dari identification_number, full_name, date_of_birth, address, dan result adalah match, partial atau no_match; rilis sebelumnya dapat menyertakan baris provider dengan error), source_errors[] (saat ini di staging: diagnostik sumber terpisah; pastikan peluncuran ke produksi), registry_portrait (URL yang telah ditandatangani sebelumnya, hanya untuk sumber yang mengembalikannya) dan face_match_score. | lihat di bawah |
wallet_verification | object | null | Ya | Bukti kredensial, hanya ada ketika 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 yang telah ditandatangani sebelumnya ketika 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 terlepas dari apakah peringatan terpicu. Setiap entri berisi: score (0-100, makin tinggi makin mungkin asli; nilai terendah, yaitu nilai yang digunakan untuk mengambil keputusan), front, back, decline_threshold, review_threshold, bucket (approve, review, decline, atau null). Ambang batas dan bucket disimpan saat evaluasi; ketiganya bernilai null ketika bukti evaluasi historis tidak tersedia, sementara skor yang tersimpan tetap terlihat. null ketika 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 | No | Lihat Objek peringatan. | [] |
region | string | Ya | Wilayah atau negara bagian dari negara penerbit, jika dokumen mengidentifikasinya. | "CA" |
extracted_data | object | Ya | Salinan data yang diekstraksi dari dokumen dan ditampilkan kepada pengguna untuk ditinjau, disimpan berdampingan dengan nilai yang dikonfirmasi agar Anda dapat membandingkannya. null ketika pengguna tidak diminta untuk meninjau. | |
barcodes | array objek | No | Data yang dibaca dari barcode dokumen, satu entri untuk setiap barcode dengan type, position, data, data_raw dan side. [] jika tidak ada. | [] |
{
"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 Japan My Number Card 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 yang telah ditandatangani sebelumnya ke gambar wajah yang diekstraksi dari chip. | "https://<media-host>/.../nfc_portrait.jpg?..." |
signature_image | string (URL) | Ya | URL yang telah ditandatangani sebelumnya ke gambar tanda tangan yang diekstraksi dari chip (jika disimpan di chip). | null |
chip_data | object | Ya | Data pribadi yang diurai dari Grup Data chip, diratakan (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); ditambah place_of_birth dan address (serta full_name / full_name_non_latin untuk nama non-Latin) ketika chip memuat DG11, kunci-kunci ini tidak ada jika chip tidak memuat DG11. null ketika langkah NFC dilewati. | { "document_number": "AB1234567", "name": "MARIA" } |
authenticity | object | Ya | { sod_integrity, dg_integrity }; null untuk pembacaan JPKI. sod_integrity memvalidasi bahwa tanda tangan Document Security Object (SOD) dapat ditelusuri hingga CSCA negara penerbit yang valid (dan DSC tidak dicabut maupun kedaluwarsa); dg_integrity memvalidasi bahwa hash setiap Grup Data cocok dengan SOD. Jika keduanya true, chip asli dan tidak diubah. | { "sod_integrity": true, "dg_integrity": true } |
certificate_summary | objek | Ya | Ringkasan sertifikat penandatangan dokumen (kyc/utils/epassport.py:338-348): issuer, subject, serial_number (bilangan bulat), not_valid_before, not_valid_after (YYYY-MM-DD HH:MM:SS), beserta 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 | Pengidentifikasi node alur kerja (V3). | "first_nfc" |
is_nfc_skipped | boolean | Tidak | true jika langkah NFC ini dilewati secara eksplisit alih-alih 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 (My Number Card Jepang). Untuk jpki, portrait_image, signature_image, chip_data, authenticity, dan certificate_summary bernilai null. Juga diisi pada langkah yang dilewati. | "icao" |
jpki | objek | Ya | Hasil 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. null untuk chip ICAO, untuk langkah yang dilewati, dan ketika langkah ditutup tanpa pembacaan kartu. 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 dijalankan ketika sesi desktop diizinkan dan pengguna berada di desktop. | "PASSIVE" |
score | float (0-100) | Ya | Skor keyakinan liveness, dibulatkan hingga 2 desimal. | 92.41 |
reference_image | string (URL) | Ya | URL presigned ke potongan wajah referensi pengguna. | "https://<media-host>/.../reference.jpg?..." |
video_url | string (URL) | Ya | URL presigned ke rekaman liveness jika pengambilan menyimpannya, untuk liveness aktif maupun pasif. null jika sesi tidak menyimpan rekaman. | "https://<media-host>/.../liveness.webm?..." |
age_estimation | float | Ya | Perkiraan usia (dalam tahun) dari wajah terbesar di 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 adalah session, imported, list_entry, atau retained_template. Kecocokan templat tersimpan 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 ke persentase). | 87.50 |
face_luminance | float (0-100) | Ya | Skor luminans wajah liveness pasif (dinormalisasi dari 0-255 ke persentase). | 54.12 |
node_id | string | null | Ya | Pengidentifikasi 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": []
}
null saat sesi tidak menyimpan rekaman; contoh di atas adalah sesi yang tidak menyimpan rekaman.
Pencocokan Wajah
Dikembalikan per 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 | 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 dalam alur berbasis potret (Autentikasi Biometrik, atau potret yang diberikan saat pembuatan sesi). null jika referensinya adalah potret dokumen dari sesi yang sama. | null |
source_image | string (URL) | Ya | URL presigned ke gambar sumber (referensi), biasanya potret dokumen, atau potret tersimpan dalam alur Autentikasi Biometrik. | "https://<media-host>/.../source.jpg?..." |
target_image | string (URL) | Ya | URL presigned ke gambar target (wajah pengguna secara langsung) yang diambil selama liveness. | "https://<media-host>/.../target.jpg?..." |
node_id | string | null | Ya | Pengidentifikasi node alur kerja (V3). | "first_face_match" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
face_coverage | objek | 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 memicu peringatan apa pun. Dikembalikan hanya oleh GET /v3/session/{sessionId}/decision/, tidak pernah 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 jamak di /v3/session/{sessionId}/decision/. Saat disimpan dengan save_api_request=true, sesi muncul 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 | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
request_id | string (UUID) | Tidak | ID sesi yang disimpan 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 dikembalikan dari permintaan. | null |
metadata | objek | Ya | metadata yang dikembalikan dari permintaan. | null |
created_at | string (ISO 8601) | Tidak | Waktu permintaan di sisi server. | "2026-06-12T01:04:42.763237+00:00" |
face_search:
| Kolom | Tipe | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Declined hanya jika peringatan FACE_IN_BLOCKLIST atau POSSIBLE_FACE_IN_BLOCKLIST terpicu; Approved dalam kondisi lain. Kecocokan duplikat saja tidak pernah menyebabkan status ditolak (apis/views/face_search.py:242-248). | "Approved" |
total_matches | integer | Tidak | Jumlah kecocokan yang dikembalikan di matches[] (0–5). | 1 |
matches | array objek kecocokan Pencarian Wajah | Tidak | Hingga 5 kecocokan di atas ambang kemiripan minimum, diurutkan berdasarkan kemiripan menurun (entri daftar blokir ditampilkan lebih dulu dengan search_type=blocklisted_or_approved). | […] |
user_image | objek | Tidak | Hasil deteksi untuk gambar yang dikirim: { entities: [{ bbox, confidence }], best_angle }, dengan satu entitas untuk setiap wajah yang terdeteksi. | { "entities": [{ "bbox": [40, 40, 120, 120], "confidence": 0.73 }], "best_angle": 0 } |
warnings | array objek | Tidak | Bentuk peringatan yang disederhanakan 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 saat runtime juga memuat feature, yang selalu "LIVENESS" (apis/views/face_search.py:332-341). | [] |
Objek kecocokan Pencarian Wajah
| Kolom | Tipe | Dapat null | 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 dipertahankan setelah sesi sumber dihapus). | "session" |
vendor_data | string | Ya | vendor_data dari sesi yang cocok, atau milik pengguna tertaut untuk kecocokan imported dan retained_template. | "user-12345" |
vendor_user_id | string (UUID) | Ya | Pengguna yang tertaut. null untuk kecocokan list_entry dan untuk sesi tanpa pengguna. | "2f7c1a9e-…" |
biometric_template_id | string (UUID) | Ya | Templat biometrik 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 | Waktu wajah yang cocok diambil, atau waktu 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 Status enum); 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 yang masuk 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 dalam huruf kapital untuk 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 | Dapat null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Status enum. | "Approved" |
total_hits | integer | Tidak | Jumlah hit skrining (selalu ada, default 0). | 2 |
entity_type | string (enum) | Ya | person atau company (EntityTypeChoices, common/config/choices.py:675-677). | "person" |
hits | array objek | Tidak | Satu entri untuk setiap hit. Kolom utama: id, caption, match (bool), target (bool | null, apakah entitas merupakan target langsung dari daftar), match_score (float 0-100, tingkat keyakinan identitas), risk_score (float 0-100, risiko entitas), score (float 0-1, tidak digunakan lagi), 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 diedit melalui endpoint pembaruan status hit AML, AMLHitStatusChoices). | […] |
score | float (0-100) | Ya | Skor skrining keseluruhan: skor 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 pemantauan berkelanjutan. | false |
next_ongoing_monitoring_bill_date | string (YYYY-MM-DD) | Ya | Dihitung sebagai last_aml_bill_date + 365 days ketika pemantauan berkelanjutan diaktifkan. Ini adalah tanggal penagihan, bukan tanggal skrining. | null |
last_ongoing_screening_at | string (ISO 8601) | Ya | Kapan pemantauan berkelanjutan terakhir menyelesaikan skrining ulang catatan ini, terlepas dari apakah hasilnya berubah. null jika belum pernah dipindai ulang; tidak pernah diisi secara retroaktif. | "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 | Pengidentifikasi 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 null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat enum Status. | "Approved" |
node_id | string | null | Ya | Pengidentifikasi 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 untuk setiap perangkat. | "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 atau provinsi yang diperoleh dari IP. | "Comunidad de Madrid" |
ip_city | string | Ya | Kota yang diperoleh dari IP. | "Madrid" |
latitude | float | Ya | Lintang yang diturunkan dari IP. | 40.4168 |
longitude | float | Ya | Bujur yang diturunkan dari IP. | -3.7038 |
ip_address | string | Ya | Alamat IP 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 ketika IP termasuk VPN, proxy, atau node keluar Tor. | false |
is_data_center | boolean | Ya | true ketika IP termasuk ASN hosting atau 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 ada. | { "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 diurai. | { "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 diproses dengan geocoding. | { "location": { "latitude": 40.4170, "longitude": -3.7040 }, "distance_from_ip": 1.1, "distance_from_id_document": 4.0 } |
matches | array of objects | Tidak | Kecocokan IP dan 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 dan 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 dijalankan dan 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 diterima. geolocation_attempts[] mencantumkan setiap percobaan dari setiap langkah, dari yang paling lama. Keduanya null untuk alur kerja tanpa langkah tersebut. Sumber: GeolocationDecisionSerializer.
| Kolom | Tipe | Dapat 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 mendapatkan 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 | Lokasi yang ditentukan dari 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, dan sinyal VPN, proxy, Tor, spoofing, serta 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 tersebut. | 3 |
consent | object | Ya | accepted_at, version, dan locale dari pemberitahuan yang disetujui pengguna. | |
warnings | array objek peringatan | Tidak | Peringatan LOCATION_* dari 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 null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
issuing_state | string (ISO 3166-1 alpha-3) | Ya | Kode negara dari penerbit dokumen. | "ESP" |
document_type | string | Tidak | Tipe tingkat tinggi dari PoaDocumentTypeChoices (common/config/choices.py:868-873): UTILITY_BILL, BANK_STATEMENT, GOVERNMENT_ISSUED_DOCUMENT, OTHER_POA_DOCUMENT. Kembali ke UNKNOWN, tidak pernah null. | "UTILITY_BILL" |
document_subtype | string | Tidak | Kode subtipe dari PoaDocumentSubtypeChoices (misalnya ELECTRICITY_BILL, WATER_BILL, ACCOUNT_STATEMENT). Kembali ke 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 yang sudah digeokode dan diformat. | "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 untuk 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 sudah 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 disimpan pada catatan. | { "bank_iban": null, "additional_names": [] } |
name_on_document | string | Ya | Nama seperti yang tertera pada POA. | "María García López" |
expected_details_address | string | Ya | Alamat yang diketik pelanggan saat pendaftaran, apa adanya. | "Calle Mayor 1, Madrid" |
expected_details_formatted_address | string | Ya | Alamat yang diharapkan, sudah digeokode. | "Calle Mayor 1, 28001 Madrid, Spain" |
expected_details_parsed_address | object | Ya | Alamat terstruktur yang diharapkan. | { "city": "Madrid", "postal_code": "28001" } |
name_match_score_expected_details | float (0-100) | Ya | Pencocokan fuzzy antara name_on_document dan nama yang diberikan saat pembuatan sesi. | 94.0 |
name_match_score_id_verification | float (0-100) | Ya | Pencocokan fuzzy antara name_on_document dan full_name dari ID yang terverifikasi. | 100.0 |
extra_files | array berisi string (URL) | Tidak | URL presigned ke file tambahan yang diunggah. | [] |
detected_codes | array berisi objek | Tidak | Kode QR dan barcode yang terdeteksi di setiap 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 ketika kode ditemukan tetapi tidak dapat didekode). Array kosong ketika deteksi tidak menemukan apa pun. | [{ "type": "QR_CODE", "page_number": 1, "parsed_payload": "https://issuer.example/inv/9981" }] |
node_id | string | null | Ya | Pengidentifikasi 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 untuk setiap percobaan verifikasi telepon. Muncul sebagaiphone_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC maupun KYB. Sumber: phone/serializers/phone.py:251-266 (PhoneV3Serializer, memperluas PhoneV2Serializer di phone/serializers/phone.py:103-248).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
phone_number_prefix | string | Tidak | Prefiks kode 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 dari nomor tersebut. | "ES" |
country_name | string | Ya | Nama negara yang telah dilokalkan. | "Spain" |
carrier | objek | Tidak | { name, type } di mana type adalah 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 telepon lainnya. | { "name": "Movistar", "type": "mobile" } |
is_disposable | boolean | Tidak | true ketika operator menandai nomor sebagai sementara atau sekali pakai. | false |
is_virtual | boolean | Tidak | true ketika carrier.type adalah 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 | Waktu ketika OTP berhasil dimasukkan. | "2026-05-17T10:14:02Z" |
lifecycle | array berisi objek | Tidak | Peristiwa dalam urutan kronologis: percobaan pengiriman, callback pengiriman, pemeriksaan kode, dan peristiwa status akhir. Setiap peristiwa berbentuk { type, timestamp, details, fee }. Jenis peristiwa berasal dari PhoneEventChoices. | […] |
matches | array berisi 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 adalah session atau list_entry. | [] |
node_id | string | null | Ya | Pengidentifikasi node alur kerja (V3). | "first_phone" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
phone_intelligence | objek | Ya | Sinyal intelijen telepon. Hanya ada ketika fitur tambahan intelijen dijalankan untuk nomor tersebut. | |
phone_social | objek | Ya | Jejak sosial dari nomor tersebut. Hanya ada ketika fitur tambahan 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 untuk setiap percobaan verifikasi email. Muncul sebagaiemail_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi KYC maupun KYB. Sumber: email_verification/serializers/email.py:149-164 (EmailV3Serializer, memperluas EmailV2Serializer di email_verification/serializers/email.py:38-146).
| Kolom | Tipe | Dapat bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
email | string | Tidak | Alamat email yang diberikan. | "maria.garcia@example.com" |
is_breached | boolean | Tidak | true ketika email muncul dalam kebocoran data yang diketahui. | false |
breaches | array berisi objek | Tidak | Detail per kebocoran ketika is_breached bernilai true: { name, domain, logo_path, breach_date, description, is_verified, data_classes, breach_emails_count }. | [] |
is_disposable | boolean | Tidak | true ketika alamat email menggunakan penyedia email sekali pakai. | false |
is_undeliverable | boolean | Tidak | true ketika pengujian pengiriman SMTP menunjukkan kotak masuk tidak menerima email. | false |
verification_attempts | integer | Tidak | Total percobaan pemeriksaan OTP. | 1 |
verified_at | string (ISO 8601) | Ya | Waktu ketika OTP berhasil dimasukkan. | "2026-05-17T10:15:22Z" |
lifecycle | array berisi objek | Tidak | Peristiwa dalam urutan kronologis: percobaan pengiriman, pemeriksaan kode, dan peristiwa status akhir. Setiap peristiwa berbentuk { type, timestamp, details, fee }. Jenis peristiwa berasal dari EmailEventChoices. | […] |
matches | array berisi objek | Tidak | Kecocokan email lintas sesi. Setiap item: { session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source }. source adalah session atau list_entry. | [] |
node_id | string | null | Ya | Pengidentifikasi node alur kerja (V3). | "first_email" |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
email_intelligence | objek | Ya | Sinyal intelijen email. Hanya ada ketika fitur tambahan intelijen dijalankan untuk alamat tersebut. | |
email_social | objek | Ya | Jejak sosial dari alamat tersebut. Hanya ada ketika fitur tambahan 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 untuk setiap 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 diperiksa. | "ESP" |
validation_type | string (enum) | Tidak | Cara hasilnya dikonfirmasi silang: one_by_one (hasil dari satu layanan), two_by_two (dua layanan atau lebih yang berbeda secara independen mencocokkan penuh nomor identifikasi), atau not_enabled (validator dilewati atau tidak ada penyedia yang merespons; no_match yang pasti tetap menghasilkan one_by_one). Tidak pernah null. Sumber: DatabaseValidationChoices (common/config/choices.py:1097-1100). | "one_by_one" |
screened_data | objek | Tidak | Data yang dikirim ke registri. Kolom file (selfie, cnh_qr_code_image, document_image) dibuat presigned saat dibaca. | { "document_number": "99999999R", "date_of_birth": "1990-05-12" } |
validations | array objek | Tidak | Satu entri untuk setiap layanan dalam katalog yang menghasilkan kecocokan. Setiap entri dapat berisi service_id, service_name, validation (objek putusan penyedia), outcome_code, outcome_detail, dan source_data (profil warga negara yang sudah dibersihkan: full_name, gender, date_of_birth, photo (URL presigned), signature (URL presigned), …). | […] |
errors | array objek | Ya | Error per layanan saat pencarian gagal; kunci dihilangkan sepenuhnya jika kosong. Setiap entri adalah objek error dari layanan upstream ditambah service_id yang menghasilkannya. | [] |
match_type | string (enum) | Ya | Putusan kecocokan agregat di seluruh layanan yang diperiksa: 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 | ID 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 | ID 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 diterbitkan. | ["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 jika kuesioner tidak memiliki percabangan (daftar datar). | true |
questionnaire_group_id | string (UUID) | Tidak | ID yang sama di seluruh versi 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 objek | Tidak | Bagian berurutan setelah penelusuran graf dan penyaringan visibilitas diterapkan. Setiap bagian berbentuk { title, description, items[] } (title dan description berasal dari SECTION_HEADER pembuka, sudah diterjemahkan sebelumnya). Setiap item adalah elemen formulir (uuid, value (node id), element_type, is_required, title, description, placeholder, choices, max_files, required_if, repeatable_config, ditambah kolom answer: null jika belum dijawab, dan dihilangkan pada item tata letak HEADING/PARAGRAPH/SEPARATOR). Jawaban file berisi { files: [<presigned URL>, …] }. | […] |
node_id | string | null | Ya | ID 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, serta 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 bukti dan validasi. | "0e6c2a8e-…" |
node_id | string | Tidak | ID 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 (bawaan), aes atau qes (Qualified, fitur tambahan). | "aes" |
format | string | Tidak | pdf untuk tanda tangan sederhana, pades untuk Advanced (AES) dan Qualified (QES). | "pades" |
profile | string | Ya | PAdES-B-LT setelah tanda tangan Advanced (AES) atau Qualified (QES) selesai ditandatangani, jika tidak maka null. | "PAdES-B-LT" |
signer | objek | Tidak | { name, capacity, company, role, roles, identity_session_id }. capacity adalah self (KYC) atau company (KYB). | { "name": "Jane Doe", "capacity": "self", … } |
identity_used | objek | Tidak | { session_id, kyc_id, verified, expected_name }: identitas terverifikasi yang menjadi dasar tanda tangan. Kosong untuk tanda tangan sederhana tanpa identitas terverifikasi. | { "verified": true, … } |
certificate | objek | Ya | { issuer, issued_to, serial, valid_from, valid_until }. null sampai ditandatangani, dan selalu null untuk tanda tangan sederhana. | { "serial": "5A3F9C21", … } |
confirmation | objek | Tidak | { channel, destination, confirmed_at, attempts }. destination disamarkan; attempts menghitung kode yang dimasukkan, termasuk yang benar. Tanda tangan Simple tidak memiliki kode, sehingga channel dan destination bernilai null. | { "channel": "email", … } |
timestamp | objek | Ya | { time, qualified, valid }. qualified selalu false untuk AES, di mana Didit yang menerbitkan timestamp; untuk QES, penyedia layanan kepercayaan yang memenuhi syarat yang menerbitkannya. null hingga ditandatangani, dan selalu null untuk tanda tangan Simple. | { "qualified": false, … } |
documents | array objek | Tidak | { id, uuid, title, language, source_revision, translation_id, 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 null untuk PDF. | […] |
documents[].language | string | Ya | Bahasa versi yang dipilih saat percobaan dimulai, atau null jika tidak diatur. Terjemahan yang cocok dan lengkap akan digunakan, jika tidak, dokumen asli. Setelah ditandatangani, ini adalah bahasa yang benar-benar ditandatangani. | "en" |
documents[].source_revision | string (UUID) | Tidak | Revisi sumber yang disalin ke dalam percobaan, termasuk saat terjemahan dipilih. Berbeda dari id dokumen penandatangan. | "22222222-2222-4222-8222-222222222222" |
documents[].translation_id | string (UUID) | Ya | Terjemahan yang dipilih, atau null untuk dokumen asli. Salinan dokumen dan pilihan bahasanya tetap tidak berubah setelah percobaan dimulai. | null |
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 | objek | 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 hingga diadopsi. | { "method": "drawn", … } |
electronic_signature_consent_at | string (ISO 8601) | Ya | Waktu ketika penandatangan menyetujui untuk menandatangani dokumen secara elektronik. Diatur saat dokumen mana pun memiliki kolom. | "2026-11-03T10:41:40Z" |
evidence_file | string | Ya | Path PDF bukti, setelah ditandatangani. | "/v3/session/…/evidence/?signature_id=…" |
warnings | array objek | Tidak | { code, node_id }, dengan code salah satu dari SIGNATURE_DECLINED, SIGNATURE_OTP_FAILED, SIGNATURE_NAME_MISMATCH, SIGNATURE_IDENTITY_NOT_VERIFIED, SIGNATURE_DOCUMENT_CHANGED. | [] |
validation | objek | Ya | { valid, checked_at, documents[] }: pemeriksaan kriptografis terakhir terhadap dokumen yang ditandatangani. null hingga 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 ketika penandatangan menolak. | null |
declined_action | string | Tidak | signature_declined_action dari langkah tersebut. | "REVIEW" |
signed_at | string (ISO 8601) | Ya | Waktu ketika dokumen ditandatangani. | "2026-11-03T10:42:24Z" |
expires_at | string (ISO 8601) | Tidak | Waktu ketika tautan penandatanganan berhenti berfungsi. | "2026-11-10T10:30:00Z" |
email_sent_at | string (ISO 8601) | Ya | Waktu ketika penandatangan dikirimi salinan yang sudah ditandatangani melalui email. | "2026-11-03T10:42:30Z" |
email_unavailable_reason | string | Ya | Alasan tidak ada salinan yang dikirim melalui email, ketika salinan diminta. | null |
ip_address | string | Ya | Alamat penandatangan saat 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 bawah envelope age_estimation: status, method, score, age_estimation, warnings. Respons ini juga menyertakan blok deteksi wajah user_image khusus mandiri, dan tidak menyertakan reference_image, video_url, matches, face_quality, atau face_luminance. Dalam sesi alur kerja tidak ada array terpisah: estimasi usia muncul sebagai liveness_checks[].age_estimation di GET /v3/session/{sessionId}/decision/. Sumber: apis/serializers/age_estimation.py:50-55 (AgeEstimationResponseSerializer), envelope dirakit di apis/views/age_estimation.py:138-174.
| Kolom | Tipe | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
request_id | string (UUID) | Tidak | ID sesi yang tersimpan saat save_api_request=true (bawaan); jika tidak, UUID korelasi sementara. | "3b1f1e2c-…" |
age_estimation | objek | Tidak | Envelope hasil: status (Approved / Declined), method (selalu PASSIVE), score (liveness 0-100, nullable), age_estimation (usia yang diprediksi dalam tahun dari wajah terbesar, nullable), user_image (entities[] dengan age per wajah, bbox [x_min, y_min, x_max, y_max], confidence, gender; ditambah best_angle), warnings[]. | { … } |
vendor_data | string | Ya | vendor_data yang dikembalikan dari permintaan. | null |
metadata | objek | Ya | metadata yang dikembalikan dari permintaan. | 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 yang digunakan dalam KYC standar, tetapi dikonfigurasi untuk membandingkan wajah yang diambil dengan gambar referensi pengguna yang sudah ada, bukan dengan potret dokumen hasil OCR yang baru. 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 | Nullable | 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 wajah yang terdaftar. source_image_session_id diatur ke session_id milik sesi itu sendiri. Wajah referensi (portrait_image yang dikirim, atau wajah tersimpan yang digunakan 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 | Nullable | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Lihat Enum status. | "Approved" |
node_id | string | null | Ya | ID node alur kerja (V3). | "first_registry" |
data_resolved | boolean | Tidak | true ketika pengambilan dari registri telah 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 saham yang dibuktikan registri: shareholders[] dan beneficial_owners[], setiap pemilik dengan identitas registrinya, porsi saham, dan shareholding kanonis. | { "shareholders": [...], "beneficial_owners": [] } |
warnings | array | Tidak | Lihat Objek peringatan. | [] |
Objek perusahaan
Darikyb/serializers/kyb.py:220-321 (KYBCompanyResponseSerializer).
| Kolom | Tipe | Nullable | Deskripsi |
|---|---|---|---|
uuid | string (UUID) | Tidak | ID internal perusahaan. |
node_id | string | null | Ya | ID node alur kerja. |
status | string | Tidak | Status fitur (FeatureStatusChoices). |
registry_status | string | Ya | Status perusahaan dari registri (active, dissolved, …). |
data_resolved | boolean | Tidak | Sama dengan definisi pada objek induk. |
company_name | string | Ya | Nama perusahaan terdaftar. |
registration_number | string | Ya | Nomor registrasi di registri. |
country_code | string (ISO 3166-1 alpha-2) | Ya | Negara pendirian. |
region | string | Ya | Subdivisi ISO 3166-2 jika 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 terdaftar. |
tax_number | string | Ya | ID pajak / VAT. |
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 bebas tentang kegiatan usaha. |
registered_capital | string | Ya | Modal terdaftar dalam bentuk string yang mudah dibaca. |
registered_capital_amount | string (decimal) | Ya | Jumlah modal terdaftar yang telah diparsing. |
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 atau wilayah. |
vat_number | string | Ya | Nomor VAT yang diajukan untuk perusahaan. |
vat_validation_status | string | Tidak | Hasil validasi nomor VAT, atau tax_number jika tidak ada: valid, invalid, format_valid, invalid_format, could_not_validate, atau not_applicable. Lihat Validasi VAT dan ID pajak. |
vat_validated_number | string | Ya | Nomor yang diperiksa, sebagaimana diketahui sumbernya. |
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 yang dinormalisasi oleh Didit (hasil kepemilikan, koreksi dari konsol, dan fakta registri yang tidak memiliki kolom sendiri). Bukan kontrak yang stabil. |
user_provided_data | object | Ya | Cuplikan 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 dari 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 per node yang mengumpulkan dokumen pendukung KYB. Muncul sebagaidocument_verifications[] di GET /v3/session/{sessionId}/decision/ untuk sesi bisnis, dengan satu entri per node_id dan items[] berisi daftar 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 bernilai null | Deskripsi | Contoh |
|---|---|---|---|---|
status | string | Tidak | Status agregat 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 Status enum. | "Approved" |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_kyb_documents" |
items | array 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 berisi 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 | Pengenal 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 presigned ke file yang sudah dibersihkan. |
original_filename | string | Ya | Nama file 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 | Hasil pemeriksaan silang terhadap registri atau dokumen lain. |
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 OCR jika tersedia. |
is_console_upload | boolean | Tidak | true jika dokumen diunggah oleh peninjau konsol (tidak dihitung 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 per node pihak kunci dalam alur kerja KYB. Muncul sebagaikey_people_checks[] di 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 Status enum. | "Approved" |
node_id | string | null | Ya | Pengenal node alur kerja (V3). | "first_key_people" |
registry | object | Tidak | { officers[], beneficial_owners[] } yang diekstrak dari registri. Pejabat mengikuti KYBPersonResponseSerializer (kyb/serializers/kyb.py:533-645); 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 diajukan 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 anak yang telah dihapus: statusnya tetap pada status terakhirnya, *_session_url yang sesuai dikembalikan sebagai null karena tautan tidak lagi dapat diakses, dan pihak tersebut berhenti memblokir sesi induk (pemeriksaan turun menjadi In Review). Hapus tanda ini dengan PATCH /v3/session/{id}/kyb/parties/{party_uuid}/. | { "parties": [...] } |
ubo_kyc_summary | object | Ya | Jumlah 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.