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

# Verifikasi NIN + Swafoto Nigeria (NIMC) API

> NIN + Swafoto Nigeria (NIMC): pencarian database resmi Nigeria melalui Didit. Mulai $0.35 per panggilan, tanpa kontrak, tanpa minimum.

Memverifikasi Nomor Identitas Nasional (NIN) Nigeria terhadap registri National Identity Management Commission. Diperlukan swafoto: foto pendaftaran yang tersimpan bersama NIN dicocokkan dengan wajah dalam swafoto, dan catatan hanya dikembalikan jika keduanya merupakan orang yang sama. Didit menyediakan layanan ini melalui `POST /v3/database-validation/` sehingga Anda dapat memverifikasi data yang dikirim terhadap sumber otoritatif dan menerima hasil pencocokan yang ternormalisasi.

## Cakupan

* **Cakupan:** \~ 100%
* **Negara:** Nigeria
* **ID layanan:** `nga_national_id_facial`
* **Domain data:** Identitas
* **Kategori:** NationalIDRegistry

## Input

| Kolom | Wajib | Contoh |
| - | -: | - |
| `national_id` | Ya | `11111111111` |
| `selfie` | Ya | `@./selfie.jpg` |
| `first_name` | Tidak | `John` |
| `last_name` | Tidak | `Doe` |
| `date_of_birth` | Tidak | `1990-01-01` |
| `vendor_data` | Tidak | `user-1234` |

* **Input wajib:** `national_id`, `selfie`
* **Input opsional:** `first_name`, `last_name`, `date_of_birth`, `vendor_data`
* **Persetujuan:** Tidak diperlukan
* **Ketersediaan dalam alur kerja:** Tersedia dalam alur kerja
* **Cakupan:** \~ 100%
* **Harga:** \$0.35 per kueri yang berhasil

Tidak setiap dokumen yang diterima layanan ini memuat pengenal yang digunakan untuk kueri. Jika pengenal tidak diekstrak dari dokumen, pemeriksaan dicatat sebagai **tidak berlaku**: tidak ada database yang dikueri dan Anda tidak dikenai biaya. Untuk beberapa negara, kondisi ini mencakup porsi besar pengguna sungguhan. Untuk menjangkau mereka, kumpulkan juga pengenal tersebut dari jawaban Kuesioner, kolom hasil ekstraksi Document AI, atau nilai yang Anda kirim saat membuat sesi, lalu petakan pada langkah Validasi Database.

## Parameter body

**issuing\_state** `string` *required* (default: NGA)

Kode negara ISO 3166-1 alpha-3 untuk layanan database ini.

Contoh: `NGA`

**services** `string` *required* (default: nga\_national\_id\_facial)

Array yang berisi ID layanan ini. Mengunci layanan memastikan permintaan hanya berlaku untuk database yang tepat ini.

Contoh: `nga_national_id_facial`

**national\_id** `string` *required* (default: 11111111111)

Nomor identitas nasional untuk layanan ini.

Contoh: `11111111111`

**selfie** `file` *required*

File gambar swafoto yang diunggah untuk validasi database biometrik. Format yang diterima: JPEG, PNG, atau WebP.

Contoh: `@./selfie.jpg`

**first\_name** `string`

Nama depan yang akan divalidasi.

Contoh: `John`

**last\_name** `string`

Nama keluarga yang akan divalidasi.

Contoh: `Doe`

**date\_of\_birth** `string`

Tanggal lahir dalam format `YYYY-MM-DD`.

Contoh: `1990-01-01`

**vendor\_data** `string` (default: user-1234)

Referensi pengguna Anda yang stabil untuk orang ini, misalnya ID pengguna internal Anda. Didit menggunakannya untuk menautkan pemeriksaan terpisah ke pengguna akhir yang sama dan mengurangi gangguan dalam deteksi duplikat.

Contoh: `user-1234`

## Aturan input & catatan validasi

* `first_name` harus cocok dengan `[A-Za-zÀ-ÖØ-öø-ÿ .'-]+`.
* `national_id` hanya boleh berisi angka; hapus spasi, tanda hubung, dan tanda baca sebelum mengirim permintaan.
* `national_id` harus tepat 11 karakter.

## Cara memanggilnya

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=NGA" \
  -F "services=nga_national_id_facial" \
  -F "vendor_data=user-1234" \
  -F "national_id=11111111111" \
  -F "selfie=@./selfie.jpg"
