> ## 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.

# API Perbarui Data Sesi: Perbaiki Kolom KYC & KYB

> Perbaiki kolom KYC, POA, atau KYB hasil OCR di sesi Didit. 3 endpoint PATCH, pembaruan parsial, memicu webhook. Bayar per panggilan.



Prompt Pembaruan Data Sesi
        Salin prompt ke papan klip



      
      

\<pre>

\`Correct OCR-extracted fields on a finished Didit verification session — KYC identity, Proof of Address, or KYB company data.

There are THREE separate PATCH endpoints. Pick the one that matches the feature record you need to fix.

1\) Update KYC identity data
PATCH https://verification.didit.me/v3/session/{session_id}/update-data/
\- Auth: x-api-key (client) or user-auth token. Privilege: write:sessions.
\- Session status must be one of Approved, Declined, In Review, Kyc Expired.
\- Session must have a captured KYC feature record.
\- Optional query / body param node_id targets a specific KYC instance in multi-step workflows (e.g. node_id=feature_ocr_2).
\- Mutable fields: document_type ("P", "ID", "DL", "RP"), document_number, personal_number, date_of_birth (ISO date), date_of_issue, expiration_date, issuing_state (ISO 3166-1 alpha-3), first_name, last_name (full_name is auto-recomputed), gender ("M"|"F"|"X"), nationality, marital_status, place_of_birth, address (free-text — triggers re-geocoding), parsed_address (nested: address_type, city, region, street_1, street_2, postal_code, country [ISO 3166-1 alpha-2]), extra_fields (object — send null on a key to remove it).

2\) Update Proof of Address (POA) data
PATCH https://verification.didit.me/v3/session/{session_id}/update-poa-data/
\- Same auth + privilege + status gate as KYC.
\- Session must have a captured POA record. node_id supported.
\- Mutable fields: issuing_state (ISO-3), document_type ("utility_bill" | "bank_statement" | "lease_agreement"), document_language (ISO 639-1), issuer, issue_date (ISO date), poa_address (free-text — triggers re-geocoding), name_on_document, poa_parsed_address (same nested shape as KYC parsed_address), extra_fields (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).

3\) Update KYB company data
PATCH https://verification.didit.me/v3/session/{session_id}/kyb/{company_uuid}/update-data/
\- Privilege: write:businesses (NOT write:sessions).
\- No status gate — KYB company data can be corrected at any time.
\- company_uuid must belong to that session_id (else 404).
\- Mutable fields: company_name, registration_number, country_code (ISO-3), incorporation_date / registration_date / dissolution_date, tax_number, legal_address (lands on registered_address), company_type, registry_status ("active" | "dissolved" | "struck_off" | "inactive" | ...), verification_status ("verified" | "failed" | "unknown"), alternative_names, nature_of_business, registered_capital, website, email, phone, legal_entity_identifier, location_of_registration, control_scheme.
\- Edits BOTH the canonical column and registry_data. user_provided_data is never touched.

4\) Skip (or re-require) a Key People party
PATCH https://verification.didit.me/v3/session/{session_id}/kyb/parties/{party_uuid}/
\- Privilege: write:businesses.
\- Body: { "is_skipped": true } to exempt the party, { "is_skipped": false } to put it back in scope.
\- party_uuid must belong to that session_id (else 404).
\- Use it when a party can no longer finish its own check - most often because the linked individual KYC session was deleted - and the KYB is stuck in Awaiting User with nothing left that can move it.
\- Independent of the role's allow_skip setting: that flag limits what the applicant may skip in the hosted flow, not what you may override.
\- requires_verification is left untouched, so the override stays visible as requires_verification: true + is_skipped: true.
\- Recomputes the Key People check and the parent session status immediately, and fires data.updated with trigger: "console_key_people_skip".

Common contract for all four:
\- PATCH semantics — only fields you send are updated. Omit a field to leave it as-is. Send null on an extra_fields key to remove it.
\- A successful update fires a data.updated webhook (with session_kind: "user" or "business"). KYB company updates carry trigger: "console_registry_edit".
\- The audit trail records changed fields, previous + new values, and (for user-auth) the actor email.

KYC curl example:
curl -X PATCH "https://verification.didit.me/v3/session/<SESSION_ID>/update-data/" \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1990-01-01",
"issuing_state": "ESP",
"extra_fields": { "municipality": "Madrid" }
}'

Response: the updated record (KYC / POA / KYB company shape — same fields as in the session decision).

Failure modes:
\- 401 — missing or invalid credentials.
\- 403 — { "detail": "You do not have permission to perform this action." } — caller lacks write:sessions (KYC/POA) or write:businesses (KYB company).
\- 404 — { "detail": "Not found." } — session, node_id, or company_uuid not found; OR the session does not carry the feature record you are patching (no KYC / no POA / no matching company).
\- 400 — validation error: invalid country code, unknown parsed_address key, extra_fields not an object, etc. Returned as { "<field>": ["..."] }.

When NOT to use these endpoints:
\- To ask the user to retake the document → use PATCH /v3/session/{id}/update-status/ with new_status: "Resubmitted" (see /sessions-api/update-status).
\- To change entity-level data → use /v3/users/{vendor_data}/ or /v3/businesses/{vendor_data}/.
\- To edit Key People names / roles / ownership - no public API; that data is submitted through the hosted flow. Only the is_skipped flag is patchable (endpoint 4).

Side effects:
\- Changes to KYC name / DOB / nationality can re-trigger AML if AML was still running.
\- Changes to address / poa_address re-run geocoding asynchronously (failures swallowed — they never fail the update).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Tempel ke

Terkadang OCR salah membaca ID, tagihan utilitas, atau entri registri. Didit menyediakan tiga endpoint PATCH yang dapat Anda panggil untuk memperbaiki data yang diekstrak tanpa harus menjalankan ulang seluruh verifikasi.| Endpoint | Gunakan ketika |
| - | - |
| [`PATCH /v3/session/{id}/update-data/`](#perbarui-data-identitas-kyc) | Memperbaiki nilai yang diekstrak dari dokumen identitas pada sesi **Verifikasi Pengguna (KYC)** |
| [`PATCH /v3/session/{id}/update-poa-data/`](#perbarui-data-bukti-alamat-poa) | Memperbaiki nilai yang diekstrak dari tagihan utilitas / laporan bank / perjanjian sewa pada sesi **Verifikasi Pengguna (KYC)** |
| [`PATCH /v3/session/{id}/kyb/{company_uuid}/update-data/`](#perbarui-data-perusahaan-kyb) | Memperbaiki kolom yang diekstrak dari registri pada sesi **Verifikasi Bisnis (KYB)** |
| [`PATCH /v3/session/{id}/kyb/parties/{party_uuid}/`](#lewati-pihak-kunci) | Membebaskan pihak kunci dari verifikasi ketika pihak tersebut tidak lagi dapat menyelesaikan pemeriksaannya sendiri |Keempat endpoint menerima **kunci API klien** Anda atau **header otorisasi pengguna**, dan keempatnya memancarkan webhook `data.updated` saat berhasil agar sistem Anda dan analitik hilir tetap sinkron.## Persyaratan bersama- **Otorisasi**: kunci API klien (header standar `x-api-key` atau bearer pada `Authorization`) atau token otorisasi pengguna.
- **Hak akses**:
  * KYC dan POA: `write:sessions`
  * Perusahaan KYB dan pihak kunci: `write:businesses`
- **Status sesi** (hanya KYC / POA): harus salah satu dari `APPROVED`, `DECLINED`, `IN_REVIEW`, atau `KYC_EXPIRED`. Sesi yang belum mencapai status yang dapat ditinjau tidak dapat diperbarui. Pembaruan perusahaan KYB tidak memiliki pembatasan status.
- **Rekaman fitur harus ada**: Anda hanya dapat memperbarui kolom KYC jika sesi menangkap KYC, kolom POA jika sesi menangkap POA, dan kolom perusahaan KYB jika sesi memiliki pemeriksaan registri.
- **Pembaruan parsial**: hanya kolom yang Anda sertakan yang diubah. Jangan sertakan kolom untuk membiarkannya tetap seperti semula. Kirim `null` untuk menghapus sebuah kunci di dalam `extra_fields`.
- **Webhook**: pembaruan yang berhasil memicu `data.updated` dengan `session_kind: "user"` atau `"business"`, dan jejak audit sesi mencatat kolom mana yang berubah serta siapa yang mengubahnya.## Perbarui data identitas KYC**`PATCH /v3/session/{sessionId}/update-data/`**Perbarui kolom apa pun yang diekstrak dari dokumen identitas. Mendukung alur kerja multi-instance berbasis graf melalui parameter kueri opsional `node_id` atau kolom dalam body. Targetkan rekaman KYC tertentu ketika satu sesi memiliki beberapa langkah KYC.### Kolom yang dapat diubah| Kolom | Keterangan |
| - | - |
| `document_type` | Kode dokumen ISO: `P` (paspor), `ID`, `DL`, `RP`. |
| `document_number` | Nomor dokumen yang tercetak. |
| `personal_number` | Nomor ID pribadi / pajak jika tercetak pada dokumen. |
| `date_of_birth` | Tanggal ISO 8601. |
| `date_of_issue` / `expiration_date` | Tanggal ISO 8601. |
| `issuing_state` | Negara penerbit, ISO 3166-1 alpha-3. |
| `first_name` / `last_name` | `full_name` dihitung ulang otomatis dari keduanya. |
| `gender` | `M`, `F`, atau `X` jika ada. |
| `nationality` | Teks bebas. |
| `marital_status` | Teks bebas. |
| `place_of_birth` | Teks bebas. |
| `address` | Alamat teks bebas dari dokumen. Memicu geocoding ulang. |
| `parsed_address` | Alamat terstruktur. Lihat bentuk bertingkat di bawah. |
| `extra_fields` | Kolom tambahan apa pun dari ID (misalnya `blood_group`, `municipality`). Kirim `null` untuk sebuah kunci agar kunci tersebut dihapus. |`parsed_address` hanya menerima kunci bertingkat berikut: `address_type`, `city`, `region`, `street_1`, `street_2`, `postal_code`, `country` (ISO 3166-1 **alpha-2**).### Contoh```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/4c5c7f3a.../update-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "John",
    "last_name": "Doe",
    "date_of_birth": "1990-01-01",
    "issuing_state": "ESP",
    "extra_fields": { "municipality": "Madrid" }
  }'
