> ## 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 Validasi Database: Respons JSON

> Respons Validasi Database Didit mencakup hasil pencocokan, data registri, skor pencocokan wajah, dan kode peringatan. Bayar per panggilan dari $0.05.

Fitur [Validasi Database](https://docs.didit.me/id/core-technology/database-validation/overview.md) Didit mencocokkan silang data identitas setiap pengguna dengan sumber otoritatif untuk negara tersebut — RENAPER (Argentina), Receita Federal (Brasil), Tribunal Electoral (Panama, dengan pencocokan wajah biometrik), Junta Central Electoral (Republik Dominika), dan banyak lagi — ditagih per kueri yang berhasil tanpa minimum bulanan.

Setiap entri dalam `database_validations[]` adalah satu laporan Validasi Database lengkap — satu eksekusi node Validasi Database terhadap satu negara penerbit. Hasil registri per layanan berada di dalam sub-array `validations[]` dari entri tersebut. Halaman ini mendokumentasikan format JSON sehingga Anda dapat mengurai hasil kecocokan, data sumber registri, dan skor biometrik yang dikembalikan oleh setiap layanan.

![Didit database validation report showing match types and registry response fields](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/database-validation-report.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=56284966659e33d1c74385647537e5d9)

## Gambaran Umum

Laporan Validasi Database dibuat setiap kali sebuah node alur kerja menjalankan fitur Validasi Database. Setiap entri dalam array `database_validations[]` mewakili **satu eksekusi node** terhadap **satu negara penerbit**; jika node tersebut menjalankan beberapa layanan untuk negara itu (misalnya CPF + CNH di Brasil), setiap layanan muncul sebagai item terpisah di dalam sub-array `validations[]` entri tersebut. Setiap laporan berisi:

* `status` fitur secara keseluruhan — sebuah nilai [`FeatureStatusChoices`](https://docs.didit.me/id/reference/data-models#referensi-enum-status) (`Not Finished`, `Approved`, `Declined`, `In Review`).
* Sebuah ringkasan `match_type` (`full_match`, `partial_match`, `no_match`, atau `null` jika tidak ada layanan yang mengembalikan hasil yang dapat digunakan) yang diagregasikan di seluruh layanan melalui [metode pencocokan](https://docs.didit.me/id/core-technology/database-validation/database-validation-matching-methods.md).
* `issuing_state` (ISO 3166-1 alpha-3) dan `validation_type` yang diturunkan (`one_by_one`, `two_by_two`, atau `not_enabled` — tidak pernah `null`).
* Blok `screened_data` — data yang diberikan pengguna yang dikirim ke registri.
* Sebuah array `validations[]` — satu entri per layanan yang memberikan hasil, dengan katalog `service_id`/`service_name`, `outcome_code` yang netral vendor, `outcome_detail` opsional, pemetaan `validation` per kolom, dan `source_data` yang telah dibersihkan, yang diambil dari respons registri.
* Sebuah array `errors[]` — kesalahan per layanan saat pencarian gagal atau dilewati; kunci ini **dihilangkan sama sekali** jika tidak ada kesalahan.
* Sebuah array `warnings[]` — peristiwa risiko yang dihasilkan selama validasi (lihat [Peringatan Validasi Database](https://docs.didit.me/id/core-technology/database-validation/database-validation-warnings.md)).
* Sebuah `node_id` yang mengidentifikasi node graf alur kerja yang menghasilkan laporan (khusus sesi V3).

## Lokasi kemunculannya dalam respons API

Laporan ini muncul sebagai **`database_validations[]`** di `GET /v3/session/{sessionId}/decision/` — selalu berupa array JSON, tidak pernah berupa objek tunggal. Array tersebut berisi satu entri per node Validasi Database dalam graf alur kerja; kemudian, sub-array `validations[]` setiap entri berisi satu item per layanan registri yang memberikan hasil.

```json theme={null}
{
  "session_id": "11111111-1111-1111-1111-111111111111",
  "status": "Approved",
  "database_validations": [
    { "node_id": "feature_db_validation_1", "status": "Approved", "...": "..." }
  ]
}
```

Nilai `null` berarti belum ada langkah Validasi Database yang dijalankan.

## Skema

Skema kanonikal kolom demi kolom tersedia di halaman [Model data](https://docs.didit.me/id/reference/data-models.md#validasi-database). Skema ini dihasilkan oleh `DatabaseValidationV3Serializer`.

```typescript theme={null}
interface DatabaseValidation {
  node_id: string | null;
  status: "Not Finished" | "Approved" | "Declined" | "In Review"; // FeatureStatusChoices
  issuing_state: string | null;      // ISO 3166-1 alpha-3, e.g. "ARG"
  validation_type: "one_by_one" | "two_by_two" | "not_enabled"; // derived, never null
  match_type: "full_match" | "partial_match" | "no_match" | null; // null when no service returned a usable result
  screened_data: {                   // What we sent to the registry (varies by country/service)
    tax_number?: string;
    personal_number?: string;
    document_number?: string;
    first_name?: string;
    last_name?: string;
    date_of_birth?: string;          // YYYY-MM-DD
    selfie?: string;                 // Presigned URL (biometric services)
    cnh_qr_code_image?: string;      // Presigned URL (Brazil CNH QR + face match)
    document_image?: string;         // Presigned URL (services that take a document image)
    gender?: string;                 // Biometric registry services (e.g. Argentina RENAPER)
  };
  validations: Array<{
    // Catalog metadata
    service_id?: string;             // e.g. "arg_renaper"
    service_name?: string;           // e.g. "Argentina - DNI verification (RENAPER)"
    // Per-field match outcome — keys vary by service
    // (full_name, first_name, last_name, date_of_birth, identification_number, address, …)
    validation?: Record<string, "full_match" | "partial_match" | "no_match">;
    outcome_code?: string;           // Vendor-neutral outcome, see below
    outcome_detail?: string;         // Raw upstream status detail backing the outcome code
    source_data?: {                  // Cleaned registry record
      identification_number?: string;
      first_name?: string;
      last_name?: string;
      full_name?: string;
      date_of_birth?: string;
      place_of_birth?: string;
      gender?: string;
      nationality?: string;
      issue_date?: string;
      expiration_date?: string;
      photo?: string;                // Pre-signed JPEG URL
      signature?: string;            // Pre-signed JPEG URL
      face_match_score?: number;     // Biometric services only (0-100)
    };
  }>;
  errors?: Array<{                   // Omitted entirely when empty
    service_id: string;
    code?: string;                   // e.g. "invalid_screened_data", "empty_provider_response"
    message?: string;
    missing_required_fields?: string[];
    invalid_format_fields?: string[];
    field_reasons?: Record<string, string>;
  }>;
  warnings: Warning[];               // See /reference/data-models#warning-object
}
```

### Nilai status

`status` menggunakan enum tingkat fitur standar (lihat [Enum status](https://docs.didit.me/id/reference/data-models.md#referensi-enum-status)) — lihat [Referensi enum status](https://docs.didit.me/id/reference/data-models.md#referensi-enum-status). Enum ini juga mendefinisikan `Resub Requested`, yang dalam praktiknya tidak dihasilkan oleh Validasi Database.

| Status | Makna |
| - | - |
| `Not Finished` | Validasi belum menghasilkan hasil (status awal; juga dicatat ketika panggilan mandiri gagal di semua layanan). |
| `Approved` | Tidak ada risiko yang terpicu, atau satu-satunya risiko yang terpicu dikonfigurasi sebagai `NO_ACTION` (default pencocokan sebagian). |
| `Declined` | Hasil tanpa kecocokan atau pencocokan sebagian yang tindakan konfigurasinya adalah `DECLINE`. |
| `In Review` | Hasil tanpa kecocokan atau pencocokan sebagian yang tindakan konfigurasinya adalah `REVIEW`, atau validasi tidak dapat berjalan sama sekali (`COULD_NOT_PERFORM_DATABASE_VALIDATION` — selalu ditinjau). |

Aturan status kustom per-node diterapkan di atas status dasar ini. Lihat [Peringatan Validasi Database](https://docs.didit.me/id/core-technology/database-validation/database-validation-warnings.md) untuk tindakan yang dapat dikonfigurasi beserta nilai default-nya.

### Kode hasil

Setiap entri dalam `validations[]` memuat `outcome_code` yang netral vendor — salah satu dari `MATCH`, `PARTIAL_MATCH`, `NO_MATCH`, `DOCUMENT_NOT_FOUND`, `INVALID_DOCUMENT_FORMAT`, `INVALID_INPUT`, `MINOR_BLOCKED`, `DECEASED`, `BIOMETRIC_NO_MATCH`, `BIOMETRIC_IMAGE_UNUSABLE`, `INCONCLUSIVE`, `DOCUMENT_SUPERSEDED`, `REGISTRY_UNAVAILABLE`, `REGISTRY_ERROR`. Perhatikan perbedaannya: `NO_MATCH` berarti registri secara pasti tidak mengonfirmasi data tersebut, `INCONCLUSIVE` berarti registri tidak dapat menentukan hasilnya (arahkan ke peninjauan, bukan ditolak), dan `BIOMETRIC_IMAGE_UNUSABLE` adalah masalah teknis swafoto (ambil ulang) — berbeda dari `BIOMETRIC_NO_MATCH` yang definitif. Lihat taksonomi lengkap dan penanganan yang disarankan di halaman [Kode hasil](https://docs.didit.me/id/core-technology/database-validation/database-validation-outcome-codes.md).

### Satu entri per layanan

Larik `validations[]` berisi **satu item untuk setiap layanan yang menghasilkan payload hasil** (peta `validation`, `source_data`, `outcome_code`, atau `outcome_detail`). Jika alur kerja Anda menjalankan beberapa layanan untuk negara yang sama (misalnya CPF Brasil + CNH Brasil), masing-masing muncul secara terpisah dengan `service_id`, `outcome_code`, dan `source_data` miliknya sendiri. Rekap `match_type` mengagregasi di seluruh layanan (kecocokan penuh apa pun → `full_match`; jika tidak, kecocokan sebagian apa pun → `partial_match`; jika tidak, `no_match`), dan `validation_type` diturunkan dari berapa banyak layanan berbeda yang cocok penuh — lihat [Metode pencocokan](https://docs.didit.me/id/core-technology/database-validation/database-validation-matching-methods.md).

### URL gambar yang ditandatangani sebelumnya

Kolom gambar di `source_data` (`photo`, `signature`) dan `screened_data` (`selfie`, `cnh_qr_code_image`, `document_image`) dikembalikan sebagai **URL yang ditandatangani sebelumnya** yang memiliki masa kedaluwarsa — perbarui dengan memanggil kembali endpoint keputusan. Payload hulu mentah sengaja tidak diekspos melalui API.

## Contoh

### Disetujui — pemeriksaan status CPF Brasil (Receita Federal)

```json theme={null}
{
  "node_id": "feature_db_validation_1",
  "status": "Approved",
  "issuing_state": "BRA",
  "validation_type": "one_by_one",
  "match_type": "full_match",
  "screened_data": {
    "tax_number": "12345678900",
    "first_name": "John",
    "last_name": "Doe",
    "date_of_birth": "1980-01-01"
  },
  "validations": [
    {
      "service_id": "bra_cpf",
      "service_name": "Brazil - CPF status check",
      "outcome_code": "MATCH",
      "outcome_detail": "200",
      "validation": {
        "full_name": "full_match",
        "date_of_birth": "full_match",
        "identification_number": "full_match"
      },
      "source_data": {
        "identification_number": "12345678900",
        "first_name": "JOHN",
        "last_name": "DOE",
        "date_of_birth": "1980-01-01",
        "lgpd_minor": false,
        "minor_under_16": false,
        "minor_under_18": false
      }
    }
  ],
  "warnings": []
}
```

### Disetujui — biometrik DNI Argentina (RENAPER)

Untuk Argentina, validasi menggunakan RENAPER dengan pencocokan wajah biometrik. Respons mencakup `face_match_score` dan kolom identitas tambahan yang dikembalikan oleh registri.

```json theme={null}
{
  "node_id": "feature_db_validation_1",
  "status": "Approved",
  "issuing_state": "ARG",
  "validation_type": "one_by_one",
  "match_type": "full_match",
  "screened_data": {
    "document_number": "12345678",
    "selfie": "https://<media-host>/sessions/<session-id>/selfie.jpg?X-Amz-Signature=...",
    "gender": "M",
    "first_name": "John",
    "last_name": "Doe"
  },
  "validations": [
    {
      "service_id": "arg_renaper",
      "service_name": "Argentina - DNI verification (RENAPER)",
      "outcome_code": "MATCH",
      "validation": {
        "full_name": "full_match",
        "identification_number": "full_match"
      },
      "source_data": {
        "identification_number": "12345678",
        "first_name": "John",
        "last_name": "Doe",
        "full_name": "John Doe",
        "date_of_birth": "1990-01-01",
        "tax_id": "20000000019",
        "tax_id_type": "CUIT",
        "face_match_score": 97
      }
    }
  ],
  "warnings": []
}
```

### Dalam peninjauan — registri tidak dapat berjalan

Ketika tidak ada layanan yang mengembalikan hasil yang dapat digunakan — kolom wajib hilang atau formatnya salah, atau registri tidak dapat dijangkau — `match_type` tetap `null`, `validation_type` bernilai `not_enabled`, peringatan `COULD_NOT_PERFORM_DATABASE_VALIDATION` dikeluarkan, dan fitur berpindah ke `In Review` hingga data diperbaiki. **Tidak ada biaya** yang dikenakan untuk layanan yang dilewati.

```json theme={null}
{
  "node_id": "feature_db_validation_1",
  "status": "In Review",
  "issuing_state": "PAN",
  "validation_type": "not_enabled",
  "match_type": null,
  "screened_data": {
    "first_name": "John",
    "last_name": "Doe",
    "date_of_birth": "1990-01-01",
    "selfie": "https://<media-host>/sessions/<session-id>/selfie.jpg?X-Amz-Signature=..."
  },
  "validations": [],
  "errors": [
    {
      "code": "invalid_screened_data",
      "message": "Database validation was skipped before calling the provider because the screened data has missing required fields: personal_number.",
      "missing_required_fields": ["personal_number"],
      "service_id": "pan_cedula_sib_plus"
    }
  ],
  "warnings": [
    {
      "feature": "DATABASE_VALIDATION",
      "risk": "COULD_NOT_PERFORM_DATABASE_VALIDATION",
      "additional_data": {
        "reason": "Database validation was skipped before any provider request because the screened data is incomplete or invalid.",
        "database_validation_errors": [
          {
            "code": "invalid_screened_data",
            "message": "Database validation was skipped before calling the provider because the screened data has missing required fields: personal_number.",
            "missing_required_fields": ["personal_number"],
            "service_id": "pan_cedula_sib_plus"
          }
        ],
        "missing_required_fields_by_service": { "pan_cedula_sib_plus": ["personal_number"] },
        "invalid_format_fields_by_service": {},
        "field_reasons_by_service": {}
      },
      "log_type": "warning",
      "short_description": "Could not perform database validation",
      "long_description": "The system couldn't perform the database validation, please fill the required fields for this country to automatically proceed with database validation.",
      "node_id": "feature_db_validation_1"
    }
  ]
}
```

Isi kolom yang hilang dari halaman detail sesi di Konsol — menyimpannya akan memicu ulang pemeriksaan secara otomatis dan menghapus peringatan jika berhasil.

## Terkait

* [Gambaran umum Validasi Database](https://docs.didit.me/id/core-technology/database-validation/overview.md) — cara kerja API dari awal hingga akhir dan registri yang didukung.
* [Metode pencocokan](https://docs.didit.me/id/core-technology/database-validation/database-validation-matching-methods.md) — bagaimana hasil 1×1 / 2×2 (`validation_type: one_by_one` / `two_by_two`) diturunkan.
* [Kode hasil](https://docs.didit.me/id/core-technology/database-validation/database-validation-outcome-codes.md) — taksonomi lengkap per hasil beserta kode detail khusus negara.
* [Negara & layanan yang didukung](https://docs.didit.me/id/core-technology/database-validation/database-validation-supported-countries.md) — setiap registri aktif, kolom wajib, dan harga per panggilan.
* [Peringatan Validasi Database](https://docs.didit.me/id/core-technology/database-validation/database-validation-warnings.md) — apa yang kami tampilkan ketika layanan tidak dapat berjalan.
* [Model data — validasi database](https://docs.didit.me/id/reference/data-models.md#validasi-database) — skema kanonikal kolom demi kolom.


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