✓ Verified 💻 Development ✓ Enhanced Data

Didit Database Validation

Integrate Didit Database Validation API to verify personal data against government databases.

Rating
4.8 (230 reviews)
Downloads
6,424 downloads
Version
1.0.0

Overview

Integrate Didit Database Validation API to verify personal data against government databases.

Complete Documentation

View Source →

Didit Database Validation API

Overview

Verifies personal data and identity documents against trusted government and financial databases. Prevents synthetic identity fraud and ensures identity authenticity.

Key constraints:

  • Requires at least the national ID/document number for the target country
  • Coverage: 18 countries (primarily Latin America + Spain)
  • Results: full_match, partial_match, or no_match
  • Only charged per successful query — no charge if insufficient data
Matching methods:

MethodDescriptionStarting Price
1x1Single data source validation$0.05
2x2Two data sources cross-validation$0.30
API Reference: https://docs.didit.me/standalone-apis/database-validation Feature Guide: https://docs.didit.me/core-technology/database-validation/overview Supported Countries: https://docs.didit.me/core-technology/database-validation/database-validation-supported-countries


Authentication

All requests require x-api-key header. Get your key from Didit Business Console → API & Webhooks, or via programmatic registration (see below).

Getting Started (No Account Yet?)

If you don't have a Didit API key, create one in 2 API calls:

  • Register: POST https://apx.didit.me/auth/v2/programmatic/register/ with {"email": "[email protected]", "password": "MyStr0ng!Pass"}
  • Check email for a 6-character OTP code
  • Verify: POST https://apx.didit.me/auth/v2/programmatic/verify-email/ with {"email": "[email protected]", "code": "A3K9F2"} → response includes api_key
To add credits: GET /v3/billing/balance/ to check, POST /v3/billing/top-up/ with {"amount_in_dollars": 50} for a Stripe checkout link.

See the didit-verification-management skill for full platform management (workflows, sessions, users, billing).


Endpoint

text
POST https://verification.didit.me/v3/database-validation/

Headers

HeaderValueRequired
x-api-keyYour API keyYes
Content-Typeapplication/jsonYes

Body (JSON)

ParameterTypeRequiredDescription
id_numberstringYesUniversal ID number — auto-maps to correct country field
first_namestringNoFirst name for matching
last_namestringNoLast name for matching
date_of_birthstringNoDOB in YYYY-MM-DD (required for some countries)
issuing_statestringNoISO 3166-1 alpha-3 country code
save_api_requestbooleanNoSave in Business Console
vendor_datastringNoYour identifier for session tracking
The id_number field auto-maps to the correct country-specific field:

CountryMapped FieldDocumentFormat
ARGdocument_numberDNI
BOLdocument_numberCI
BRAtax_numberCPF11 digits
CHLpersonal_numberRUT
COLpersonal_numberCedula
CRIpersonal_numberCedula
DOMpersonal_numberCedula11 digits
ECUpersonal_numberCedula10 digits
ESPpersonal_numberDNI/NIE
GTMdocument_numberDPI
HNDdocument_numberDNI
MEXpersonal_numberCURP18 chars
PANdocument_numberCedula
PERpersonal_numberDNI8 digits
PRYdocument_numberCI
SLVdocument_numberDUI
URYpersonal_numberCI
VENdocument_numberCedula

Example

python
import requests

response = requests.post(
    "https://verification.didit.me/v3/database-validation/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "id_number": "12345678",
        "first_name": "Carlos",
        "last_name": "Garcia",
        "issuing_state": "PER",
    },
)
print(response.json())

typescript
const response = await fetch("https://verification.didit.me/v3/database-validation/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    id_number: "12345678",
    first_name: "Carlos",
    last_name: "Garcia",
    issuing_state: "PER",
  }),
});

Response (200 OK)

json
{
  "request_id": "a1b2c3d4-...",
  "database_validation": {
    "status": "Approved",
    "match_type": "full_match",
    "issuing_state": "PER",
    "validation_type": "1x1",
    "screened_data": {
      "personal_number": "12345678",
      "first_name": "Carlos",
      "last_name": "Garcia"
    },
    "validations": {
      "full_name": "full_match",
      "identification_number": "full_match"
    }
  }
}

Status Values & Handling

StatusMeaningAction
"Approved"Full match against government recordsIdentity confirmed
"Declined"No match foundIdentity could not be verified
"In Review"Partial match or insufficient dataReview screened_data and validations

Error Responses

CodeMeaningAction
400Invalid requestCheck ID number format for target country
401Invalid API keyVerify x-api-key header
403Insufficient creditsTop up at business.didit.me