```Untuk alur kerja graf multi-instance, tambahkan `?node_id=feature_ocr_2` ke URL (atau kirim `"node_id": "feature_ocr_2"` di body) untuk menargetkan rekaman KYC tertentu.## Perbarui data Bukti Alamat (POA)**`PATCH /v3/session/{sessionId}/update-poa-data/`**Perbarui kolom yang diekstrak dari dokumen bukti alamat. Status dan hak akses sama dengan pembaruan KYC. Juga mendukung `node_id` untuk alur kerja multi-instance.### Kolom yang dapat diubah| Kolom | Keterangan |
| - | - |
| `issuing_state` | Negara yang menerbitkan dokumen, ISO 3166-1 alpha-3. |
| `document_type` | misalnya `utility_bill`, `bank_statement`, `lease_agreement`. |
| `document_language` | Bahasa dokumen, ISO 639-1. |
| `issuer` | Perusahaan utilitas, bank, pemilik properti, dan sebagainya. |
| `issue_date` | Tanggal ISO 8601. |
| `poa_address` | Alamat sebagaimana tercetak di dokumen (teks bebas). Memicu geocoding ulang. |
| `name_on_document` | Nama lengkap yang tercetak di dokumen. |
| `poa_parsed_address` | Alamat terstruktur dengan bentuk bertingkat yang sama seperti `parsed_address` KYC. |
| `extra_fields` | Kolom khusus dokumen: detail 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` (daftar atau `null`). |### Contoh```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/4c5c7f3a.../update-poa-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "document_type": "utility_bill",
    "issuer": "Iberdrola",
    "issue_date": "2026-03-15",
    "name_on_document": "Jane Doe",
    "poa_parsed_address": {
      "street_1": "Calle Mayor 10",
      "city": "Madrid",
      "postal_code": "28013",
      "country": "ES"
    }
  }'
