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

# Laporan Document AI: Kolom yang Diekstraksi

> Referensi Document AI Didit: endpoint unggah dokumen, JSON kolom yang diekstrak per dokumen, status, dan entri features[] keputusan.

## Gambaran umum

Document AI menerima hingga 3 dokumen per langkah (PDF atau gambar — PDF, JPG, JPEG, PNG, TIFF, WebP). Setiap dokumen diklasifikasikan berdasarkan `document_key` yang dikonfigurasi, dibaca oleh model visi-bahasa menggunakan skema yang dibuat dari definisi kolom Anda, dan menjalani analisis forensik PDF/EXIF. Untuk setiap dokumen, sistem ini menyimpan:

* **Kolom yang diekstraksi** — peta dengan kunci berupa `key` kolom yang Anda konfigurasi, dengan nilai yang tipenya sesuai dengan deklarasi Anda (`text` → string, `number` → number, `date` → `YYYY-MM-DD`). Kolom yang tidak dapat dibaca bernilai `null`.
* **Kode QR dan barcode yang terdeteksi** - payload yang didekodekan dan koordinat piksel untuk setiap halaman yang dirender. Kode QR yang dapat ditemukan tetapi tidak dapat didekodekan tetap dikembalikan dengan `parsed_payload: null`.
* **Status dokumen** — `Approved`, `In Review`, `Declined`, atau `Not Finished`.
* **Metadata dokumen** — forensik file termasuk bukti manipulasi/overlay apa pun.
* **Hasil pemeriksaan silang** — hasil pencocokan nama terhadap identitas yang diverifikasi dan referensi silang kolom kustom apa pun.

## Mengunggah dokumen

Dokumen diunggah satu per satu ke endpoint Document AI. Dalam sesi yang di-hosting atau alur SDK, hal ini ditangani secara otomatis untuk Anda; kontraknya adalah:

```text theme={null}
POST https://verification.didit.me/v3/document-ai/documents/
multipart/form-data — Session-Token: <session token>
```

| Kolom | Wajib | Deskripsi |
| - | - | - |
| `document_key` | ya | Dokumen terkonfigurasi yang dipenuhi oleh file ini |
| `document` | ya | File yang akan diunggah |
| `locale` | tidak | Lokal yang digunakan untuk menentukan judul/deskripsi di layar |

Respons melanjutkan alur:

```json theme={null}
{
  "valid": true,
  "next_step": "DOCUMENT_AI",
  "document_ai_status": "In Progress",
  "uploaded_document_keys": ["proof_of_funds"],
  "required_document_keys": ["proof_of_funds", "payslip"]
}
```

Langkah selesai (`next_step` melewati `DOCUMENT_AI`) setelah setiap entri di `required_document_keys` muncul di `uploaded_document_keys` dan tidak ada dokumen yang belum selesai.

## Tempat kemunculannya dalam respons API

`GET /v3/session/{sessionId}/decision/` menampilkan Document AI di dua tempat, baik untuk sesi Verifikasi Pengguna (KYC) maupun Verifikasi Bisnis (KYB) — array `document_ai_documents[]` dan laporan PDF identik terlepas dari `session_kind`:

* **`features[]`** — entri ringkasan per node Document AI, digunakan untuk mencantumkan fitur mana saja yang dijalankan:

  ```json theme={null}
  { "features": [ { "feature": "DOCUMENT_AI", "node_id": "feature_document_ai_1" } ] }
  ```

* **`document_ai_documents[]`** — hasil lengkap, satu grup per node Document AI. Setiap grup memuat `status` gabungan node, daftar `items` yang diunggah, dan `warnings` apa pun. Setiap dokumen yang diunggah adalah item dengan kolom yang Anda konfigurasi (di bawah `extracted_data`), kode yang terdeteksi (di bawah `detected_codes`), `status`-nya sendiri, definisi kolom, `document_metadata` forensik, dan `cross_check_result`.

Status per dokumen dari setiap node digabungkan menjadi status node menggunakan urutan prioritas **Declined > In Review > Approved**.

## Contoh keputusan

Untuk dokumen **Bukti Dana** yang dikonfigurasi dengan `account_holder` (teks), `balance` (angka), `currency` (teks), dan `statement_date` (tanggal):

```json theme={null}
{
  "document_ai_documents": [
    {
      "node_id": "feature_document_ai_1",
      "status": "Approved",
      "items": [
        {
          "uuid": "5c1f0a2e-9b3d-4c7a-8f21-0a4e8e7d6c12",
          "document_key": "proof_of_funds",
          "status": "Approved",
          "original_filename": "statement.pdf",
          "extracted_data": {
            "account_holder": "Sophia Martinez",
            "balance": 18450.75,
            "currency": "EUR",
            "statement_date": "2026-05-31"
          },
          "detected_codes": [
            {
              "type": "QR_CODE",
              "page_number": 2,
              "position": [[124, 86], [306, 86], [306, 268], [124, 268]],
              "x": 124,
              "y": 86,
              "width": 182,
              "height": 182,
              "page_width": 1190,
              "page_height": 1684,
              "raw_payload": "SU5WLTIwMjYtMDA0Mg==",
              "parsed_payload": "INV-2026-0042"
            }
          ],
          "fields": [
            { "key": "account_holder", "name": "Account holder", "type": "text", "required": true },
            { "key": "balance", "name": "Balance", "type": "number", "required": false },
            { "key": "currency", "name": "Currency", "type": "text", "required": false },
            { "key": "statement_date", "name": "Statement date", "type": "date", "required": false }
          ],
          "document_metadata": { "is_tampered": false },
          "cross_check_result": null,
          "created_at": "2026-05-31T10:12:00Z"
        }
      ],
      "warnings": []
    }
  ]
}
```

`page_number` dimulai dari 1. `position` berisi poligon yang terdeteksi, sedangkan `x`, `y`, `width`, dan `height` menyediakan kotak pembatasnya. Semua koordinat menggunakan ruang piksel halaman yang dirender, yang dimensinya adalah `page_width` dan `page_height`. `detected_codes` berupa array kosong jika tidak ditemukan kode yang didukung. Anggap item dengan `parsed_payload: null` hanya sebagai keberadaan dan lokasi, bukan sebagai nilai yang didekodekan.

Karena setiap kolom dapat diakses sebagai `document_ai.<field_key>`, Anda dapat mengatur percabangan dan [aturan status kustom](https://docs.didit.me/id/core-technology/document-ai/warnings-document-ai.md) berdasarkan nilai `extracted_data` — termasuk referensi silang terhadap langkah lain seperti `kyc.full_name` atau jawaban kuesioner.


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