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

# Vérification NIMC Nigeria : API ID nationale et selfie

> Vérification NIMC nigériane et selfie avec Didit, via la base de données officielle. Dès $0.35 par appel, sans contrat ni minimum.

Vérifie un numéro d'identification nationale nigérian (NIN) auprès du registre de la National Identity Management Commission. Un selfie est requis : le portrait d'enrôlement associé au NIN fait l'objet d'une correspondance faciale avec le selfie, et l'enregistrement n'est renvoyé que si les deux correspondent à la même personne. Didit expose ce service via `POST /v3/database-validation/` afin que vous puissiez vérifier les données soumises auprès de la source faisant autorité et recevoir des résultats de correspondance normalisés.

## Couverture

* **Couverture :** \~ 100%
* **Pays :** Nigeria
* **ID du service :** `nga_national_id_facial`
* **Domaine de données :** Identité
* **Catégorie :** NationalIDRegistry

## Entrées

| Champ | Obligatoire | Exemple |
| - | -: | - |
| `national_id` | Oui | `11111111111` |
| `selfie` | Oui | `@./selfie.jpg` |
| `first_name` | Non | `John` |
| `last_name` | Non | `Doe` |
| `date_of_birth` | Non | `1990-01-01` |
| `vendor_data` | Non | `user-1234` |

* **Entrées obligatoires :** `national_id`, `selfie`
* **Entrées facultatives :** `first_name`, `last_name`, `date_of_birth`, `vendor_data`
* **Consentement :** Non requis
* **Disponibilité dans le workflow :** Disponible dans le workflow
* **Couverture :** \~ 100%
* **Prix :** \$0.35 par requête réussie

Tous les documents acceptés par ce service ne contiennent pas l'identifiant utilisé pour la recherche. Lorsque l'identifiant n'est pas extrait du document, la vérification est enregistrée comme **non applicable** : aucune base de données n'est interrogée et rien ne vous est facturé. Pour certains pays, cela concerne une part importante des utilisateurs réels. Pour les couvrir, collectez aussi l'identifiant à partir d'une réponse à un questionnaire, d'un champ extrait par Document AI ou d'une valeur que vous envoyez lors de la création de la session, puis associez-le à l'étape Validation en base de données.

## Paramètres du corps de requête

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

Code pays ISO 3166-1 alpha-3 de ce service de base de données.

Exemple : `NGA`

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

Tableau contenant l'ID de ce service. Fixer le service limite la requête à cette base de données précise.

Exemple : `nga_national_id_facial`

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

Numéro d'identification nationale pour ce service.

Exemple : `11111111111`

**selfie** `file` *required*

Fichier image du selfie à téléverser pour la validation biométrique en base de données. Formats acceptés : JPEG, PNG ou WebP.

Exemple : `@./selfie.jpg`

**first\_name** `string`

Prénom à valider.

Exemple : `John`

**last\_name** `string`

Nom de famille à valider.

Exemple : `Doe`

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

Date de naissance au format `YYYY-MM-DD`.

Exemple : `1990-01-01`

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

Votre référence utilisateur stable pour cette personne, par exemple votre identifiant interne. Didit l'utilise pour relier les vérifications autonomes au même utilisateur final et réduire le bruit des détections de doublons.

Exemple : `user-1234`

## Règles de saisie et notes de validation

* `first_name` doit correspondre à `[A-Za-zÀ-ÖØ-öø-ÿ .'-]+`.
* `national_id` ne doit contenir que des chiffres : supprimez les espaces, tirets et signes de ponctuation avant d'envoyer la requête.
* `national_id` doit comporter exactement 11 caractères.

## Comment l'appeler

```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));
```