```## Perbarui data perusahaan KYB**`PATCH /v3/session/{sessionId}/kyb/{companyUuid}/update-data/`**Koreksi kolom yang diekstrak dari registri pada perusahaan KYB. Endpoint ini mengubah baik kolom perusahaan kanonik maupun `registry_data`, sehingga tampilan "Extracted from Registry" di konsol mencerminkan koreksi Anda. `user_provided_data` (yang dikonfirmasi pengguna akhir dalam alur yang di-hosting) tidak diubah. `last_console_edit_at` diberi cap waktu, dan webhook `data.updated` dipicu dengan `trigger: "console_registry_edit"`.### Persyaratan- **Hak akses**: `write:businesses` (berbeda dari hak akses KYC / POA).
- `companyUuid` di URL harus milik `sessionId` yang diberikan; jika tidak, Anda akan menerima 404.
- Tidak ada batasan berdasarkan status sesi: data perusahaan KYB dapat dikoreksi kapan saja.### Kolom yang dapat diubah| Kolom | Catatan |
| - | - |
| `company_name` | Nama legal. |
| `registration_number` | Nomor registrasi resmi. |
| `country_code` | Negara pendirian, ISO 3166-1 alpha-3. |
| `incorporation_date` / `registration_date` / `dissolution_date` | Tanggal ISO 8601. |
| `tax_number` | Nomor identifikasi pajak. |
| `legal_address` | Alias untuk `registered_address`; data disimpan pada kolom kanonik `registered_address`. |
| `company_type` | Ltd / LLC / PLC / SA / GmbH / SL dll. |
| `registry_status` | `active`, `dissolved`, `struck_off`, `inactive`, dll. |
| `verification_status` | `verified`, `failed`, `unknown`. |
| `alternative_names` | Nama dagang, nama sebelumnya, DBA. |
| `nature_of_business` | Deskripsi singkat. |
| `registered_capital` | Modal dasar / modal yang diterbitkan. |
| `website`, `email`, `phone` | Detail kontak. |
| `legal_entity_identifier` | LEI. |
| `location_of_registration` | Kota / subdivisi. |
| `control_scheme` | Skema tata kelola jika registri menyediakannya. |Kolom yang dihilangkan tidak diubah. Setiap kolom yang Anda kirim ditulis ke kolom kanonik (jika ada) dan digabungkan ke `registry_data`. Tanggal diserialisasi sebagai string ISO 8601 saat digabungkan ke `registry_data`.### Contoh```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/bs-01HJX1.../kyb/f7a9c1b2-4e6d.../update-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Corporation Limited",
    "registration_number": "12345678",
    "registry_status": "active",
    "legal_address": "1 Main Street, London EC1A 1AA, United Kingdom",
    "alternative_names": "Acme Ltd, Acme Group"
  }'
