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

# Non-Document Lookup

> Verify without a document: the user types their national ID number and a few details, checked against the authoritative source named for that country.

Non-doc lookup is one of the three [ID Verification methods](/core-technology/id-verification/verification-methods). Instead of photographing a document, the user types their national ID number plus a few personal details, and Didit checks them against the authoritative source for that country.

The result carries the assurance tier `data_match`: the details the user gave matched a record that source holds. No document was inspected, so nothing about a document's authenticity is being claimed.

## Which source is queried

Most countries are a government register — the Department of Home Affairs in South Africa, RENAPER in Argentina, UIDAI in India, the CPR register in Denmark. **Some are not.** In Canada, France, Indonesia, the Netherlands, Norway, Singapore, the United Kingdom and the United States the authoritative record Didit can reach is a credit-bureau, financial-services, utility or residential-records file rather than a state register.

That distinction is not cosmetic. It changes what the match proves, which consent regime the query runs under, and what you can tell a regulator about provenance, so this page never generalises: the **Source queried** column below names the exact source for every country, and it is the only statement of provenance to rely on. Read it before you enable a country.

<Note>
  The end user never sees the source name. It is on the session payload (`id_lookup.source`), in the console and in exports, for you and your auditors.
</Note>

## What the user does

1. Picks their country in the ID step.
2. Types the fields that country asks for — always the identifier, usually a name, sometimes a date of birth or an address.
3. Where the source returns a portrait, takes a selfie.
4. Gets a result: verified and moved on, asked to correct the number, retried, sent to document capture, or declined.

The whole step is typing and, for four countries, one selfie. There is no upload, no camera framing and no document at all.

## Sources that return a portrait

Four sources return the person's photograph: **South Africa**, **Nigeria**, **Argentina** and **Panama** — all four government registers. For those countries the user is asked for a selfie, [passive liveness](/core-technology/liveness/overview) runs on it, and it is face-matched to the registry portrait. All three happen inside the lookup and inside the lookup price — there is no separate Liveness or Face Match charge.

Because the lookup already proved a live person matching the register's photograph (all four are government registers), the country's `skip_liveness_and_face_match` switch (on by default) lets the workflow skip its own Liveness and Face Match steps after a match. Turn it off to run them anyway.

Every other source returns data only. There is no portrait to compare against, so no selfie is taken and the switch is normalised off on save. Add [Liveness](/core-technology/liveness/overview) and [Face Match](/core-technology/face-match/overview) as their own workflow steps if a biometric check matters in those countries — Face Match then needs a portrait from somewhere else in the workflow.

## Coverage and sources