Matching Logic

Name Matching

ResultCriteria
Full MatchFull name concatenation at 85% similarity (Levenshtein), OR First + Last both full match
Partial MatchAny single name component full match
No MatchNo component reaches 70% similarity
Individual name components use 70% Levenshtein threshold. Example: "Christophel" vs "Christopher" = Full Match; "Chris" vs "Christopher" = No Match.

1x1 Decision

Match TypeNameID Number
full_matchFull MatchFull Match
partial_matchPartial MatchFull Match
no_matchAll other combinations

2x2 Decision

Requires matching against 2 independent data sources:

Match TypeCondition
full_matchBoth sources confirm name + ID
partial_matchOne source confirms
no_matchNeither source confirms
DOB and ID number matching is exact only — no fuzzy matching.


Warning Tags

TagDescription
COULD_NOT_PERFORM_DATABASE_VALIDATIONMissing required data — provide ID number, name, and country
DATABASE_VALIDATION_PARTIAL_MATCHPartial match found — requires investigation
DATABASE_VALIDATION_NO_MATCHNo match found in government records
When COULD_NOT_PERFORM_DATABASE_VALIDATION fires, session goes to "In Review". Validation auto-retriggers once missing data is provided.


Supported Countries

CountryMethodCoverageRequired Input
Argentina1x195%Document number
Bolivia1x195%Document number + DOB
Brazil1x195%Tax number (CPF)
Chile1x195%Personal number (RUT)
Colombia1x195%Document number + type
Costa Rica1x195%Personal number
Dominican Republic1x195%Personal number
Ecuador1x1 / 2x290-96%Personal number
El Salvador1x195%Document number + DOB
Guatemala1x195%Document number
Honduras1x195%Document number
Mexico1x195%Personal number (CURP)
Panama1x195%Document number + DOB
Paraguay1x195%Document number
Peru1x1 / 2x295-99%Personal number
Spain1x195%Personal number + doc type + expiry
Uruguay1x195%Personal number + DOB
Venezuela1x195%Document number

Utility Scripts

validate_database.py: Validate identity against government databases from the command line.

bash
# Requires: pip install requests
export DIDIT_API_KEY="your_api_key"
python scripts/validate_database.py --id-number 12345678 --country PER --first-name Carlos --last-name Garcia
python scripts/validate_database.py --id-number GARC850315HDFRRL09 --country MEX

Installation

Terminal bash

openclaw install didit-database-validation
    
Copied!

💻Code Examples

POST https://verification.didit.me/v3/database-validation/

post-httpsverificationdiditmev3database-validation.txt
### Headers

| Header | Value | Required |
|---|---|---|
| `x-api-key` | Your API key | **Yes** |
| `Content-Type` | `application/json` | **Yes** |

### Body (JSON)

| Parameter | Type | Required | Description |
|---|---|---|---|
| `id_number` | string | **Yes** | Universal ID number — auto-maps to correct country field |
| `first_name` | string | No | First name for matching |
| `last_name` | string | No | Last name for matching |
| `date_of_birth` | string | No | DOB in `YYYY-MM-DD` (required for some countries) |
| `issuing_state` | string | No | ISO 3166-1 alpha-3 country code |
| `save_api_request` | boolean | No | Save in Business Console |
| `vendor_data` | string | No | Your identifier for session tracking |

The `id_number` field auto-maps to the correct country-specific field:

| Country | Mapped Field | Document | Format |
|---|---|---|---|
| ARG | `document_number` | DNI | — |
| BOL | `document_number` | CI | — |
| BRA | `tax_number` | CPF | 11 digits |
| CHL | `personal_number` | RUT | — |
| COL | `personal_number` | Cedula | — |
| CRI | `personal_number` | Cedula | — |
| DOM | `personal_number` | Cedula | 11 digits |
| ECU | `personal_number` | Cedula | 10 digits |
| ESP | `personal_number` | DNI/NIE | — |
| GTM | `document_number` | DPI | — |
| HND | `document_number` | DNI | — |
| MEX | `personal_number` | CURP | 18 chars |
| PAN | `document_number` | Cedula | — |
| PER | `personal_number` | DNI | 8 digits |
| PRY | `document_number` | CI | — |
| SLV | `document_number` | DUI | — |
| URY | `personal_number` | CI | — |
| VEN | `document_number` | Cedula | — |

### Example

}

.txt
### Status Values & Handling

