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

# Nigeria National ID + Selfie (NIMC)

> Verifies a Nigerian National Identification Number (NIN) against the National Identity Management Commission register. Requires a selfie: the enrolment portrait held against the NIN is face-matched with it, and the record is only returned when the two are the same person. Authoritative real-time identity lookup for Nigeria. Real-time lookup, pay-per-call.

<div hidden data-didit-db-validation-defaults="{&#x22;issuing_state&#x22;:&#x22;NGA&#x22;,&#x22;services&#x22;:&#x22;nga_national_id_facial&#x22;,&#x22;national_id&#x22;:&#x22;11111111111&#x22;,&#x22;vendor_data&#x22;:&#x22;user-1234&#x22;}" />

Verifies a Nigerian National Identification Number (NIN) against the National Identity Management Commission register. Requires a selfie: the enrolment portrait held against the NIN is face-matched with it, and the record is only returned when the two are the same person. Didit exposes this service through `POST /v3/database-validation/` so you can verify the submitted data against the authoritative source and receive normalized match results.

## Coverage

* **Coverage:** \~ 100%
* **Country:** Nigeria
* **Service ID:** `nga_national_id_facial`
* **Data domain:** Identity
* **Category:** NationalIDRegistry

## Inputs

| Field | Required | Example |
| - | -: | - |
| `national_id` | Yes | `11111111111` |
| `selfie` | Yes | `@./selfie.jpg` |
| `first_name` | No | `John` |
| `last_name` | No | `Doe` |
| `date_of_birth` | No | `1990-01-01` |
| `vendor_data` | No | `user-1234` |

* **Required inputs:** `national_id`, `selfie`
* **Optional inputs:** `first_name`, `last_name`, `date_of_birth`, `vendor_data`
* **Consent:** Not required
* **Workflow availability:** Available in workflow
* **Coverage:** \~ 100%
* **Price:** \$0.35 per successful query

Not every document this service accepts carries the identifier it queries by. When the identifier is not extracted from the document the check is recorded as **not applicable** - no database is queried and you are not charged - which for some countries is a large share of real users. To cover them, also collect the identifier from a Questionnaire answer, a Document AI extraction field, or a value you send when you create the session, and map it on the Database Validation step.

## Body parameters

<ParamField body="issuing_state" type="string" required default="NGA" placeholder="NGA">
  ISO 3166-1 alpha-3 country code for this database service.

  Example: `NGA`
</ParamField>

<ParamField body="services" type="string" required default="nga_national_id_facial" placeholder="nga_national_id_facial">
  Array containing this service ID. Pinning the service keeps the request scoped to this exact database.

  Example: `nga_national_id_facial`
</ParamField>

<ParamField body="national_id" type="string" required default="11111111111" placeholder="11111111111">
  National identity number for this service.

  Example: `11111111111`
</ParamField>

<ParamField body="selfie" type="file" required placeholder="@./selfie.jpg">
  Selfie image file to upload for biometric database validation. Accepted formats: JPEG, PNG, or WebP.

  Example: `@./selfie.jpg`
</ParamField>

<ParamField body="first_name" type="string" placeholder="John">
  Given name to validate.

  Example: `John`
</ParamField>

<ParamField body="last_name" type="string" placeholder="Doe">
  Family name to validate.

  Example: `Doe`
</ParamField>

<ParamField body="date_of_birth" type="string" placeholder="1990-01-01">
  Date of birth in `YYYY-MM-DD` format.

  Example: `1990-01-01`
</ParamField>

<ParamField body="vendor_data" type="string" default="user-1234" placeholder="user-1234">
  Your stable user reference for this person, such as your internal user ID. Didit uses it to link standalone checks to the same end user and reduce duplicate-detection noise.

  Example: `user-1234`
</ParamField>

## Input rules & validation notes

* `first_name` must match `[A-Za-zÀ-ÖØ-öø-ÿ .'-]+`.
* `national_id` must contain digits only; remove spaces, hyphens, and punctuation before sending the request.
* `national_id` must be exactly 11 characters long.

## How to call it

<RequestExample>
  ```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"
  ```
</RequestExample>

<ResponseExample>
  Every successful call returns HTTP `200`. The **`outcome_code`** field tells you what actually happened — distinguishing, for example, a real biometric mismatch (`BIOMETRIC_NO_MATCH`) from a selfie that could not be read (`BIOMETRIC_IMAGE_UNUSABLE`). The `status` shown is the default feature status; your configured [Partial Match / No Match actions](/core-technology/database-validation/database-validation-warnings) can override it.

  **`MATCH`** — The registry confirmed the identity and every checked field matched.

  ```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`** — The selfie matched the registered photo and the NIN is on record, but a name or date of birth you sent differs from the NIMC record. The record is returned so you can see which field differs.

  ```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`** — The NIN is on record, but the selfie is not the same person as the NIMC enrolment photo (face-match score below the acceptance threshold). Nothing from the record is returned - only the 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`** — The NIN is on record, but the face match could not be made - no enrolment photo on file, or no face detected. Nothing from the record is returned, `match_type` is null and the check is sent to review.

  ```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`** — The NIN is well formed but the NIMC register holds no record for it. The lookup is charged.

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

## Returned data

The exact fields surfaced in `source_data` depend on what the registry returns. The generated example for `nga_national_id_facial` currently documents this normalized shape:

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

## Pricing & SLAs

Nigeria National ID + Selfie (NIMC) queries are billed only when Didit receives a conclusive result from the validation source.

* **Per-call price:** \$0.35 USD.
* **Billing:** per successful query. You are not charged when the registry is unreachable, when required fields are missing, or when the request is rejected before reaching the source.
* **Latency:** typical p95 \< 2 s.
* **Availability:** 99.9% per quarter on Didit's side; downstream source availability varies by country and dataset.

## Selfie and face match

The NIMC register answers a valid NIN with the holder's full record, so knowing a number is not proof of being its owner. Every lookup is therefore tied to a selfie: it is face-matched against the enrolment photo NIMC holds for that NIN, and the record is returned only when both are the same person.

* **Match:** `source_data` carries the NIMC record and `face_match_score`. Names and date of birth you send are compared against it and reported in `validation`; send them to get a name and date-of-birth verdict, or omit them and read the registry's values from `source_data`.
* **Different person:** `BIOMETRIC_NO_MATCH`. Only `face_match_score` is returned - no personal data.
* **Match not possible:** `INCONCLUSIVE` when NIMC holds no photo for the NIN or no face could be found. Nothing is returned and the check is sent to review.
* **Unknown NIN:** `DOCUMENT_NOT_FOUND`. The lookup is charged.

In a workflow the selfie is taken from the liveness or face-match step, or from the portrait on the uploaded document when the workflow has no face step. A request without a selfie, or with a NIN that is not 11 digits, is rejected before anything is charged.

## Continue reading

* [Nigeria Database Validation overview](/api-reference/database-validation/nigeria)
* [Database Validation overview](/core-technology/database-validation/overview)
* [Outcome Codes](/core-technology/database-validation/database-validation-outcome-codes)


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