| Country            | Code  | Source queried                                         | Availability | Selfie, liveness and face match | Consent regime            | Price      |
| ------------------ | ----- | ------------------------------------------------------ | ------------ | ------------------------------- | ------------------------- | ---------- |
| Argentina          | `ARG` | RENAPER                                                | Available    | Included in the lookup          | Ley 25.326                | On request |
| Bolivia            | `BOL` | SEGIP                                                  | Available    | Not applicable — data only      | —                         | On request |
| Brazil             | `BRA` | Receita Federal                                        | Available    | Not applicable — data only      | LGPD                      | On request |
| Cambodia           | `KHM` | Ministry of Interior voter register                    | Available    | Not applicable — data only      | Explicit consent required | On request |
| Canada             | `CAN` | Canadian credit bureau records (FINTRAC dual-process)  | Available    | Not applicable — data only      | PIPEDA                    | On request |
| Chile              | `CHL` | Servicio de Registro Civil e Identificación            | Available    | Not applicable — data only      | —                         | On request |
| China              | `CHN` | NCIIC (National Citizen Identity Information Center)   | Available    | Not applicable — data only      | Explicit consent required | On request |
| Colombia           | `COL` | Registraduría General de la Nación / ANI               | Available    | Not applicable — data only      | —                         | On request |
| Costa Rica         | `CRI` | Tribunal Supremo de Elecciones                         | Available    | Not applicable — data only      | —                         | On request |
| Denmark            | `DNK` | CPR register                                           | Available    | Not applicable — data only      | —                         | On request |
| Dominican Republic | `DOM` | Junta Central Electoral                                | Available    | Not applicable — data only      | —                         | On request |
| Ecuador            | `ECU` | Registro Civil del Ecuador                             | Available    | Not applicable — data only      | —                         | On request |
| El Salvador        | `SLV` | RNPN                                                   | Available    | Not applicable — data only      | —                         | On request |
| Finland            | `FIN` | DVV population register                                | Available    | Not applicable — data only      | Explicit consent required | On request |
| France             | `FRA` | French residential and utility records                 | Available    | Not applicable — data only      | GDPR                      | On request |
| Guatemala          | `GTM` | SAT                                                    | Available    | Not applicable — data only      | —                         | On request |
| Honduras           | `HND` | CNE                                                    | Available    | Not applicable — data only      | —                         | On request |
| India              | `IND` | UIDAI (Aadhaar)                                        | Available    | Not applicable — data only      | Aadhaar consent           | On request |
| Indonesia          | `IDN` | Indonesian population register via residential records | Available    | Not applicable — data only      | UU PDP                    | On request |
| Kenya              | `KEN` | IPRS (Integrated Population Registration System)       | Available    | Not applicable — data only      | —                         | On request |
| Malaysia           | `MYS` | JPN (National Registration Department)                 | Available    | Not applicable — data only      | Explicit consent required | On request |
| Mexico             | `MEX` | RENAPO                                                 | Available    | Not applicable — data only      | —                         | On request |
| Netherlands        | `NLD` | Dutch residential records                              | Available    | Not applicable — data only      | GDPR                      | On request |
| Nigeria            | `NGA` | NIMC / NIBSS                                           | Available    | Included in the lookup          | NDPR                      | On request |
| Norway             | `NOR` | Norwegian residential records                          | Available    | Not applicable — data only      | GDPR                      | On request |
| Panama             | `PAN` | Tribunal Electoral / SIB                               | Available    | Included in the lookup          | —                         | On request |
| Paraguay           | `PRY` | Registro del Estado Civil                              | Available    | Not applicable — data only      | —                         | On request |
| Peru               | `PER` | RENIEC                                                 | Available    | Not applicable — data only      | —                         | On request |
| Singapore          | `SGP` | Singapore credit bureau and utility records            | Available    | Not applicable — data only      | PDPA                      | On request |
| South Africa       | `ZAF` | Department of Home Affairs                             | Available    | Included in the lookup          | POPIA                     | On request |
| Sweden             | `SWE` | Skatteverket population register                       | Available    | Not applicable — data only      | —                         | On request |
| Thailand           | `THA` | DOPA civil registration                                | Available    | Not applicable — data only      | Explicit consent required | On request |
| United Kingdom     | `GBR` | UK credit bureau and financial services records        | Available    | Not applicable — data only      | UK GDPR                   | On request |
| United States      | `USA` | US credit bureau and financial services records        | Available    | Not applicable — data only      | GLBA permissible purpose  | On request |
| Uruguay            | `URY` | Dirección Nacional del Registro de Estado Civil        | Available    | Not applicable — data only      | —                         | On request |
| Venezuela          | `VEN` | CNE                                                    | Available    | Not applicable — data only      | —                         | On request |

<Note>
  Availability comes from the capability catalog the backend serves; the API rejects a workflow that enables a lookup the catalog does not mark `Available` for that country. Prices marked **On request** are not published yet — non-document methods are priced per country and quoted by your account team.
</Note>

## Format rules

Identifier fields carry a client-side format check before anything is sent — a length, a digit-only rule, a checksum or a pattern, depending on the country. A number that fails it never reaches the source, which means it is **never billed and never counted against `max_attempts`**: the user is shown a country-specific message and asked to correct it.

The per-country tables below list the rule for each field. A field with no rule is free text — a name, a date the interface collects, or an image capture.

Get the format right in your own pre-fill and you spend nothing on typos.

## Per-country fields

#### Argentina (`ARG`)

Source: **RENAPER**. The source returns a portrait, so a selfie is taken, passive liveness runs on it and it is face-matched to that portrait inside the lookup.

| Asked for     | Field key         | Required | Format check                |
| ------------- | ----------------- | -------- | --------------------------- |
| Argentine DNI | `document_number` | Yes      | 7-8 characters; digits only |
| Selfie        | `selfie`          | Yes      | —                           |
| Gender        | `gender`          | Yes      | One of `M`, `F`             |