| Status | Meaning | Action |
|---|---|---|
| `"Approved"` | Full match against government records | Identity confirmed |
| `"Declined"` | No match found | Identity could not be verified |
| `"In Review"` | Partial match or insufficient data | Review screened_data and validations |

### Error Responses

| Code | Meaning | Action |
|---|---|---|
| `400` | Invalid request | Check ID number format for target country |
| `401` | Invalid API key | Verify `x-api-key` header |
| `403` | Insufficient credits | Top up at business.didit.me |

---

## Matching Logic

### Name Matching

| Result | Criteria |
|---|---|
| **Full Match** | Full name concatenation at **85% similarity** (Levenshtein), OR First + Last both full match |
| **Partial Match** | Any single name component full match |
| **No Match** | No component reaches 70% similarity |

> Individual name components use **70% Levenshtein threshold**. Example: "Christophel" vs "Christopher" = Full Match; "Chris" vs "Christopher" = No Match.

### 1x1 Decision

| Match Type | Name | ID Number |
|---|---|---|
| `full_match` | Full Match | Full Match |
| `partial_match` | Partial Match | Full Match |
| `no_match` | All other combinations | — |

### 2x2 Decision

Requires matching against **2 independent data sources**:

| Match Type | Condition |
|---|---|
| `full_match` | Both sources confirm name + ID |
| `partial_match` | One source confirms |
| `no_match` | Neither source confirms |

> DOB and ID number matching is **exact only** — no fuzzy matching.

---

## Warning Tags

| Tag | Description |
|---|---|
| `COULD_NOT_PERFORM_DATABASE_VALIDATION` | Missing required data — provide ID number, name, and country |
| `DATABASE_VALIDATION_PARTIAL_MATCH` | Partial match found — requires investigation |
| `DATABASE_VALIDATION_NO_MATCH` | No match found in government records |

> When `COULD_NOT_PERFORM_DATABASE_VALIDATION` fires, session goes to "In Review". Validation **auto-retriggers** once missing data is provided.

---

## Supported Countries

| Country | Method | Coverage | Required Input |
|---|---|---|---|
| Argentina | 1x1 | 95% | Document number |
| Bolivia | 1x1 | 95% | Document number + DOB |
| Brazil | 1x1 | 95% | Tax number (CPF) |
| Chile | 1x1 | 95% | Personal number (RUT) |
| Colombia | 1x1 | 95% | Document number + type |
| Costa Rica | 1x1 | 95% | Personal number |
| Dominican Republic | 1x1 | 95% | Personal number |
| Ecuador | 1x1 / 2x2 | 90-96% | Personal number |
| El Salvador | 1x1 | 95% | Document number + DOB |
| Guatemala | 1x1 | 95% | Document number |
| Honduras | 1x1 | 95% | Document number |
| Mexico | 1x1 | 95% | Personal number (CURP) |
| Panama | 1x1 | 95% | Document number + DOB |
| Paraguay | 1x1 | 95% | Document number |
| Peru | 1x1 / 2x2 | 95-99% | Personal number |
| Spain | 1x1 | 95% | Personal number + doc type + expiry |
| Uruguay | 1x1 | 95% | Personal number + DOB |
| Venezuela | 1x1 | 95% | Document number |

---

## Utility Scripts

**validate_database.py**: Validate identity against government databases from the command line.
example.py
import requests

response = requests.post(
    "https://verification.didit.me/v3/database-validation/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "id_number": "12345678",
        "first_name": "Carlos",
        "last_name": "Garcia",
        "issuing_state": "PER",
    },
)
print(response.json())
example.ts
const response = await fetch("https://verification.didit.me/v3/database-validation/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    id_number: "12345678",
    first_name: "Carlos",
    last_name: "Garcia",
    issuing_state: "PER",
  }),
});
example.json
{
  "request_id": "a1b2c3d4-...",
  "database_validation": {
    "status": "Approved",
    "match_type": "full_match",
    "issuing_state": "PER",
    "validation_type": "1x1",
    "screened_data": {
      "personal_number": "12345678",
      "first_name": "Carlos",
      "last_name": "Garcia"
    },
    "validations": {
      "full_name": "full_match",
      "identification_number": "full_match"
    }
  }
}
example.sh
# Requires: pip install requests
export DIDIT_API_KEY="your_api_key"
python scripts/validate_database.py --id-number 12345678 --country PER --first-name Carlos --last-name Garcia
python scripts/validate_database.py --id-number GARC850315HDFRRL09 --country MEX

Tags

#web_and-frontend-development #api #data #database

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author rosasalberto
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install didit-database-validation