```Respons: objek perusahaan KYB lengkap, dengan bentuk yang sama seperti `registry_checks[].company` di [keputusan sesi](https://docs.didit.me/id/sessions-api/retrieve-session.md#verifikasi-bisnis-kyb).## Lewati pihak kunci**`PATCH /v3/session/{sessionId}/kyb/parties/{partyUuid}/`**Membebaskan pihak kunci dari verifikasi. Ini adalah jalan keluar darurat untuk pihak yang tidak akan pernah dapat menyelesaikan pemeriksaannya sendiri. Penyebab umumnya adalah sesi turunan yang dihapus: setelah KYC individual yang diberikan kepada UBO atau direktur dihapus, statusnya dibekukan dan tidak akan pernah selesai, sehingga KYB tidak memiliki cara lain untuk mengeluarkan pihak tersebut dari `Awaiting User`. Melewati pihak tersebut akan mengeluarkannya dari agregasi pihak kunci, pemeriksaan dihitung ulang seketika, dan sesi dapat diselesaikan lalu disetujui atau ditolak.### Persyaratan- **Hak akses**: `write:businesses`.
- `partyUuid` di URL harus milik `sessionId` yang diberikan; jika tidak, Anda akan menerima 404.
- **Tidak dibatasi oleh `allow_skip`.** Pengaturan peran tersebut membatasi apa yang boleh dilewati pemohon saat mengisi layar pihak kunci dalam alur yang di-hosting. Endpoint ini adalah penggantian oleh operator, jadi tetap berfungsi bahkan pada peran yang pihaknya tidak dapat dilewati oleh pemohon.### Isi| Kolom | Tipe | Catatan |
| - | - | - |
| `is_skipped` | boolean | `true` membebaskan pihak; `false` mengembalikannya ke cakupan pemeriksaan, dan pemeriksaan kembali menunggu pihak tersebut. |`requires_verification` sengaja tidak diubah, sehingga pihak yang dikecualikan melalui penggantian oleh operator tampil sebagai `requires_verification: true` **dan** `is_skipped: true`. Rekaman tetap menunjukkan bahwa aturan meminta pemeriksaan.### Contoh```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/bs-01HJX1.../kyb/parties/0a3f1e2c-7c2f.../" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "is_skipped": true }'
```Respons: pihak yang diperbarui, dengan bentuk yang sama seperti entri `key_people_checks[].submitted.parties[]` di [keputusan sesi](https://docs.didit.me/id/business-verification/response-schema.md#key_people_checks).Webhook `data.updated` dipicu dengan `trigger: "console_key_people_skip"`.> [!NOTE]
>
> Pihak yang sesi turunannya dihapus ditandai dalam payload keputusan dengan
> `kyc_session_deleted: true` (atau `kyb_sub_session_deleted: true` untuk pihak
> perusahaan), dan `kyc_session_url` / `kyb_sub_session_url`-nya dikembalikan
> sebagai `null` karena tautan tersebut tidak lagi dapat diakses. Menghapus sesi
> turunan tidak pernah menyetujui pihak tersebut dengan sendirinya. Pemeriksaan
> pihak kunci turun ke `In Review` sehingga keputusan diambil oleh manusia.## Apa yang terjadi setelah pembaruan- **Webhook**: `data.updated` dipicu pada sesi, dengan `session_kind` sesi dalam payload (`"user"` atau `"business"`). Berlangganan sekali di tingkat tujuan dan lakukan perutean berdasarkan `session_kind`.
- **Jejak audit**: sesi mencatat dengan tepat kolom mana yang berubah, nilai sebelumnya dan nilai baru, serta (untuk panggilan yang diautentikasi pengguna) email aktor. Dapat dilihat di tab Events pada konsol.
- **Geocoding ulang alamat**: untuk pembaruan KYC dan POA yang mengubah `address` / `poa_address`, Didit menjalankan geocoding ulang di latar belakang. Kegagalan diabaikan sehingga pembaruan tidak pernah gagal karena masalah geocoding.
- **Evaluasi ulang AML**: pembaruan KYC yang mengubah nama / DOB / kewarganegaraan dapat memicu ulang skrining AML jika AML belum selesai pada sesi. Hasilnya muncul pada keputusan sesi.## Kapan tidak menggunakan endpoint ini- **Menjalankan ulang seluruh verifikasi**: jika pelanggan harus mengambil ulang foto ID atau mengunggah ulang dokumen, gunakan [update-status](https://docs.didit.me/id/sessions-api/update-status.md) untuk memindahkan sesi ke `Resubmitted`.
- **Mengubah kolom profil pada entitas Pengguna atau Bisnis**: gunakan [`PATCH /v3/users/{vendor_data}/`](https://docs.didit.me/id/management-api/users/update) atau [`PATCH /v3/businesses/{vendor_data}/`](https://docs.didit.me/id/management-api/businesses/update). Endpoint tersebut memperbarui data tingkat entitas, bukan data tingkat sesi.
- **Mengedit detail pihak kunci**: tidak ada API publik untuk mengubah nama, peran, atau kepemilikan pihak. Data tersebut dikirim melalui alur yang di-hosting. Satu-satunya kolom yang dapat di-patch adalah `is_skipped` (lihat [Lewati pihak kunci](#lewati-pihak-kunci)).## Errors| Status | Arti |
| - | - |
| `401` | Kredensial tidak ada atau tidak valid. |
| `403` | Pemanggil tidak memiliki izin yang diperlukan (`write:sessions` atau `write:businesses`). |
| `404` | Sesi tidak ditemukan, atau sesi tidak memuat catatan yang ingin Anda ubah (tidak ada KYC, tidak ada POA, tidak ada perusahaan yang cocok, tidak ada pihak yang cocok, atau pihak tersebut milik sesi lain). |
| `400` | Kesalahan validasi: kode negara tidak valid, kunci `parsed_address` tidak dikenal, `extra_fields` bukan objek, dan sebagainya. |## Langkah selanjutnya> [card] [Ambil sesi](https://docs.didit.me/id/sessions-api/retrieve-session.md)
>
> Ambil keputusan lengkap untuk melihat kolom yang sudah diperbarui.> [card] [Perbarui status](https://docs.didit.me/id/sessions-api/update-status.md)
>
> Setujui, tolak, atau buka kembali sesi setelah koreksi data.> [card] [Webhook](https://docs.didit.me/id/integration/webhooks.md)
>
> Berlangganan event webhook `data.updated`.


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