Available via API | Available via SDK | Needs configuration on Veriff’s side | Needs a separate integration | Needs a separate webhook |
|---|---|---|---|---|
Match Database Verification solution that validates end-user’s personal information against official databases. The personal data (name, address, date of birth, etc.) is cross-referenced directly with trusted registries to confirm identity without requiring document uploads. The solution provides match status results (match, partial match, no match, no Input, no data) for submitted data fields to help prevent fraud and enhance identity verification accuracy.
*This solution can be:
an add-on to your document + selfie IDV or document-only IDV, or
used separately as a stand-alone check. In this case the whole flow is done over the API and you need to input all the data in initData.
All session-related info is returned via decision webhook and can be polled from different API endpoints. The results of the verification can also be viewed in the Veriff Customer Portal, in the webhook payload in the Webhook tab.
If any data was extracted from the document, this data is provided in the decision webhook payload and GET /decision endpoint’s response payload.
Contact your solutions engineer for info and configuration.
Prerequisites
You have an integration set up with Veriff
The match database check is configured for that integration by your Solutions Engineer
You have configured the decision webhook to get responses from Veriff (see the how-to in webhooks’ Set up webhooks section)
If using the API, you are ready to collect and send Veriff your end-user’s data
Irrespective of the country or the database,
firstNameandlastNameare always required.Some databases require you send additional data about the end-user, check regional databases’ documentation for the exact list of fields.
End-user data sources
The “end-user data sources” refer to different origins from which the end-user’s information can be collected for database verification. There are two data sources: document data and initData.
This is data that is extracted from the end-user’s document. Includes information like names, date of birth, ID numbers or addresses extracted from ID cards, passports, driver's licenses, etc.
This is data that you provide when creating a verification session, i.e. the parameters you specify in the POST /sessions request. Includes information like names, date of birth, address, phone number, ID number, gender etc.
Irrespective of the database, firstName and lastName are always required in verification.person parameter.
Parameters used to send initData:
first name via
person.firstNamelast name via
person.lastNamedate of birth via
person.dateOfBirthphone number via
person.phoneNumbergender via
person.genderaddress via
address.fullAddressID number via
document.number
Flow overview
Database flow
Match Database Verifications follows a simple flow.
Step 1: you input end-user’s data (initData or document)
Step 2: system queries the appropriate database(s) based on country/region
Step 3: match analysis
Field-by-field comparison between input data and registry data, leading to match confidence scoring and validation of multiple data points (name, DOB, address, etc.)
Step 4: match confidence decision
Returns one of the following:
MATCH: data confirmed in registry, session is successfulPARTIAL_MATCH: some fields match, others do not. This requires review, the partial mismatch may be due to error in data.NO_MATCH: data not found or does not match, can indicate potential fraud, data error or outdated registry. You should create flows to fallback to an alternative method.NO_INPUT: required data not provided via document or initData data source, meaning this field cannot be verifiedNO_DATA: registry unavailable or no data returned, meaning either there is an issue contacting the database, or the end-user’s data is missing in database
Step 5: webhook is sent
The webhooks contains:
Match conclusion per field sent and supported by registry
Info about decision influence based on selected compared fields
Contact your Solutions Engineer for more information about the match confidence scoring and fields comparing setup.
Session flow
In Match Database Verification sessions, person’s ID number is always sent in
document.numberfield.
Use via SDK
Generate a verification session using the
API keysand thebaseURLof your integration (see the API Documentation and API Reference[↗] how to find these)You can pass the
firstName,lastNameand other parameters in the session creation request (e.g., if that particular info is missing from the document). Check each database’s documentation to see which parameters are required and allowed.
Capture end-user’s document (and selfie) images with Veriff’s SDKs
Send the end-user through the verification flow to capture the images (using the preferred Veriff SDK)
You need the session URL generated in step 1 to use the SDKs (found in response payload as
verification.url)
Session will be submitted automatically once the end-user takes and submits necessary images
End-user’s data is extracted
Database checks are run
Receive the results from Veriff via decision webhook or poll them from GET /decision endpoint. Check each database’s documentation to see and example of the webhook and API response payload.
Use via API
Generate a verification session using the
API keysand thebaseURLof your integration (see the API Documentation and API Reference[↗] how to find these)Make sure to pass the mandatory
firstNameandlastNameYou can pass other parameters in the session creation request. Check each database’s documentation to see and example of suitable session start payload.
OPTIONAL: if you have decided to use also the document data source, send the end-user’s document images:
Use your image-capturing method, or prepare previously collected images
Upload the end-user's media via POST /sessions/{sessionId}/media[↗] call
Specify the
image.contextas appropriate for the image (see Context types (image, video) for more info about image context types)
Sample request payload
curl -X POST /v1/sessions/aea9ba6d-1b47-47fc-a4fc-f72b6d3584a7/media \
-H "Content-Type: application/json" \
-H "X-AUTH-CLIENT: cd938f72-72c8-4a7b-b5c6-2f1b6d5a9c8e" \
-H "X-HMAC-SIGNATURE: 034c6da2bb31fd9e6892516c6d7b90ebe10f79b47cfb3d155d77b4d9b66e1d53" \
-d '{
"image": {
"context": "document-front",
"content": "base64-encoded-selfie-data",
"timestamp": "2024-01-15T10:31:00Z"
}
}'Patch session status to
submittedstatus using PATCH /sessions/{sessionId}[↗] call
Sample request payload
curl -X PATCH /v1/sessions/fd5c1563-1d23-4b1a-ae46-7ba429927ed8 \
-H "Content-Type: application/json" \
-H "X-AUTH-CLIENT: API-KEY" \
-H "X-HMAC-SIGNATURE: 034c6da2bb31fd9e6892516c6d7b90ebe10f79b47cfb3d155d77b4d9b66e1d53" \
-d '{"status": "submitted"}'
If you sent images, end-user’s data is extracted
Database checks are run
Check the decision data and/or session related info from the decision webhook and/or query the data from the GET /decisions endpoint. Check each database’s documentation to see and example of the webhook and API response payload.
Databases by regions
North America
LATAM
EMEA
APAC
North America
USA 🇺🇸
Source | Input parameters | POST /sessions example |
|---|---|---|
Credit Database (US15) | Mandatory:
Optional:
| |
|
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "USA - Credit + US Identity Graph (US15)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "NO_DATA",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH",
"phoneNumber": "PARTIAL_MATCH"
}
]
}
}LATAM
Argentina 🇦🇷
Source | Input parameters | POST /sessions example |
|---|---|---|
Renaper (AR9) | Mandatory:
Optional:
| |
Sample webhook
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Argentina - Renaper (AR9)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH",
"gender": "NO_DATA"
}
]
}
}Peru 🇵🇪
Source | Input parameters | POST /sessions example |
|---|---|---|
Official Voter Register (PE1) | Mandatory:
Optional:
| |
Sample webhook
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Peru - Official Voter Register (PE1)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH"
"gender": "NO_DATA"
}
]
}
}EMEA
Germany 🇩🇪
Source | Input parameters | POST /sessions example |
|---|---|---|
Civil Register & Credit (DE8) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Germany - Civil Register & Credit (DE8)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"phoneNumber": "PARTIAL_MATCH"
}
]
}
}
Greece 🇬🇷
Source | Input parameters | POST /sessions example |
|---|---|---|
Voter Register & Credit (GR1) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Greece - Voter Register & Credit (GR1)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH",
"phoneNumber": "PARTIAL_MATCH",
"gender": "NO_DATA"
}
]
}
}Morocco 🇲🇦
Source | Input parameters | POST /sessions example |
|---|---|---|
Mobile Phone Register (MA1) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Morocco - Mobile Phone Register (MA1)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"phoneNumber": "PARTIAL_MATCH",
"gender": "MATCH"
}
]
}
}Romania 🇷🇴
Source | Input parameters | POST /sessions example |
|---|---|---|
Official Voter Register (RO4) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Romania - Official Voter Register (RO4)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "PARTIAL_MATCH",
"address": "PARTIAL_MATCH",
"gender": "MATCH"
}
]
}
}Spain 🇪🇸
Source | Input parameters | POST /sessions example |
|---|---|---|
Census & Utility Services (ES2) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Spain - Census & Utility Services (ES2)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "NO_DATA",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH",
"phoneNumber": "PARTIAL_MATCH"
}
]
}
}Turkey 🇹🇷
Source | Input parameters | POST /sessions example |
|---|---|---|
Official Voter Register (TR1) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Turkey - Official Voter Register (TR1)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"idNumber": "MATCH",
"phoneNumber": "PARTIAL_MATCH",
"gender": "NO_DATA"
}
]
}
}United Kingdom 🇬🇧
Source | Input parameters | POST /sessions example |
|---|---|---|
Official Voter Register (GB2) | Mandatory:
Optional:
| |
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
{...
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "UK - Official Voter Register (GB2)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "MATCH",
"address": "PARTIAL_MATCH",
"phoneNumber": "PARTIAL_MATCH",
"gender": "MATCH"
}
]
}
}APAC
Singapore 🇸🇬
Source | Input parameters | POST /sessions example |
|---|---|---|
Sample response payload
The following info can be found in decision webhook payload and GET /decision endpoint’s payload, in verifications.additionalVerifiedData object. Note that the payloads contain more parameters, to find info about them see the decision webhook and GET /decision endpoint’s documentation.
"additionalVerifiedData": {
"validationResults": [
{
"registryName": "Singapore - Utility Phone Register (SG1)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "NO_INPUT",
"address": "PARTIAL_MATCH",
"phoneNumber": "MATCH",
"gender": "NO_INPUT"
}
]
},Status and reason codes
For an approved session, see:
verification.codeabout verification session decision code, one of9001,9102,9103,9104,9121.verification.statusabout verification status, one ofapproved,declined,resubmission_requested,expired,abandoned.
If the Match Database Verification session was declined or resubmission_requested, you can find additional information by checking:
verification.reasonfor the reason why the verification failed.verification.reasonCodefor reason code of the failed verification and cross-reference it with Granular reason codes (table).
|
|
| What does it mean? |
|---|---|---|---|
| 123 | Unable to pass registry checks | The person could not be found in the database |
| 529 | Unable to validate National Id data | The expected identification number could not be verified |
| 566 | Registry provider error occurred while connecting to the registry | Technical error during database communication |
The table above aims to list the most common reasons why you may see the decline or resubmission _requested reason for a Match Database Verification session. However, the session may be declined due to a reason that is not inherently related to this solution’s flow (e.g. uploaded document’s quality is low). In that case, to find info about the codes you are seeing, refer to:
Additional data
Best practices
In API flow, ensure that initData is present, especially the mandatory fields.
Ensure correct data formats to reduce the possibility of session going to
resubmission_requested.Document image quality: ensure that end-user’s document image is of good quality. This will reduce the possibility of session going to
resubmission_requested.Person’s ID number is always sent it in
document.numberparameter (notperson.idNumber).Error handling: implement proper error handling for all possible validation results.
Session declined due to third-party provider issues: implement proper session handling flow when possibly legitimate end-user’s session is declined due to the third-party service provider having issues, as indicated by session code
566.Webhook security: secure your webhook endpoint and verify request signatures.
User experience: provide clear feedback to users about validation results.
Ensure backwards compatibility for webhooks and API connections.
FAQ
What are common use cases for Match Database Verification?
Match Database Verifications enables businesses to:
Validate identity data against official voter registers, civil registers, and commercial databases
Verify addresses using utility services, phone registers, and census data
Confirm identity for KYC/AML compliance without document collection
Reduce friction in user onboarding with faster, document-free verification
Enhance fraud detection by cross-referencing multiple data points
When should I prefer the standalone version and when the add-on to my IDV solution?
Standalone via API, using initData
This solution is fast, does not require document uploads, but you need to input data manually and no document authenticity verification is done.
Best suitable for: low risk use-cases, address changes, returning customers, periodic KYC updates.
Add-on to existing document or document+selfie IDV solution
This version provides higher assurance as the document authenticity is also validated, and document data capture is done automatically. This does require a document upload (API) or document capture (SDK) step, and takes slightly longer to process.
Best suitable for: new customer onboarding, high-risk transactions, compliance requirements.
Changelog
Date | Description |
|---|---|
Dec 3, 2025 | Documentation published |