Chaque appel réussi renvoie HTTP `200`. Le champ **`outcome_code`** indique ce qui s'est réellement passé : il distingue par exemple une véritable non-correspondance biométrique (`BIOMETRIC_NO_MATCH`) d'un selfie illisible (`BIOMETRIC_IMAGE_UNUSABLE`). Le `status` affiché est le statut par défaut de la fonctionnalité ; vos [actions configurées pour les correspondances partielles / les absences de correspondance](https://docs.didit.me/fr/core-technology/database-validation/database-validation-warnings.md) peuvent le remplacer.

**`MATCH`** : le registre a confirmé l'identité et chaque champ vérifié correspond.

```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`** : le selfie correspond à la photo enregistrée et le NIN figure au registre, mais un nom ou une date de naissance que vous avez envoyé diffère de l'enregistrement NIMC. L'enregistrement est renvoyé afin que vous puissiez voir quel champ diffère.

```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`** : le NIN figure au registre, mais le selfie ne correspond pas à la personne de la photo d'enrôlement NIMC (score de correspondance faciale inférieur au seuil d'acceptation). Aucune donnée de l'enregistrement n'est renvoyée, seulement le score.

```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`** : le NIN figure au registre, mais la correspondance faciale n'a pas pu être effectuée, car aucune photo d'enrôlement n'est disponible ou aucun visage n'a été détecté. Aucune donnée de l'enregistrement n'est renvoyée, `match_type` est null et la vérification est envoyée pour examen.

```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`** : le NIN est correctement formé, mais le registre NIMC ne contient aucun enregistrement pour ce NIN. La recherche est facturée.

```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"
      }
    }
  ]
}
```

## Données renvoyées

Les champs exacts exposés dans `source_data` dépendent de ce que renvoie le registre. L'exemple généré pour `nga_national_id_facial` documente actuellement cette structure normalisée :

* `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`

## Tarifs et SLA

Les requêtes Nigeria National ID + Selfie (NIMC) ne sont facturées que lorsque Didit reçoit un résultat concluant de la source de validation.

* **Prix par appel :** \$0.35 USD.
* **Facturation :** par requête réussie. Aucun frais n'est facturé lorsque le registre est injoignable, lorsque des champs obligatoires sont manquants ou lorsque la requête est rejetée avant d'atteindre la source.
* **Latence :** p95 typique \< 2 s.
* **Disponibilité :** 99.9 % par trimestre côté Didit ; la disponibilité de la source en aval varie selon le pays et le jeu de données.

## Selfie et correspondance faciale

Le registre NIMC renvoie le dossier complet du titulaire pour tout NIN valide ; connaître un numéro ne prouve donc pas qu'on en est le titulaire. Chaque recherche est par conséquent liée à un selfie : il est comparé à la photo d'enrôlement que NIMC détient pour ce NIN, et le dossier n'est renvoyé que si les deux correspondent à la même personne.

* **Correspondance :** `source_data` contient le dossier NIMC et `face_match_score`. Les noms et la date de naissance que vous envoyez sont comparés à ce dossier et le résultat est indiqué dans `validation`. Envoyez-les pour obtenir un verdict sur le nom et la date de naissance, ou omettez-les et lisez les valeurs du registre dans `source_data`.
* **Personne différente :** `BIOMETRIC_NO_MATCH`. Seul `face_match_score` est renvoyé, sans aucune donnée personnelle.
* **Correspondance impossible :** `INCONCLUSIVE` lorsque NIMC ne détient aucune photo pour ce NIN ou qu'aucun visage n'a pu être détecté. Rien n'est renvoyé et la vérification est envoyée en examen manuel.
* **NIN inconnu :** `DOCUMENT_NOT_FOUND`. La recherche est facturée.

Dans un workflow, le selfie provient de l'étape de détection du vivant ou de correspondance faciale, ou du portrait figurant sur le document téléversé lorsque le workflow ne comporte pas d'étape faciale. Une requête sans selfie, ou avec un NIN ne comportant pas 11 chiffres, est rejetée avant toute facturation.

## Pour aller plus loin

* [Vue d'ensemble de la validation en base de données au Nigeria](https://docs.didit.me/api-reference/database-validation/nigeria.md)
* [Vue d'ensemble de la validation en base de données](https://docs.didit.me/fr/core-technology/database-validation/overview.md)
* [Codes de résultat](https://docs.didit.me/fr/core-technology/database-validation/database-validation-outcome-codes.md)


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