```

```python Python theme={null}
from didit import Didit

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="NGA",
    services=["nga_national_id_facial"],
    national_id="11111111111",
    vendor_data="user-1234",
    selfie=open("selfie.jpg", "rb"),
)
print(result)
```

```javascript Node.js theme={null}
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

// Reads DIDIT_API_KEY.
const didit = new Didit();

const result = await didit.databaseValidation.validate({
  issuing_state: "NGA",
  services: ["nga_national_id_facial"],
  national_id: "11111111111",
  vendor_data: "user-1234",
  selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
```

```go Go theme={null}
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()

result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
	IssuingState: "NGA",
	Services:     didit.Some([]string{"nga_national_id_facial"}),
	NationalID:   didit.String("11111111111"),
	VendorData:   didit.String("user-1234"),
	Selfie:       didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
import java.nio.file.Path;
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;

// Reads DIDIT_API_KEY.
Didit client = new Didit();

var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
        .issuingState("NGA")
        .services(List.of("nga_national_id_facial"))
        .nationalId("11111111111")
        .vendorData("user-1234")
        .selfie(Path.of("selfie.jpg"))
        .build());
System.out.println(result);
```

```php PHP theme={null}
<?php

require 'vendor/autoload.php';

use Didit\DiditClient;
use Didit\File;

// Reads DIDIT_API_KEY.
$didit = new DiditClient();

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'NGA',
    'services' => ['nga_national_id_facial'],
    'national_id' => '11111111111',
    'vendor_data' => 'user-1234',
    'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
```

```ruby Ruby theme={null}
require "didit"

# Reads DIDIT_API_KEY.
didit = Didit::Client.new

result = didit.database_validation.validate(
  issuing_state: "NGA",
  services: ["nga_national_id_facial"],
  national_id: "11111111111",
  vendor_data: "user-1234",
  selfie: Pathname("selfie.jpg")
)
puts result.to_h
```

```csharp .NET theme={null}
using System;
using System.Text.Json;
using Didit;

// Reads DIDIT_API_KEY.
using var client = new DiditClient();

var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
    IssuingState = "NGA",
    Services = new string[] { "nga_national_id_facial" },
    NationalId = "11111111111",
    VendorData = "user-1234",
    Selfie = FileUpload.FromPath("selfie.jpg"),
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

Setiap panggilan yang berhasil mengembalikan HTTP `200`. Kolom **`outcome_code`** memberi tahu Anda apa yang sebenarnya terjadi, misalnya membedakan ketidakcocokan biometrik nyata (`BIOMETRIC_NO_MATCH`) dari swafoto yang tidak dapat dibaca (`BIOMETRIC_IMAGE_UNUSABLE`). `status` yang ditampilkan adalah status fitur bawaan; [tindakan Partial Match / No Match](https://docs.didit.me/id/core-technology/database-validation/database-validation-warnings.md) yang Anda konfigurasi dapat menggantinya.

**`MATCH`**: Registri mengonfirmasi identitas dan setiap kolom yang diperiksa cocok.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "NGA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "address": "1 SAMPLE STREET",
        "birth_country": "nigeria",
        "birth_lga": "Ikeja",
        "birth_state": "Lagos",
        "date_of_birth": "1990-01-01",
        "face_match_score": 92.4,
        "first_name": "JOHN",
        "gender": "Male",
        "identification_number": "11111111111",
        "last_name": "DOE",
        "marital_status": "single",
        "middle_name": "SAMUEL",
        "phone_number": "08000000000",
        "photo_available": true,
        "residence_lga": "Ikeja",
        "residence_state": "Lagos",
        "residence_town": "IKEJA"
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: Swafoto cocok dengan foto yang terdaftar dan NIN terdaftar, tetapi nama atau tanggal lahir yang Anda kirim berbeda dengan catatan NIMC. Catatan dikembalikan agar Anda dapat melihat kolom mana yang berbeda.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "address": "1 SAMPLE STREET",
        "birth_country": "nigeria",
        "birth_lga": "Ikeja",
        "birth_state": "Lagos",
        "date_of_birth": "1990-02-01",
        "face_match_score": 92.4,
        "first_name": "JOHN",
        "gender": "Male",
        "identification_number": "11111111111",
        "last_name": "DOE",
        "marital_status": "single",
        "middle_name": "SAMUEL",
        "phone_number": "08000000000",
        "photo_available": true,
        "residence_lga": "Ikeja",
        "residence_state": "Lagos",
        "residence_town": "IKEJA"
      },
      "validation": {
        "date_of_birth": "no_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`BIOMETRIC_NO_MATCH`**: NIN terdaftar, tetapi swafoto bukan orang yang sama dengan foto pendaftaran NIMC (skor pencocokan wajah berada di bawah ambang batas penerimaan). Tidak ada data dari catatan yang dikembalikan, hanya skor.

```json 200 OK — BIOMETRIC_NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "face_match_score": 12.5,
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`INCONCLUSIVE`**: NIN terdaftar, tetapi pencocokan wajah tidak dapat dilakukan karena tidak ada foto pendaftaran yang tersimpan atau tidak ada wajah yang terdeteksi. Tidak ada data dari catatan yang dikembalikan, `match_type` bernilai null, dan pemeriksaan dikirim ke peninjauan.

```json 200 OK — INCONCLUSIVE theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": null,
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {},
      "validation": {}
    }
  ]
}
```

**`DOCUMENT_NOT_FOUND`**: NIN memiliki format yang benar, tetapi registri NIMC tidak memiliki catatan untuknya. Kueri tetap dikenai biaya.

```json 200 OK — DOCUMENT_NOT_FOUND theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "DOCUMENT_NOT_FOUND",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

