curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=ESP" \
-F "services=esp_dni" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "date_of_birth=1990-01-01" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}'
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "ESP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "ESP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "ESP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address": "NO_MATCH",
"date_of_birth": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"date_of_birth": "no_match",
"full_name": "no_match"
}
}
]
}
🇪🇸 Spain
Spain - DNI/NIE verification
Verifies a Spanish DNI / NIE holder’s name, date of birth and address against national identity records. Authoritative real-time identity lookup for Spain. Real-time lookup, pay-per-call.
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=ESP" \
-F "services=esp_dni" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "date_of_birth=1990-01-01" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}'
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "ESP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "ESP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "ESP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address": "NO_MATCH",
"date_of_birth": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"date_of_birth": "no_match",
"full_name": "no_match"
}
}
]
}
Verifies a Spanish DNI / NIE holder’s name, date of birth and address against national identity records. 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: ~ 75%
- Country: Spain
- Service ID:
esp_dni - Data domain: Identity
- Category: NationalIDRegistry
Inputs
| Field | Required | Example |
|---|---|---|
first_name | Yes | John |
last_name | Yes | Doe |
date_of_birth | Yes | 1990-01-01 |
address.street_1 | Yes | 123 Sample Street |
address.postal_code | Yes | 10001 |
national_id | No | SAMPLE-NID-12345 |
phone | No | +15550101000 |
address.street_2 | No | Unit 4 |
address.city | No | Sample City |
address.region | No | Sample State |
vendor_data | No | user-1234 |
- Required inputs:
first_name,last_name,date_of_birth,address.street_1,address.postal_code - Optional inputs:
national_id,phone,address.street_2,address.city,address.region,vendor_data - Consent: Required
- Workflow availability: Available in workflow
- Coverage: ~ 75%
- Price: $1.26 per successful query
Body parameters
string
default:"ESP"
required
ISO 3166-1 alpha-3 country code for this database service.Example:
ESPstring
default:"esp_dni"
required
Array containing this service ID. Pinning the service keeps the request scoped to this exact database.Example:
esp_dniboolean
default:"true"
required
Explicit end-user consent for this service.Example:
truestring
default:"John"
required
Given name to validate.Example:
Johnstring
default:"Doe"
required
Family name to validate.Example:
Doestring
default:"1990-01-01"
required
Date of birth in
YYYY-MM-DD format.Example: 1990-01-01object
required
Structured residential address object. Use
street_1, street_2, city, region, postal_code, and country. A complete legacy address string is still accepted but not recommended.Example: {"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}string
default:"SAMPLE-NID-12345"
National identity number for this service.Example:
SAMPLE-NID-12345string
default:"+15550101000"
Phone number in international format.Example:
+15550101000string
default:"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-1234Input rules & validation notes
- For address services, send structured address fields instead of a single
addressstring when possible. address.street_1is the street address, including street number and street type.address.street_2is apartment, unit, building, floor, or extra address line. Send it only when you have it.address.cityis city, suburb, district, locality, or neighborhood.address.regionis state, province, region, or town.address.postal_codeis postcode or postal code.- Address-based database services require at least street address and postal code; requests rejected before source lookup are not charged.
How to call it
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=ESP" \
-F "services=esp_dni" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "date_of_birth=1990-01-01" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}'
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 can override it.MATCH — The registry confirmed the identity and every checked field matched.{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "ESP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "full_match"
}
}
]
}
PARTIAL_MATCH — The identification number was found but one or more personal fields (usually name or date of birth) did not fully match.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "ESP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address_match_score": "1.000",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"identification_number": "SAMPLE-ID-12345",
"last_name": "Doe",
"name_match_score": "1.000",
"verifications": {
"address": true,
"date_of_birth": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"date_of_birth": "full_match",
"full_name": "no_match"
}
}
]
}
NO_MATCH — The registry returned no match for the submitted data.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "ESP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"source_data": {
"address": "NO_MATCH",
"date_of_birth": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"date_of_birth": "no_match",
"full_name": "no_match"
}
}
]
}
Returned data
The exact fields surfaced insource_data depend on what the registry returns. The generated example for esp_dni currently documents this normalized shape:
address_match_scoredate_of_birthfirst_namefull_nameidentification_numberlast_namename_match_score
Pricing & SLAs
Spain - DNI/NIE verification queries are billed only when Didit receives a conclusive result from the validation source.- Per-call price: $1.26 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.