> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Skema Respons KYB: Referensi Payload Keputusan

> Payload keputusan KYB Didit: registri, pihak kunci, ringkasan KYC UBO, dokumen, dan skrining AML. Mulai dari $2.00 per pemeriksaan.

Halaman ini mendokumentasikan payload lengkap yang dikembalikan oleh [`GET /v3/session/{id}/decision/`](https://docs.didit.me/id/sessions-api/retrieve-session) untuk sesi Verifikasi Bisnis (KYB). Endpoint ini terpadu — ketika Anda meneruskan `session_id` bisnis, respons akan membawa `session_kind: "business"` dan array fitur khusus bisnis di bawah ini.

## Struktur tingkat atas

```json theme={null}
{
  "session_id": "bs_01H...",
  "session_kind": "business",
  "session_number": 89,
  "session_url": "https://verify.didit.me/...",
  "status": "Approved",
  "status_override": null,
  "workflow_id": "wf_kyb_standard",
  "features": ["KYB_REGISTRY", "AML", "KYB_DOCUMENTS", "KYB_KEY_PEOPLE"],
  "vendor_data": "biz-acme-001",
  "metadata": { },
  "callback": null,

  "registry_checks": [ ... ],
  "aml_screenings": [ ... ],
  "document_verifications": [ ... ],
  "key_people_checks": [ ... ],

  "phone_verifications": null,
  "email_verifications": null,
  "questionnaire_responses": null,
  "ip_analyses": null,

  "reviews": [ ],
  "decision_trace": { ... },
  "linked_records": null,
  "contact_details": { ... },
  "expected_details": null,
  "created_at": "...",
  "expires_at": "..."
}
```

Semua array fitur bersifat multi-instance — setiap item merepresentasikan satu node dalam alur kerja graf. Null berarti fitur tersebut tidak ada dalam alur kerja sesi ini.

## Kolom tingkat atas bersama

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `session_id` | UUID | Pengidentifikasi sesi unik |
| `session_kind` | enum | Selalu `"business"` untuk sesi KYB |
| `session_number` | int | Nomor urut dalam aplikasi |
| `session_url` | URL | Tautan verifikasi yang di-hosting |
| `status` | enum | Status sesi keseluruhan (lihat [status](https://docs.didit.me/id/business-verification/statuses.md)) |
| `status_override` | objek atau null | `{ overridden_at, automatic_status }` ketika peninjau menetapkan `status` secara manual berlawanan dengan apa yang akan ditetapkan platform (misalnya menyetujui bisnis sementara verifikasi pihak kunci yang tertaut ditolak). `null` ketika statusnya adalah status otomatis. Gunakan ini untuk membedakan persetujuan manual dari persetujuan otomatis |
| `decision_trace` | objek | Cara keputusan dicapai: `status`, `decided_by` (`manual`, `automatic`, atau `investigator`), `decided_at`, `automatic_status`, `terminal_node_id`, `actor`, `warning_counts`, dan `status_warnings` (peringatan yang menentukan status) |
| `linked_records` | objek atau null | Ringkasan rekaman lain yang tertaut ke sesi. `null` jika tidak ada yang perlu ditampilkan |
| `workflow_id` | UUID | Alur kerja yang menjalankan sesi ini |
| `features` | array string | Pengidentifikasi fitur yang dijalankan oleh alur kerja (mis. `KYB_REGISTRY`, `AML`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`, `PHONE`, `EMAIL`) |
| `vendor_data` | string | Pengidentifikasi Anda untuk bisnis tersebut |
| `metadata` | objek | JSON bentuk bebas yang Anda lampirkan saat pembuatan sesi |
| `callback` | URL atau null | URL pengalihan pasca-verifikasi opsional |
| `contact_details` | objek atau null | `{ email, email_lang, send_notification_emails, phone }` — ditetapkan ketika alur menyertakan notifikasi email/telepon |
| `expected_details` | objek atau null | Payload data yang diharapkan untuk bisnis yang Anda teruskan saat pembuatan: `company_name`, `registry_country` (`XX` atau `XX-YY` dengan negara bagian untuk registri tingkat negara bagian, mis. `US-CA`), `registration_number` |
| `reviews` | array | Catatan peninjau terbaru tentang sesi |
| `created_at`, `expires_at` | stempel waktu ISO | — |

## `registry_checks[]`

Setiap item adalah satu pemeriksaan registri perusahaan (biasanya satu per sesi; beberapa dalam alur kerja graf dengan KYB UBO korporat rekursif).

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_registry",
  "data_resolved": true,
  "company": { ...see below... },
  "ownership_structure": { },
  "warnings": []
}
```

| Kolom | Deskripsi |
| - | - |
| `status` | Status siklus hidup fitur (`Approved`, `Declined`, `In Review`, `Not Finished`, `Resub Requested`) |
| `node_id` | Pengidentifikasi node graf untuk pemeriksaan ini |
| `data_resolved` | `true` ketika data registri telah selesai dimuat atau pengguna memberikan data secara manual |
| `company` | Payload registri lengkap — lihat **blok `company`** di bawah |
| `ownership_structure` | Tabel kapitalisasi (cap table) yang dibuktikan registri saat tingkat kepemilikan dikirimkan: `shareholders[]` dan `beneficial_owners[]`, masing-masing dengan identitas registri dan kepemilikan saham yang sama dengan `company.beneficial_owners[]` (`name`, `entity_type`, `roles`, `ownership_min_shares` / `ownership_max_shares`, ...) beserta `shareholding` kanonikalnya. Bernilai `null` jika registri tidak membuktikan kepemilikan apa pun. Baca `company.beneficial_owners` dan `company.ownership` untuk rekaman saat ini |
| `warnings` | Peringatan / entri log terstruktur yang berlaku untuk pemeriksaan registri ini. Lihat [Peringatan Verifikasi Bisnis](https://docs.didit.me/id/business-verification/warnings.md). |

### Blok `company`

Objek perusahaan yang bersarang adalah tampilan lengkap dari entitas hukum sebagaimana diperoleh dari registri (dan secara opsional diedit oleh pengguna):

```json theme={null}
{
  "uuid": "...",
  "node_id": "feature_kyb_registry",
  "status": "Approved",
  "registry_status": "active",
  "data_resolved": true,
  "company_name": "Acme Corporation Limited",
  "registration_number": "12345678",
  "country_code": "GBR",
  "company_type": "Private Limited",
  "incorporation_date": "2010-05-14",
  "registered_address": "1 Main Street, London EC1A 1AA, United Kingdom",
  "tax_number": "SAMPLE-TAX-12345",
  "risk_level": null,
  "verification_status": "verified",
  "is_from_registry": true,
  "fetch_status": "resolved",
  "alternative_names": "Acme Ltd",
  "nature_of_business": "Software publishing",
  "registered_capital": "100000 GBP",
  "website": "https://acme.example",
  "email": "alex.sample@example.com",
  "phone": "+15550101000",
  "legal_entity_identifier": "529900XXXXXXXXXXXXX",
  "location_of_registration": "London",
  "vat_number": "GB980780684",
  "vat_validation_status": "format_valid",
  "vat_validated_number": "GB980780684",
  "vat_validation_source": "format_rules",
  "vat_validated_name": null,
  "vat_validated_address": null,
  "vat_checked_at": "2026-04-16T10:10:00Z",
  "financial_summary": { },
  "officers": [ ... ],
  "beneficial_owners": [ ... ],
  "addresses": [
    {
      "type": "registered",
      "address": "1 Main Street, London EC1A 1AA, United Kingdom",
      "street": "1 Main Street",
      "city": "London",
      "postal_code": "EC1A 1AA",
      "region": null,
      "country_code": "GB",
      "description": null
    }
  ],
  "industries": [
    { "code": "58290", "description": "Other software publishing", "scheme": "UK SIC 2007", "is_primary": true }
  ],
  "accounts": { ... },
  "ownership": {
    "status": "delivered",
    "tier_requested": "ubo",
    "tier_delivered": "ubo",
    "unavailable_reason": null,
    "direct_ownership_complete": true,
    "unresolved": []
  },
  "registry_tier": "ubo",
  "registry_tier_delivered": "ubo",
  "registry_ownership_status": "delivered",
  "registry_monitoring": null,
  "registry_data": { },
  "user_provided_data": { },
  "confirmed_by_user_at": "2026-04-16T10:10:00Z",
  "last_console_edit_at": null,
  "is_editable": false
}
```

| Kolom | Deskripsi |
| - | - |
| `registry_status` | Status yang dilaporkan penyedia (`active`, `dissolved`, `struck_off`, `inactive`, dll.). Lihat [status](https://docs.didit.me/id/business-verification/statuses.md#status-registri-dari-penyedia) |
| `is_from_registry` | `true` ketika data berasal dari registri resmi; `false` untuk entri manual |
| `fetch_status` | `pending`, `resolved`, atau `failed` — status pencarian registri |
| `verification_status` | `verified`, `failed`, atau `unknown` |
| `risk_level` | Nilai opsional yang diteruskan dari sumber registri. Biasanya `null`: Didit tidak menghitung tingkat risiko, jadi gunakan `warnings[]` dan `status` sesi untuk memutuskan |
| `registry_monitoring` | Pemantau registri terbaru untuk perusahaan tersebut, atau `null` jika tidak ada. Hanya terisi setelah [pemantauan registri](https://docs.didit.me/id/business-verification/ownership.md#pemantauan-pemegang-saham-dan-ubo) tersedia. Kolom: `uuid`, `status`, `unavailable_reason`, `enrolled_at`, `cancelled_at`, `last_bill_date`, `next_bill_date`, `last_event_at`, `events_count`, `watched_fields` |
| `is_editable` | `true` selama data yang bersumber dari registri masih dapat diedit oleh pengguna akhir |
| `registry_data` | Detail registri Didit yang dinormalisasi: hasil kepemilikan (`ownership_error`, `section_errors`, `ubo_resolution`), koreksi yang dilakukan dengan [update-data](https://docs.didit.me/id/sessions-api/update-data.md), dan fakta registri yang tidak memiliki kolom tersendiri. Kolom ini tidak pernah memuat rekaman milik sumber registri itu sendiri. Kuncinya bervariasi bergantung pada perusahaan dan bukan merupakan kontrak yang stabil: baca kolom kanonikal sebagai gantinya |
| `user_provided_data` | Kolom yang dimasukkan atau diedit oleh pengguna akhir (berguna untuk membandingkan perbedaannya dengan nilai registri untuk keperluan audit) |
| `confirmed_by_user_at` | Stempel waktu saat pengguna akhir mengonfirmasi / mengedit data registri |
| `vat_number` | Nomor PPN sebagaimana dikirimkan, jika dikumpulkan |
| `vat_validation_status` | Hasil validasi nomor PPN, atau `tax_number` jika tidak ada nomor PPN: `valid`, `invalid`, `format_valid`, `invalid_format`, `could_not_validate`, atau `not_applicable`. Lihat [Validasi PPN dan ID pajak](https://docs.didit.me/id/business-verification/company-data.md#validasi-vat-dan-id-pajak) |
| `vat_validated_number` / `vat_validation_source` | Nomor yang diperiksa, sebagaimana diketahui oleh sumber, dan sumber yang menentukan statusnya (registri resmi, atau `format_rules`) |
| `vat_validated_name` / `vat_validated_address` | Nama dan alamat yang terdaftar pada sumber, jika sumber mengungkapkannya |
| `vat_checked_at` | Stempel waktu pemeriksaan; `null` jika tidak ada pemeriksaan yang dijalankan |
| `officers[]` | Pejabat dengan pengayaan KYC tertanam (lihat di bawah) |
| `beneficial_owners[]` | UBO dengan pengayaan KYC tertanam (lihat di bawah) |
| `addresses[]` | Setiap alamat yang dinyatakan oleh registri, dalam format alamat kanonikal di bawah. Bernilai `null` jika tidak menyatakan apa pun |
| `industries[]` | Aktivitas yang diklasifikasikan oleh registri untuk perusahaan tersebut, dalam format industri kanonikal di bawah. Bernilai `null` jika tidak menyatakan apa pun |
| `accounts` | Tanggal pengajuan korporat saat dilaporkan: `last_annual_return_date` dan `last_agm_date`. Nilai ini mendeskripsikan pengajuan dan rapat, bukan laporan keuangan |
| `ownership` | Hasil dari tingkat kepemilikan (Pemegang Saham / UBO), dalam format kanonikal di bawah |
| `registry_tier` / `registry_tier_delivered` / `registry_ownership_status` | Tingkat yang dipesan, tingkat yang dikirimkan (dan ditagih), serta hasil kepemilikan. Nilai yang sama juga berada di `ownership` |

### Satu format untuk setiap negara dan sumber registri

Didit membaca registri perusahaan di berbagai negara melalui beberapa sumber registri.
Setiap sumber memublikasikan tata letaknya sendiri, tetapi blok `company` selalu memiliki format yang sama: kunci di bawah ini selalu ada, dengan tipe data yang sama, dari negara dan sumber mana pun perusahaan tersebut berasal.
Fakta yang tidak dipublikasikan oleh registri bernilai `null`; Anda tidak perlu membuat percabangan logika berdasarkan negara atau mem-parsing `registry_data`.
Format yang sama dikembalikan oleh [keputusan](https://docs.didit.me/id/sessions-api/retrieve-session.md), endpoint mandiri [registri KYB](https://docs.didit.me/id/standalone-apis/kyb-registry-ubo.md), dan alur verifikasi yang di-hosting.

**Alamat** (setiap item dari `addresses`)

| Kolom | Deskripsi |
| - | - |
| `type` | Huruf kecil. `registered` untuk kantor terdaftar; jenis lain sesuai penamaan registri (misalnya `postal`, `office`). Bernilai `null` jika registri tidak menyatakan jenis alamat tersebut |
| `address` | Alamat lengkap dalam satu baris. Selalu ada |
| `street`, `city`, `postal_code`, `region` | Bagian-bagian alamat, jika registri memublikasikannya |
| `country_code` | ISO 3166-1 alpha-2 |
| `description` | Label dari registri itu sendiri untuk alamat tersebut, jika ada |

**Industri** (setiap item dari `industries`)

| Kolom | Deskripsi |
| - | - |
| `code` | Kode aktivitas sebagaimana dicantumkan oleh registri |
| `description` | Label aktivitas, jika registri memublikasikannya |
| `scheme` | Sistem klasifikasi, satu nama per sistem terlepas dari sumber mana yang melaporkannya (`UK SIC 2007`, `US SIC`, `NACE Rev. 2`, `NACE Rev. 2.1`, `NAF Rev. 2`, `CNAE`, `SBI`, `NOGA 2008`, `CAE Rev. 4`, `Canada SIC 1977`). Sistem nasional lainnya mempertahankan nama dari registri itu sendiri; bernilai `null` jika registri tidak mencantumkan namanya |
| `is_primary` | `true` untuk aktivitas utama. Tepat satu entri yang merupakan aktivitas utama |

Ketika registri mencantumkan aktivitas tetapi tidak ada deskripsi bisnis, `nature_of_business` diisi dari label aktivitas.
Detail kontak dan nama alternatif diisi saat tersedia, sementara hasil edit eksplisit dari pengguna atau peninjau selalu diutamakan.

**Kepemilikan** (`ownership`)

| Kolom | Deskripsi |
| - | - |
| `status` | `delivered`; `not_held` ketika registri kepemilikan merespons dan tidak mencantumkan perusahaan ini sama sekali, sehingga tidak ada catatan kepemilikan yang dapat diberikan; `unavailable` ketika data tidak diberikan karena alasan lain (catatan yang tidak menyebutkan pemilik, bagian kepemilikan tidak dikembalikan, atau vendor tidak dapat dimintai data); `pending` saat registri masih mengambil bagian kepemilikan; `not_requested` pada paket Basic |
| `tier_requested` / `tier_delivered` | `basic`, `shareholders`, atau `ubo`. Permintaan UBO yang hanya dijawab dengan pemegang saham langsung akan diberikan, dan ditagih, sebagai `shareholders` |
| `unavailable_reason` | Alasan mengapa tingkat kepemilikan yang diminta tidak diberikan: `no_owners_on_record`, `no_natural_person_owner`, `ownership_section_unavailable`, `company_not_found`, `ambiguous_company_match`, `missing_registration_number`, `entity_type_not_covered`, `provider_unavailable`, atau `other`. `null` ketika kepemilikan berhasil diberikan |
| `direct_ownership_complete` | `true` ketika kepemilikan saham yang dinyatakan oleh pemegang saham langsung berjumlah total 100% (dalam batas pembulatan satu poin persentase), `false` jika tidak, `null` ketika kepemilikan tidak diberikan atau kepemilikan saham tidak dicantumkan |
| `unresolved[]` | Bagian dari rantai kepemilikan yang tidak dapat diselesaikan oleh registri, sebagai `{ reason, section }` (misalnya `no_group_structure_on_record` untuk `group_structure`: pemilik langsung diketahui, grup perusahaan di atasnya tidak tercatat) |

**Detail registri** (`registry_data`)

Detail milik Didit sendiri mengenai pemeriksaan registri, bukan catatan sumber registri.
Setiap kunci bersifat opsional dan hanya ada ketika perusahaan memiliki nilai untuk kunci tersebut, dan kunci baru dapat ditambahkan: gunakan kolom kanonik di atas untuk informasi apa pun yang dicakup oleh kolom-kolom tersebut.

| Kolom | Deskripsi |
| - | - |
| Fakta registri (`legal_address`, `registered_address`, `registration_date`, `dissolution_date`, `registry_status`, `verification_status`, `company_type`, dan kolom lainnya yang diterima oleh [update-data](https://docs.didit.me/id/sessions-api/update-data.md)) | String. Koreksi yang dilakukan dengan update-data, dan fakta yang dinyatakan registri yang tidak memiliki kolom tersendiri (`registration_date`, `dissolution_date`) |
| `ownership_error` | Alasan mengapa tingkat kepemilikan yang diminta tidak diberikan, menggunakan kode yang sama dengan `ownership.unavailable_reason` (`no_owners_on_record`, `ownership_section_unavailable`, `company_not_found`, `provider_unavailable`, `other`, ...) |
| `section_errors` | Bagian yang tidak dikembalikan oleh registri, diberi kunci berdasarkan bagian (`officers`, `shareholders`, `group_structure`), masing-masing berupa `{ status_code }` |
| `ubo_resolution` | Cara tingkat UBO menelusuri rantai kepemilikan: `parent_chain[]` dan `subsidiaries[]` sebagai `{ name, country_code, registration_number }`, serta `unresolved[]` sebagai `{ reason, section }` |
| `lite_enrichment` | Kolom Lite kosong yang diisi oleh sumber registri lain di negara tersebut: `{ fields[], people_added }` |
| `registry_metadata`, `registry_sources[]`, `previous_names[]`, `parent_companies[]`, `documents_available` | Hanya untuk catatan registri lama: kolom milik registri itu sendiri, registri resmi yang dibaca (`{ name, source_type }`, hanya registri resmi yang disebutkan), nama-nama sebelumnya, nama perusahaan induk, dan jumlah pengajuan yang tersedia |

### Struktur item pejabat (di dalam `company.officers`)

```json theme={null}
{
  "uuid": "...",
  "name": "Jane Doe",
  "first_name": "Jane",
  "last_name": "Doe",
  "date_of_birth": null,
  "date_of_birth_year": 1983,
  "date_of_birth_month": 2,
  "address": "1 Example Street, London",
  "appointment_date": "2024-07-01",
  "termination_date": null,
  "designation": "Director",
  "role": "director",
  "nationality": "USA",
  "is_active": true,
  "kyc_status": "Approved",
  "kyc_session_url": "https://verify.didit.me/..."
}
```

`date_of_birth` hanya diisi saat registri menyediakan tanggal lengkap.
Jika registri hanya melaporkan tahun atau bulan dan tahun, gunakan `date_of_birth_year` dan `date_of_birth_month`; tanggal (hari) yang hilang tidak akan pernah disimpulkan.
Nama, detail kelahiran, alamat, dan tanggal pengangkatan tetap tersedia di daftar pejabat perusahaan maupun daftar pihak kunci di registri.

### Struktur item pemilik manfaat (di dalam `company.beneficial_owners`)

```json theme={null}
{
  "uuid": "...",
  "name": "John Doe",
  "first_name": "John",
  "last_name": "Doe",
  "entity_type": "person",
  "date_of_birth": null,
  "country_of_birth": null,
  "email": null,
  "company_name": null,
  "registration_number": null,
  "nationality": null,
  "designation": null,
  "appointment_date": null,
  "voting_min_shares": null,
  "voting_max_shares": null,
  "roles": ["ubo"],
  "ownership_min_shares": "40",
  "ownership_max_shares": "40",
  "is_active": true,
  "kyc_status": "Pending",
  "kyc_session_url": "https://verify.didit.me/...",
  "effective_ownership_percent": 40.0,
  "shareholding": {
    "share_class": "Ordinary",
    "number_of_shares": 40,
    "currency": "GBP",
    "nominal_value": 1,
    "total_value": null,
    "percentage": 40
  }
}
```

`kyc_status` menggunakan proyeksi yang aman untuk B2C: `Approved`, `Declined`, atau `Pending` (status sesi lengkap diringkas menjadi `Pending` hingga KYC selesai).

`shareholding` menyatakan apa yang dimiliki oleh pemilik, dalam format yang sama untuk setiap negara dan sumber registri: `share_class`, `number_of_shares`, `currency`, `nominal_value`, `total_value`, dan `percentage` (persentase kepemilikan yang tepat, hingga empat angka desimal).
Nilainya `null` ketika registri tidak menyatakan adanya kepemilikan.
Rentang persentase, seperti 25-50% pada PSC Inggris, bukanlah kepemilikan pasti: `percentage` bernilai `null` dan rentang persentase tetap berada di `ownership_min_shares` / `ownership_max_shares`.
Pemegang saham dan UBO sama-sama tercantum di `beneficial_owners`; `roles` yang membedakan keduanya.

## `key_people_checks[]`

Ini adalah **pemeriksaan agregat** atas semua pejabat dan UBO untuk sesi tersebut. Bagian ini menyediakan dua wadah sehingga konsol dapat menampilkan data yang "diekstraksi dari registri" berdampingan dengan data yang "dikirimkan oleh bisnis", ditambah ringkasan KYC UBO tingkat tinggi.

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_key_people",
  "registry": {
    "officers": [ ...registry-derived officers... ],
    "beneficial_owners": [ ...registry-derived UBOs... ]
  },
  "submitted": {
    "parties": [ ...user-submitted key-people records... ]
  },
  "ubo_kyc_summary": {
    "total": 2,
    "approved": 1,
    "flagged": 0,
    "pending": 1
  },
  "warnings": []
}
```

* **`registry.officers` / `registry.beneficial_owners`** — pihak-pihak yang diekstraksi dari pemeriksaan registri.
* **`submitted.parties`** — pihak-pihak yang ditambahkan secara eksplisit oleh admin bisnis selama alur Pihak Kunci (catatan dengan `source = "USER"`).

### `registry.officers[]` / `registry.beneficial_owners[]`

Fakta registri cocok dengan `company.officers` / `company.beneficial_owners` di atas.
Pihak Kunci juga mencakup status AML dan keterkaitan verifikasi terperinci, seperti `kyc_session_id` dan kolom alur kerja verifikasi.
Daftar perusahaan tetap mempertahankan status KYC sederhana dan URL verifikasi yang sudah ada.

### `submitted.parties[]`

Pihak yang dikirimkan pengguna memuat keterkaitan KYC atau KYB turunan mereka:

```json theme={null}
{
  "uuid": "...",
  "entity_type": "person",
  "name": "Alice Chen",
  "first_name": "John",
  "last_name": "Doe",
  "email": "alex.sample@example.com",
  "role": "ubo",
  "ownership_percent": 35.0,
  "nationality": "USA",
  "position": "CEO",
  "date_of_birth": "1990-01-01",
  "phone_number": "+34612345678",
  "source": "USER",
  "requires_verification": true,
  "is_skipped": false,
  "kyc_session_id": "sess-xyz...",
  "kyc_session_status": "Not Started",
  "kyc_session_url": "https://verify.didit.me/...",
  "kyc_session_deleted": false,
  "custom_fields": { }
}
```

Pihak korporat (`entity_type: "company"`) juga memuat `company_name`, `registration_number`, dan `kyb_sub_session_id` / `kyb_sub_session_status` / `kyb_sub_session_deleted` saat KYB bertingkat diaktifkan untuk UBO korporat.

`kyc_session_deleted` (dan padanan korporatnya `kyb_sub_session_deleted`) bernilai `true` saat sesi turunan pihak tersebut dihapus. Sesi turunan yang dihapus mempertahankan status apa pun yang dimilikinya pada saat penghapusan dan tidak akan pernah selesai, jadi gunakan tanda ini, bukan statusnya: `*_session_url` yang cocok dikembalikan sebagai `null` karena tautan tidak lagi dapat diakses, dan pemeriksaan Pihak Kunci turun menjadi `In Review` alih-alih menunggu tanpa batas waktu. Menghapus sesi turunan tidak pernah dihitung sebagai lolos. Berikan pengecualian pada pihak tersebut dengan [`PATCH /v3/session/{id}/kyb/parties/{party_uuid}/`](https://docs.didit.me/id/sessions-api/update-data#lewati-pihak-kunci) untuk memungkinkan KYB diselesaikan.

### `ubo_kyc_summary`

Kemajuan KYC UBO agregat — berguna untuk kartu dasbor tunggal:

| Kolom | Arti |
| - | - |
| `total` | Jumlah UBO aktif yang memiliki sesi KYC tertaut |
| `approved` | UBO yang sesi KYC-nya berstatus `Approved` |
| `flagged` | UBO yang sesi KYC-nya berstatus `Declined` atau `In Review` |
| `pending` | Semua pihak lainnya (belum selesai) |

Mengembalikan `null` jika tidak ada UBO yang memiliki sesi KYC tertaut.

## `document_verifications[]`

Dokumen yang dikelompokkan berdasarkan node:

```json theme={null}
{
  "status": "Approved",
  "node_id": "feature_kyb_documents",
  "items": [
    {
      "uuid": "...",
      "document_type": "LEGAL_PRESENCE",
      "document_subtype": "CERTIFICATE_OF_INCORPORATION",
      "document_group": "LEGAL_PRESENCE",
      "status": "Approved",
      "file_url": "https://didit-storage.s3...",
      "document_metadata": {
        "file_size": 246810,
        "content_type": "application/pdf",
        "creation_date": "2024-05-15",
        "modified_date": "2024-05-15",
        "overlay_manipulation": null
      },
      "ocr_data": {
        "company_name": "Acme Corporation Limited",
        "registration_number": "12345678",
        "incorporation_date": "2010-05-14"
      }
    }
  ],
  "groups": {
    "LEGAL_PRESENCE": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 },
    "OWNERSHIP_STRUCTURE": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
  },
  "required_groups": ["LEGAL_PRESENCE", "OWNERSHIP_STRUCTURE"],
  "warnings": []
}
```

| Kolom | Deskripsi |
| - | - |
| `items[]` | Baris dokumen individual — masing-masing memiliki `status`, `document_type` dan `document_group` (grup), `document_subtype`, `file_url` (bertanda tangan), `document_metadata`, serta ekstrak OCR-nya sendiri |
| `groups` | Penghitung kemajuan per grup, menggunakan nilai grup sebagai kuncinya (`LEGAL_PRESENCE`, `COMPANY_DETAILS`, `OWNERSHIP_STRUCTURE`, `REPRESENTATIVES_AUTHORIZATION`, ditambah `OTHER` untuk dokumen yang tidak diklasifikasikan). Setiap grup memuat `total`, `approved`, `pending`, `declined`, `in_review`, `other`, dan `missing`. Lihat [grup dokumen KYB](https://docs.didit.me/id/business-verification/documents.md#grup-dokumen) |
| `required_groups` | Grup yang ditandai sebagai wajib oleh alur kerja Anda; jadikan pemenuhan semua grup ini sebagai syarat persetujuan sesi |

### Metadata dokumen korporat

Untuk dokumen korporat PDF, `items[].document_metadata.overlay_manipulation` dapat menyertakan bukti forensik untuk dugaan pengeditan teks overlay. Jika ada, bagian ini mencakup:

| Kolom | Deskripsi |
| - | - |
| `analysis_incomplete` | Ada dan bernilai `true` hanya jika file tidak dapat diperiksa secara menyeluruh. Bagian yang telah diperiksa tetap mempertahankan temuan yang berhasil didapat, dan dokumen memicu `KYB_DOCUMENT_UNPROVEN_TEXT_REPLACEMENT`. |
| `detected` | Apakah bukti manipulasi teks overlay terdeteksi |
| `analyzed` | Apakah PDF dapat dianalisis |
| `signals` | Sinyal forensik yang terpicu, seperti `duplicate_font_subset` atau `glyph_fragmentation` |
| `manipulated_regions` | Persegi panjang koordinat halaman PDF di sekitar teks yang diduga diedit: `page`, `x`, `y`, `width`, `height`, `page_width`, `page_height` |

Kolom ini bernilai `null` jika tidak ada bukti overlay yang ditemukan, dokumen bukan PDF, atau PDF tidak dapat dianalisis.

## `aml_screenings[]`

Skrining AML tingkat perusahaan dan (jika alur kerja menghubungkannya) tingkat individu.

```json theme={null}
{
  "node_id": "feature_aml",
  "status": "Approved",
  "total_hits": 0,
  "score": 0,
  "entity_type": "COMPANY",
  "screened_data": {
    "company_name": "Acme Corporation Limited",
    "country_code": "GBR"
  },
  "is_ongoing_monitoring_enabled": true,
  "next_ongoing_monitoring_bill_date": "2027-04-16",
  "last_ongoing_screening_at": "2026-09-12T04:03:11Z",
  "last_ongoing_screening_datasets_updated_at": null,
  "hits": [],
  "warnings": []
}
```

Ketika `total_hits > 0`, setiap kecocokan menyertakan skor kecocokan, skor risiko, sumber daftar pantauan, dan `review_status` per kecocokan yang dapat Anda perbarui melalui endpoint update-aml-hit-status. Lihat [laporan Skrining AML](https://docs.didit.me/id/core-technology/aml-screening/report-aml-screening.md) untuk struktur kecocokan.

## Larik fitur bersama

`phone_verifications`, `email_verifications`, `questionnaire_responses`, `ip_analyses` menggunakan format per item yang sama seperti sesi pengguna (KYC). Semuanya bernilai `null` jika alur kerja tidak menyertakannya. Lihat [respons KYC](https://docs.didit.me/id/sessions-api/retrieve-session.md) untuk skema item.

`signatures` ada jika alur kerja memiliki langkah [Tanda Tangan Elektronik](https://docs.didit.me/id/core-technology/electronic-signature/overview.md). Sesi bisnis memiliki satu item per pihak kunci yang menandatangani atas nama perusahaan, dengan `signer.capacity: "company"`, nama perusahaan, dan peran pihak kunci. Lihat [laporan Tanda Tangan Elektronik](https://docs.didit.me/id/core-technology/electronic-signature/report-electronic-signature.md).

## Grup fitur peringatan

Peringatan Verifikasi Bisnis dikelompokkan berdasarkan fitur yang menghasilkannya:

* `KYB_REGISTRY` untuk ketersediaan registri, kepemilikan, aktivitas perusahaan, dan masalah pembatasan negara.
* `KYB_DOCUMENTS` untuk ekstraksi dokumen korporat, pemeriksaan silang, metadata, manipulasi, subtipe, usia, dan masalah batas percobaan.
* `AML` untuk kecocokan skrining AML perusahaan atau data skrining yang hilang.
* `KYB_KEY_PEOPLE` untuk masalah tingkat individu yang terkait dengan direktur, pejabat, UBO, atau perwakilan.
* `PHONE` untuk risiko nomor telepon, duplikasi, daftar blokir, dan masalah percobaan kode verifikasi.
* `EMAIL` untuk risiko email, kemampuan pengiriman, duplikasi, daftar blokir, dan masalah percobaan kode verifikasi.
* `QUESTIONNAIRE` untuk aturan status kustom yang dipicu oleh jawaban kuesioner.
* `LOCATION` untuk Analisis Perangkat & IP, jaringan privat, daftar blokir IP, daftar blokir perangkat, serta masalah duplikasi perangkat/IP.
* `SIGNATURE` untuk penolakan Tanda Tangan Elektronik, konfirmasi kode yang gagal, ketidakcocokan nama penandatangan, penandatangan yang belum diverifikasi, dokumen yang diubah, dan data kolom yang hilang. Lihat [peringatan Tanda Tangan Elektronik](https://docs.didit.me/id/core-technology/electronic-signature/warnings-electronic-signature.md).

Lihat [peringatan Verifikasi Bisnis](https://docs.didit.me/id/business-verification/warnings.md) untuk daftar lengkap kode peringatan.

## Pemfilteran kolom berbasis alur kerja

Alur kerja dapat membatasi kolom bersarang mana yang muncul pada setiap item fitur melalui `response_attributes`. Kolom yang selalu disertakan apa pun kondisinya: `status`, `warnings`, `node_id`. Semua kolom lainnya diatur ke null jika tidak ada dalam daftar yang diizinkan — kunci tetap berada di dalam respons demi stabilitas skema.

## Langkah berikutnya

> [card] [Status](https://docs.didit.me/id/business-verification/statuses.md)
>
> Arti dari setiap nilai status.

> [card] [Penilaian risiko](https://docs.didit.me/id/business-verification/risk-assessment.md)
>
> Faktor penentu hasil KYB.

> [card] [Laporan AML](https://docs.didit.me/id/core-technology/aml-screening/report-aml-screening.md)
>
> Referensi lengkap payload temuan AML.

> [card] [Pihak kunci](https://docs.didit.me/id/business-verification/key-people.md)
>
> Bagaimana pihak-pihak berasal dari registri atau pengajuan pengguna dan masuk ke dalam kelompok `registry` / `submitted`.

> [card] [Dokumen](https://docs.didit.me/id/business-verification/documents.md)
>
> Grup dokumen, OCR, dan referensi silang.

> [card] [Mengambil sesi](https://docs.didit.me/id/sessions-api/retrieve-session.md)
>
> Referensi endpoint lengkap termasuk contoh respons.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.