| Returned          | Field key           | Required |
| ----------------- | ------------------- | -------- |
| Full name         | `full_name`         | Yes      |
| Date of birth     | `date_of_birth`     | Yes      |
| Registry portrait | `registry_portrait` | No       |
| Gender            | `gender`            | No       |
| Address           | `address`           | No       |
| Record status     | `record_status`     | No       |
| Source name       | `source_name`       | No       |
| Queried at        | `queried_at`        | No       |

#### Bolivia (`BOL`)

Source: **SEGIP**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key         | Required | Format check                 |
| ------------- | ----------------- | -------- | ---------------------------- |
| Bolivian CI   | `document_number` | Yes      | 6-10 characters; digits only |
| Date of birth | `date_of_birth`   | Yes      | —                            |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Brazil (`BRA`)

Source: **Receita Federal**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check                       |
| ------------- | --------------- | -------- | ---------------------------------- |
| Brazilian CPF | `tax_number`    | Yes      | Exactly 11 characters; digits only |
| Date of birth | `date_of_birth` | Yes      | —                                  |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Cambodia (`KHM`)

Source: **Ministry of Interior voter register**. This source returns data only, so there is no portrait to face-match against.

| Asked for       | Field key       | Required | Format check         |                      |
| --------------- | --------------- | -------- | -------------------- | -------------------- |
| First name      | `first_name`    | Yes      | —                    |                      |
| Last name       | `last_name`     | Yes      | —                    |                      |
| Date of birth   | `date_of_birth` | Yes      | —                    |                      |
| Voter ID number | `voter_id`      | Yes      | Pattern \`(?:\d{8,9} | \d{2}-\d{3}-\d{3})\` |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Canada (`CAN`)

Source: **Canadian credit bureau records (FINTRAC dual-process)**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check |
| ------------- | --------------- | -------- | ------------ |
| First name    | `first_name`    | Yes      | —            |
| Last name     | `last_name`     | Yes      | —            |
| Date of birth | `date_of_birth` | Yes      | —            |
| Home address  | `address`       | Yes      | —            |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Chile (`CHL`)

Source: **Servicio de Registro Civil e Identificación**. This source returns data only, so there is no portrait to face-match against.

| Asked for   | Field key         | Required | Format check    |
| ----------- | ----------------- | -------- | --------------- |
| Chilean RUT | `personal_number` | Yes      | 8-12 characters |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### China (`CHN`)

Source: **NCIIC (National Citizen Identity Information Center)**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check      |                  |
| ------------------ | --------------- | -------- | ----------------- | ---------------- |
| Full name          | `full_name`     | Yes      | —                 |                  |
| Date of birth      | `date_of_birth` | Yes      | —                 |                  |
| National ID number | `national_id`   | Yes      | Pattern \`(\d{15} | \d{17}\[\dXx])\` |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Colombia (`COL`)

Source: **Registraduría General de la Nación / ANI**. This source returns data only, so there is no portrait to face-match against.

| Asked for        | Field key         | Required | Format check                 |
| ---------------- | ----------------- | -------- | ---------------------------- |
| Colombian Cédula | `personal_number` | Yes      | 6-11 characters; digits only |
| Date of issue    | `date_of_issue`   | Yes      | —                            |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Costa Rica (`CRI`)

Source: **Tribunal Supremo de Elecciones**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key         | Required | Format check                 |
| ------------------ | ----------------- | -------- | ---------------------------- |
| Costa Rican Cédula | `personal_number` | Yes      | 9-12 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Denmark (`DNK`)

Source: **CPR register**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check           |
| ------------------ | --------------- | -------- | ---------------------- |
| First name         | `first_name`    | Yes      | —                      |
| Last name          | `last_name`     | Yes      | —                      |
| Date of birth      | `date_of_birth` | Yes      | —                      |
| National ID number | `national_id`   | Yes      | Pattern `\d{6}-?\d{4}` |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Dominican Republic (`DOM`)

Source: **Junta Central Electoral**. This source returns data only, so there is no portrait to face-match against.

| Asked for        | Field key         | Required | Format check                       |
| ---------------- | ----------------- | -------- | ---------------------------------- |
| Dominican Cédula | `personal_number` | Yes      | Exactly 11 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Ecuador (`ECU`)

Source: **Registro Civil del Ecuador**. This source returns data only, so there is no portrait to face-match against.

| Asked for         | Field key         | Required | Format check                       |
| ----------------- | ----------------- | -------- | ---------------------------------- |
| Ecuadorian Cédula | `personal_number` | Yes      | Exactly 10 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### El Salvador (`SLV`)

Source: **RNPN**. This source returns data only, so there is no portrait to face-match against.

| Asked for      | Field key         | Required | Format check                      |
| -------------- | ----------------- | -------- | --------------------------------- |
| Salvadoran DUI | `document_number` | Yes      | Exactly 9 characters; digits only |
| Date of birth  | `date_of_birth`   | Yes      | —                                 |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Finland (`FIN`)

Source: **DVV population register**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check                           |                        |
| ------------------ | --------------- | -------- | -------------------------------------- | ---------------------- |
| First name         | `first_name`    | Yes      | —                                      |                        |
| Last name          | `last_name`     | Yes      | —                                      |                        |
| Date of birth      | `date_of_birth` | Yes      | —                                      |                        |
| National ID number | `national_id`   | Yes      | Pattern \`(?:\d{6}\[-+A]\d{3}\[0-9A-Z] | \d{6}\d{3}\[0-9A-Z])\` |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### France (`FRA`)

Source: **French residential and utility records**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check |
| ------------- | --------------- | -------- | ------------ |
| First name    | `first_name`    | Yes      | —            |
| Last name     | `last_name`     | Yes      | —            |
| Date of birth | `date_of_birth` | Yes      | —            |
| Home address  | `address`       | Yes      | —            |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Guatemala (`GTM`)

Source: **SAT**. This source returns data only, so there is no portrait to face-match against.

| Asked for      | Field key         | Required | Format check                       |
| -------------- | ----------------- | -------- | ---------------------------------- |
| Guatemalan DPI | `document_number` | Yes      | Exactly 13 characters; digits only |
| Date of birth  | `date_of_birth`   | Yes      | —                                  |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Honduras (`HND`)

Source: **CNE**. This source returns data only, so there is no portrait to face-match against.

| Asked for    | Field key         | Required | Format check                       |
| ------------ | ----------------- | -------- | ---------------------------------- |
| Honduran DNI | `document_number` | Yes      | Exactly 13 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### India (`IND`)

Source: **UIDAI (Aadhaar)**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key         | Required | Format check                             |
| ------------------ | ----------------- | -------- | ---------------------------------------- |
| Full name          | `full_name`       | Yes      | —                                        |
| Date of birth      | `date_of_birth`   | Yes      | —                                        |
| National ID number | `personal_number` | Yes      | Exactly 12 characters; digits only       |
| PAN                | `pan`             | Yes      | Pattern `[A-Z]{5}\d{4}[A-Z]`; uppercased |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Indonesia (`IDN`)

Source: **Indonesian population register via residential records**. This source returns data only, so there is no portrait to face-match against.

| Asked for       | Field key       | Required | Format check                       |
| --------------- | --------------- | -------- | ---------------------------------- |
| First name      | `first_name`    | Yes      | —                                  |
| Last name       | `last_name`     | Yes      | —                                  |
| Date of birth   | `date_of_birth` | Yes      | —                                  |
| Home address    | `address`       | Yes      | —                                  |
| NIK (16 digits) | `national_id`   | Yes      | Exactly 16 characters; digits only |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Kenya (`KEN`)

Source: **IPRS (Integrated Population Registration System)**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check      |
| ------------------ | --------------- | -------- | ----------------- |
| First name         | `first_name`    | Yes      | —                 |
| Last name          | `last_name`     | Yes      | —                 |
| Date of birth      | `date_of_birth` | Yes      | —                 |
| National ID number | `national_id`   | Yes      | Pattern `\d{8,9}` |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Malaysia (`MYS`)

Source: **JPN (National Registration Department)**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check                       |
| ------------------ | --------------- | -------- | ---------------------------------- |
| Full name          | `full_name`     | Yes      | —                                  |
| Date of birth      | `date_of_birth` | Yes      | —                                  |
| National ID number | `national_id`   | Yes      | Exactly 12 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Mexico (`MEX`)

Source: **RENAPO**. This source returns data only, so there is no portrait to face-match against.

| Asked for    | Field key         | Required | Format check          |
| ------------ | ----------------- | -------- | --------------------- |
| Mexican CURP | `personal_number` | Yes      | Exactly 18 characters |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Netherlands (`NLD`)

Source: **Dutch residential records**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check |
| ------------- | --------------- | -------- | ------------ |
| First name    | `first_name`    | Yes      | —            |
| Last name     | `last_name`     | Yes      | —            |
| Date of birth | `date_of_birth` | Yes      | —            |
| Home address  | `address`       | Yes      | —            |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Nigeria (`NGA`)

Source: **NIMC / NIBSS**. The source returns a portrait, so a selfie is taken, passive liveness runs on it and it is face-matched to that portrait inside the lookup.

| Asked for         | Field key         | Required | Format check                       |
| ----------------- | ----------------- | -------- | ---------------------------------- |
| ID type           | `identifier_type` | Yes      | One of `NIN`, `BVN`                |
| The number itself | `identifier`      | Yes      | Exactly 11 characters; digits only |
| First name        | `first_name`      | Yes      | —                                  |
| Last name         | `last_name`       | Yes      | —                                  |
| Selfie            | `selfie`          | Yes      | —                                  |

| Returned              | Field key             | Required |
| --------------------- | --------------------- | -------- |
| Full name             | `full_name`           | Yes      |
| Date of birth         | `date_of_birth`       | Yes      |
| Gender                | `gender`              | No       |
| State of origin       | `state_of_origin`     | No       |
| Phone number (masked) | `phone_number_masked` | No       |
| Registry portrait     | `registry_portrait`   | No       |
| Source name           | `source_name`         | No       |
| Queried at            | `queried_at`          | No       |

#### Norway (`NOR`)

Source: **Norwegian residential records**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check |
| ------------- | --------------- | -------- | ------------ |
| First name    | `first_name`    | Yes      | —            |
| Last name     | `last_name`     | Yes      | —            |
| Date of birth | `date_of_birth` | Yes      | —            |
| Home address  | `address`       | Yes      | —            |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Panama (`PAN`)

Source: **Tribunal Electoral / SIB**. The source returns a portrait, so a selfie is taken, passive liveness runs on it and it is face-matched to that portrait inside the lookup.

| Asked for         | Field key         | Required | Format check                   |       |    |   |                                                 |
| ----------------- | ----------------- | -------- | ------------------------------ | ----- | -- | - | ----------------------------------------------- |
| Panamanian Cédula | `personal_number` | Yes      | Pattern \`(?:\d{1,2}(?:-?(?:AV | PI))? | PE | E | N)\[\d-]\*\`; at least 5 characters; uppercased |
| Selfie            | `selfie`          | Yes      | —                              |       |    |   |                                                 |

| Returned          | Field key           | Required |
| ----------------- | ------------------- | -------- |
| Full name         | `full_name`         | Yes      |
| Date of birth     | `date_of_birth`     | Yes      |
| Registry portrait | `registry_portrait` | No       |
| Gender            | `gender`            | No       |
| Address           | `address`           | No       |
| Record status     | `record_status`     | No       |
| Source name       | `source_name`       | No       |
| Queried at        | `queried_at`        | No       |

#### Paraguay (`PRY`)

Source: **Registro del Estado Civil**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key         | Required | Format check                 |
| ------------- | ----------------- | -------- | ---------------------------- |
| Paraguayan CI | `document_number` | Yes      | 6-10 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Peru (`PER`)

Source: **RENIEC**. This source returns data only, so there is no portrait to face-match against.

| Asked for    | Field key         | Required | Format check                      |
| ------------ | ----------------- | -------- | --------------------------------- |
| Peruvian DNI | `personal_number` | Yes      | Exactly 8 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Singapore (`SGP`)

Source: **Singapore credit bureau and utility records**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check                            |
| ------------- | --------------- | -------- | --------------------------------------- |
| First name    | `first_name`    | Yes      | —                                       |
| Last name     | `last_name`     | Yes      | —                                       |
| Date of birth | `date_of_birth` | Yes      | —                                       |
| Home address  | `address`       | Yes      | —                                       |
| NRIC / FIN    | `national_id`   | Yes      | Pattern `[STFGM]\d{7}[A-Z]`; uppercased |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### South Africa (`ZAF`)

Source: **Department of Home Affairs**. The source returns a portrait, so a selfie is taken, passive liveness runs on it and it is face-matched to that portrait inside the lookup.

| Asked for          | Field key     | Required | Format check                                      |
| ------------------ | ------------- | -------- | ------------------------------------------------- |
| 13-digit ID number | `national_id` | Yes      | Exactly 13 characters; digits only; LUHN checksum |
| First name         | `first_name`  | Yes      | —                                                 |
| Last name          | `last_name`   | Yes      | —                                                 |
| Selfie             | `selfie`      | Yes      | —                                                 |

| Returned                               | Field key           | Required |
| -------------------------------------- | ------------------- | -------- |
| Full name                              | `full_name`         | Yes      |
| Date of birth                          | `date_of_birth`     | Yes      |
| Gender                                 | `gender`            | No       |
| Citizenship                            | `citizenship`       | No       |
| ID status (valid, deceased or blocked) | `id_status`         | Yes      |
| Registry portrait                      | `registry_portrait` | No       |
| Source name                            | `source_name`       | No       |
| Queried at                             | `queried_at`        | No       |

#### Sweden (`SWE`)

Source: **Skatteverket population register**. This source returns data only, so there is no portrait to face-match against.

| Asked for          | Field key       | Required | Format check      |                        |
| ------------------ | --------------- | -------- | ----------------- | ---------------------- |
| First name         | `first_name`    | Yes      | —                 |                        |
| Last name          | `last_name`     | Yes      | —                 |                        |
| Date of birth      | `date_of_birth` | Yes      | —                 |                        |
| National ID number | `national_id`   | Yes      | Pattern \`(\d{10} | \d{12})\`; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Thailand (`THA`)

Source: **DOPA civil registration**. This source returns data only, so there is no portrait to face-match against.

| Asked for               | Field key       | Required | Format check                       |
| ----------------------- | --------------- | -------- | ---------------------------------- |
| First name              | `first_name`    | Yes      | —                                  |
| Last name               | `last_name`     | Yes      | —                                  |
| Date of birth           | `date_of_birth` | Yes      | —                                  |
| Thai national ID number | `national_id`   | Yes      | Exactly 13 characters; digits only |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### United Kingdom (`GBR`)

Source: **UK credit bureau and financial services records**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key       | Required | Format check |
| ------------- | --------------- | -------- | ------------ |
| First name    | `first_name`    | Yes      | —            |
| Last name     | `last_name`     | Yes      | —            |
| Date of birth | `date_of_birth` | Yes      | —            |
| Home address  | `address`       | Yes      | —            |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### United States (`USA`)

Source: **US credit bureau and financial services records**. This source returns data only, so there is no portrait to face-match against.

| Asked for                               | Field key       | Required | Format check                |
| --------------------------------------- | --------------- | -------- | --------------------------- |
| First name                              | `first_name`    | Yes      | —                           |
| Last name                               | `last_name`     | Yes      | —                           |
| Date of birth                           | `date_of_birth` | Yes      | —                           |
| Home address                            | `address`       | Yes      | —                           |
| Social Security number (last 4 or full) | `ssn`           | No       | 4-9 characters; digits only |

| Returned                                      | Field key             | Required |
| --------------------------------------------- | --------------------- | -------- |
| Name match (exact, partial or none)           | `name_match`          | Yes      |
| Date-of-birth match                           | `date_of_birth_match` | Yes      |
| Address match                                 | `address_match`       | Yes      |
| Number of sources that confirmed the identity | `sources_confirming`  | Yes      |
| Source name                                   | `source_name`         | No       |
| Queried at                                    | `queried_at`          | No       |

#### Uruguay (`URY`)

Source: **Dirección Nacional del Registro de Estado Civil**. This source returns data only, so there is no portrait to face-match against.

| Asked for     | Field key         | Required | Format check                |
| ------------- | ----------------- | -------- | --------------------------- |
| Uruguayan CI  | `personal_number` | Yes      | 7-9 characters; digits only |
| Date of birth | `date_of_birth`   | Yes      | —                           |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

#### Venezuela (`VEN`)

Source: **CNE**. This source returns data only, so there is no portrait to face-match against.

| Asked for         | Field key         | Required | Format check    |
| ----------------- | ----------------- | -------- | --------------- |
| Venezuelan Cédula | `document_number` | Yes      | 7-12 characters |

| Returned      | Field key       | Required |
| ------------- | --------------- | -------- |
| Full name     | `full_name`     | Yes      |
| Date of birth | `date_of_birth` | Yes      |
| Gender        | `gender`        | No       |
| Address       | `address`       | No       |
| Record status | `record_status` | No       |
| Source name   | `source_name`   | No       |
| Queried at    | `queried_at`    | No       |

## Consent

Several sources may only be queried with the person's explicit consent, and the consent regime differs by country — POPIA in South Africa, NDPR in Nigeria, LGPD in Brazil, UK GDPR in the United Kingdom, GLBA permissible purpose in the United States, and so on. The regime that applies to each source is in the coverage table above.

You are the controller for that consent. Collect it in your own flow, or add a [questionnaire](/core-technology/questionnaires/overview) step before the ID step, and keep the record — Didit runs the query you asked for and does not judge whether you had the right to ask for it. Where a country's source requires consent wording of its own, the verification UI shows it before the lookup runs.

## Attempts, outcomes and billing

Each answered lookup counts as one attempt. `max_attempts` is 1 to 5, default 1.

| Outcome           | Counts as an attempt | Billed | What happens next                                                                   |
| ----------------- | -------------------- | ------ | ----------------------------------------------------------------------------------- |
| `match`           | Yes                  | Yes    | The register's record becomes the ID Verification result and the workflow moves on. |
| `partial_match`   | Yes                  | Yes    | Retry while attempts remain, then `on_partial_match`.                               |
| `no_match`        | Yes                  | Yes    | Retry while attempts remain, then `on_no_match`.                                    |
| `provider_error`  | No                   | No     | Retry, then `on_provider_error`.                                                    |
| `format_rejected` | No                   | No     | The user is asked to correct the field. It never reached the register.              |

A source that answered is billed whatever it answered — the query ran and the answer is the product. A source that never answered costs nothing. When the user falls back to document capture, that capture bills on top, because two checks ran.

## What lands on the session

A lookup that matched populates the ID Verification result the same way a document read would — name, date of birth and the national identifier — and adds an `id_lookup` evidence block:

```json theme={null}
{
  "node_id": "feature_ocr_1",
  "status": "Approved",
  "verification_method": "id_lookup",
  "assurance": "data_match",
  "wallet_provider": null,
  "fallback_from": null,
  "id_lookup": {
    "source": "Department of Home Affairs",
    "checked_at": "2026-09-04T09:12:44Z",
    "attempts": 1,
    "max_attempts": 2,
    "outcome": "match",
    "comparison": [
      { "field": "identification_number", "label": "ID number", "provided": "9106155043088", "record": "9106155043088", "result": "match" },
      { "field": "full_name", "label": "Full name", "provided": "Thabo Mokoena", "record": "Thabo Mokoena", "result": "match" },
      { "field": "date_of_birth", "label": "Date of birth", "provided": "1991-06-15", "record": "1991-06-15", "result": "match" }
    ],
    "registry_portrait": "https://<media-host>/registry_portrait.jpg",
    "face_match_score": 96.4
  },
  "wallet_verification": null
}
```

`comparison` carries one row per comparable field, with `result` of `match`, `partial` or `no_match`, so a reviewer can see exactly which field disagreed. The row names are normalised — `identification_number`, `full_name`, `date_of_birth`, `address` — not the country's request field keys, because a first name and a last name are compared as one name and every identifier alias is compared as one number.

When a source does not answer, the array also carries an error row instead of a field verdict:

```json theme={null}
{ "field": "provider", "label": "Provider", "provided": null, "record": "Upstream timeout", "result": "error" }
```

Check `result` before treating a row as a field comparison: `error` is evidence about the query, never a mismatch by the user. `registry_portrait` and `face_match_score` are present only for the four sources that return a portrait.

Full field types are in the [ID verification data model](/reference/data-models#id-verification).

## Retention

The source record that produced a match is stored as the ID Verification result and follows your organization's [data retention](/console/data-retention) settings, exactly like a document read. Deleting a session deletes it; see [Delete session](/sessions-api/delete-session).

<Warning>
  Per-field retention is not available yet. `id_lookup.response_fields` accepts and validates a subset of a source's response fields, but nothing in the lookup pipeline reads it, so **every field the source returns is stored** regardless of what you select. If a particular field must never be stored, do not enable that country until this page says the selection is enforced. The field list per country is in [Per-country fields](#per-country-fields) above.
</Warning>

## Related

* [ID Verification methods](/core-technology/id-verification/verification-methods) — the three methods, fallback and billing
* [Digital ID wallets](/core-technology/id-verification/digital-id-wallets) — the cryptographic method
* [Database Validation](/core-technology/database-validation/overview) — the standalone feature for checking a document you already captured against a source
* [Workflow feature configs](/management-api/workflows/feature-configs#ocr--id-verification) — the `methods` key reference