## Data yang dikembalikan

Kolom yang ditampilkan di `source_data` bergantung pada apa yang dikembalikan registri. Contoh yang dihasilkan untuk `nga_national_id_facial` saat ini mendokumentasikan bentuk ternormalisasi berikut:

* `address`
* `birth_country`
* `birth_lga`
* `birth_state`
* `date_of_birth`
* `face_match_score`
* `first_name`
* `gender`
* `identification_number`
* `last_name`
* `marital_status`
* `middle_name`
* `phone_number`
* `photo_available`
* `residence_lga`
* `residence_state`
* `residence_town`

## Harga & SLA

Kueri Nigeria National ID + Selfie (NIMC) hanya ditagih ketika Didit menerima hasil konklusif dari sumber validasi.

* **Harga per panggilan:** \$0.35 USD.
* **Penagihan:** per kueri yang berhasil. Anda tidak dikenai biaya ketika registri tidak dapat dijangkau, ketika kolom wajib tidak diisi, atau ketika permintaan ditolak sebelum mencapai sumber.
* **Latensi:** p95 tipikal \< 2 s.
* **Ketersediaan:** 99.9% per kuartal di sisi Didit; ketersediaan sumber hilir bervariasi menurut negara dan kumpulan data.

## Swafoto dan pencocokan wajah

Registri NIMC merespons NIN yang valid dengan catatan lengkap pemegangnya, sehingga mengetahui sebuah nomor tidak membuktikan bahwa seseorang adalah pemiliknya. Oleh karena itu, setiap pencarian dikaitkan dengan swafoto: swafoto dicocokkan dengan foto pendaftaran yang dimiliki NIMC untuk NIN tersebut, dan catatan hanya dikembalikan jika keduanya berasal dari orang yang sama.

* **Cocok:** `source_data` memuat catatan NIMC dan `face_match_score`. Nama dan tanggal lahir yang Anda kirim dibandingkan dengan data tersebut dan dilaporkan di `validation`. Kirimkan keduanya untuk mendapatkan putusan nama dan tanggal lahir, atau hilangkan dan baca nilai registri dari `source_data`.
* **Orang berbeda:** `BIOMETRIC_NO_MATCH`. Hanya `face_match_score` yang dikembalikan, tanpa data pribadi.
* **Pencocokan tidak memungkinkan:** `INCONCLUSIVE` ketika NIMC tidak memiliki foto untuk NIN tersebut atau tidak ada wajah yang dapat ditemukan. Tidak ada yang dikembalikan, dan pemeriksaan dikirim untuk ditinjau.
* **NIN tidak dikenal:** `DOCUMENT_NOT_FOUND`. Pencarian tetap ditagih.

Dalam alur kerja, swafoto diambil dari langkah Deteksi Liveness atau pencocokan wajah, atau dari potret pada dokumen yang diunggah ketika alur kerja tidak memiliki langkah yang menggunakan wajah. Permintaan tanpa swafoto, atau dengan NIN yang bukan 11 digit, ditolak sebelum ada yang ditagih.

## Lanjut membaca

* [Ikhtisar Validasi Database Nigeria](https://docs.didit.me/api-reference/database-validation/nigeria.md)
* [Ikhtisar Validasi Database](https://docs.didit.me/id/core-technology/database-validation/overview.md)
* [Kode Hasil](https://docs.didit.me/id/core-technology/database-validation/database-validation-outcome-codes.md)


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