Also known as Digital Identity and Attributes Trust Framework.
Available via API | Available via SDK | Needs configuration on Veriff’s side | Needs a separate integration | Needs a separate webhook |
|---|---|---|---|---|
❌ | ✅ | ✅ | ✅ | ❌ |
Within the United Kingdom Digital Identity and Attributes Trust Framework (UK DIATF), Veriff offers the following solutions:
Solution type | Description | Mandatory fields | Registry checks | Used for |
|---|---|---|---|---|
Used with Veriff’s end-user flow (cannot be customized) | No |
| Know Your Customer Right To Work Right To Rent | |
Used with Veriff’s end-user flow (cannot be customized) | Yes, |
| Know Your Customer Right To Work* Right To Rent* | |
Used with Veriff's end-user flow (cannot be customized) | No |
| Know Your Customer | |
* Driver’s License must be disabled for the integration | ||||
Prerequisites
You have a regular identity verification integration set up with Veriff
The check is configured for that integration by your Solutions Engineer
You have configured the decision webhook to get responses from Veriff (see the Webhooks section for info)
You are prepared to send the end-user to Veriff verification flow
Definitions
Term | Description |
|---|---|
CIFAS | UK's leading fraud prevention service and database. |
PEP | “Politically Exposed Person”, an individual in prominent public position. |
Credit Header | Name and address information from credit reference agencies. |
UK Electoral roll | Official register of citizens eligible to vote. |
Right to Work (RTW) | Verifying the employees’ right to work in the UK to prevent illegal working practices. |
Right to Rent (RTR) | Verifying the immigration status of prospective tenants before renting out a property. |
Know Your Customer (KYC) | Verifying the end-user for compliance purposes. |
Contact your solutions engineer for info and configuration.
UK DIATF Certified Identity Verification (M1A)
A medium-confidence solution that must be completed using Veriff’s end-user flow to capture the document and selfie.
Used for | Allowed documents | Send | Is end-user flow customizable? | Checks done |
|---|---|---|---|---|
KYC RTR RTW |
| Optional | No | CIFAS |
Flow overview
Step 1: create a session using the POST /sessions endpoint
See the POST /sessions[↗] section for a detailed overview of how to create a session
Passing the
idNumber,firstName,lastNameanddateOfBirthare mandatory
Passing the
verification.address.fullAddressparameter is optionalVeriff strongly recommends creating and using vendorData or endUserId for improved fraud detection
Step 2: start a session using the POST /sessions endpoint
Open the response payload of the POST /sessions[↗] request you just made
Use the URL in the
verification.urlparameter in the payloadA web flow will start, which will guide the end-user through the process
Step 3: wait for session decision and decision webhook response
As soon as the session is verified, the decision webhook will send the response with session status. It will be one of 9000-code statuses
This response will include the identity verification result and session status, as well as all the UK DIATF CIFAS check result
The latter is visible in
verification.additionalVerifiedData.UKTFCheckResult.CIFASstring
In case the session is
declined, the webhook contains relevant info about the reasonThe reason for decline is visible in:
verification.code,verification.reasonandverification.reasonCodeparameters
If the session failed due to the CIFAS check, the explanation is visible in the
UKTFCheckResult.CIFASstring
Find decision and/or session related info
Webhook response
M1A Webhook response = decision webhook response for an IDV session + CIFAS-specific property in the verification.additionalVerifiedData.UKTFCheckResult.CIFAS string.
The CIFAS check must be successful, i.e. no match was found in the CIFAS database.
Approved session
Sample request
The example below uses placeholder data to show all mandatory parameters and the UK DIATF-related part of the webhook.
Depending on your integration’s configuration, your production payload may contain additional parameters; for info on fields from other solutions, see the decision webhook documentation.
{
"status": "success",
"verification":
"id": "12df6045-3846-3e45-946a-14fa6136d78b",
"attemptId": "00bca969-b53a-4fad-b065-874d41a7b2b8",
"code": 9001,
"status": "approved",
"reason": null,
"reasonCode": null,
"vendorData": "12345678",
"endUserId" : "a1b2c35d-e8f7-6d5e-3cd2-a1b2c35db3d4",
"acceptanceTime": "2024-01-15T09:30:00.000Z",
"submissionTime": "2024-01-15T10:16:15.736755Z",
"decisionTime": "2024-01-15T10:20:00.000Z",
"person": {
"firstName": "JOHN",
"lastName": "SMITH",
"dateOfBirth": "1990-01-15",
"gender": null,
"nationality": null,
"idNumber": "12345678901",
"yearOfBirth": null,
"placeOfBirth": null,
"addresses": null,
},
"document": {
"number": null,
"type": null,
"country": null,
"state": null
},
"comments": [],
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "Registry validation was successful"
}
}
}
}Request properties explained
status:string* Status of the responseverification:object* Verification request decision objectid:string* UUID v4 which identifies the verification sessionattemptId:string* UUID v4 of the attempt which received a status (as shown inverification.statusfield)code:integer* Verification session decision code, one of9001,9102,9103,9104,9121. For more info, see the verification session decision codesstatus:string* Verification status, one ofapproved,declined,resubmission_requested,expired,abandonedreason:string | null* Reason why the verification failedreasonCode:integer | null* Reason code of the failed verification. For more info, see the possible codes for a failed verificationvendorData:string | null* The unique identifier that you created for your end-user.nullif not specifiedendUserId:string | null* TheUUIDthat you created for your end-user.nullif not specifiedacceptanceTime:string* Timestamp of the session generation, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)submissionTime: string* Timestamp of when the session was submitted, represented asUTC YYYY-MM-DDTHH:MM:SS.SSSSSS+Timezone Offset(ISO 8601)decisionTime:string | null* Timestamp of the decision, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)person:object* Data about the verified personfirstName:string | null* Person's first name as written on the documentlastName:string | null* Person's last name as written on the documentdateOfBirth:string* Person’s date of birth, represented asYYYY-MM-DDgender:string | null* Person’s gender, represented as M or F, ornullif not presentnationality:string | null* Person’s nationality, represented as ISO 3166alpha-2oralpha-3numberidNumber:string | null* National identification numberyearOfBirth:string | null* Person’s year of birth, represented asYYYYplaceOfBirth:string | null* Person’s place of birthaddresses:arrayArray with address related datafullAddress:string | nullAddress as single string
document:object* Verified documentnumber:string | null* Document number,[a-zA-Z0-9]characters onlytype:string | null* Document typecountry:string | null* Document issuing country, represented as ISO 3166alpha-2codestate:string | null* Document issuing state, represented as ISO 3166alpha-2oralpha-3code
comments:array(Deprecated) Always returns empty []additionalVerifiedData:object* Data which has been optionally verified for sessionUKTFCheckResult:array* Array of UK DIATF checks resultsCIFAS:string* CIFAS registry check result
Declined session due to failed CIFAS check
Scenario: there may be a possible match in the CIFAS database.
The webhook example below show only UK DIATF-related part of the webhook. See the example above for full payload.
{
"status": "success",
"verification": {
...
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "CIFAS registry detected a potential match."
}
}
}
}Veriff Customer Portal
You can find the verification session related info in the Veriff Customer Portal, under the Webhooks tab.
→ See Review verification in Veriff Customer Portal about how to view the session info in the Veriff Customer portal
UK DIATF Certified Identity Verification (M1B)
Medium-confidence solution that must be completed using Veriff’s end-user flow to capture the document and selfie.
Used for | Allowed documents | Send | Is end-user flow customizable? | Checks done |
|---|---|---|---|---|
KYC |
| Mandatory | No |
|
RTR RTW |
| Mandatory | No |
|
Flow overview
Step 1: create a session using the POST /sessions endpoint
See the POST /sessions[↗] section for a detailed overview of how to create a session
Passing the
idNumber,firstName,lastNameanddateOfBirthare mandatory
Passing the
verification.address.fullAddressparameter is mandatoryVeriff strongly recommends creating and using vendorData or endUserId for improved fraud detection
Step 2: capture user pictures and videos via verification flow
Open the response payload of the POST /sessions[↗] request you just made
Use the URL in the
verification.urlparameter listed in the payloadA web flow will start, which will guide you through the process
Step 3: wait for session approval and decision webhook response
As soon as the session is
approved, the decision webhook will send anapprovedresponseThis response will include the identity verification result and session status, as well as the results of different checks
The latter are visible in
verification.additionalVerifiedData.UKTFCheckResultarray
In case the session is
declined, the webhook contains relevant info about the reasonThe reason for decline is visible in:
verification.code,verification.reasonandverification.reasonCodeparameters
If the session failed due to a failed check, the explanation is visible in the
UKTFCheckResultarray
Find decision and/or session related info
Webhook response
M1B Webhook response = decision webhook response for an IDV session + specific properties in the verification.additionalVerifiedData.UKTFCheckResult array.
The relevant data is presented in strings, marking the result of its nominal check.
These checks are executed in succession and if the preceding check fails, the succeeding one is skipped.
The order of executing the checks is as shown below, but in the webhook payload the order may be random.
additionalVerifiedData.UKTFCheckResult.CIFASadditionalVerifiedData.UKTFCheckResult.Electoral roll and Credit History UKadditionalVerifiedData.UKTFCheckResult.PEP
Approved session
Scenario: all the checks are successful, meaning that:
CIFAS and PEP matches are not found, and
the end-user is found in the Credit Header and Electoral Roll Database.
The example below uses placeholder data to show all mandatory parameters and the UK DIATF-related part of the webhook.
Depending on your integration’s configuration, your production payload may contain additional parameters; for info on fields from other solutions, see the decision webhook documentation.
Sample request
{
"status": "success",
"verification": {
"id": "12df6045-3846-3e45-946a-14fa6136d78b",
"attemptId": "00bca969-b53a-4fad-b065-874d41a7b2b8",
"code": 9001,
"status": "approved",
"reason": null,
"reasonCode": null,
"vendorData": "12345678",
"endUserId": "a1b2c35d-e8f7-6d5e-3cd2-a1b2c35db3d4",
"acceptanceTime": "2025-01-15T09:30:00.000Z",
"submissionTime": "2025-01-15T10:16:15.736755Z",
"decisionTime": "2025-01-15T10:20:00.000Z",
"person": {
"firstName": "JOHN",
"lastName": "SMITH",
"dateOfBirth": "1978-01-15",
"gender": null,
"nationality": null,
"idNumber": "12345678901",
"yearOfBirth": null,
"placeOfBirth": null,
"addresses": {
"fullAddress": "23 Willowbrook Lane, Ashford, Kent CT19 8NP, UK"
},
},
"document": {
"number": null,
"type": null,
"country": null,
"state": null
},
"comments": [],
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "Registry validation was successful",
"Electoral roll and Credit History UK": "Registry validation was successful",
"PEP": "Registry validation was successful",
}
}
}
}Request properties explained
status:string* Status of the responseverification:object* Verification request decision objectid:string* UUID v4 which identifies the verification sessionattemptId:string* UUID v4 of the attempt which received a status (as shown inverification.statusfield)code:integer* Verification session decision code, one of9001,9102,9103,9104,9121. For more info, see the verification session decision codesstatus:string* Verification status, one ofapproved,declined,resubmission_requested,expired,abandonedreason:string | null* Reason why the verification failedreasonCode:integer | null* Reason code of the failed verification. For more info, see the possible codes for a failed verificationvendorData:string | null* The unique identifier that you created for your end-user.nullif not specifiedendUserId:string | null* TheUUIDthat you created for your end-user.nullif not specifiedacceptanceTime:string* Timestamp of the session generation, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)submissionTime: string* Timestamp of when the session was submitted, represented asUTC YYYY-MM-DDTHH:MM:SS.SSSSSS+Timezone Offset(ISO 8601)decisionTime:string | null* Timestamp of the decision, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)person:object* Data about the verified personfirstName:string | null* Person's first name as written on the documentlastName:string | null* Person's last name as written on the documentdateOfBirth:string* Person’s date of birth, represented asYYYY-MM-DDgender:string | null* Person’s gender, represented as M or F, ornullif not presentnationality:string | null* Person’s nationality, represented as ISO 3166alpha-2oralpha-3numberidNumber:string | null* National identification numberyearOfBirth:string | null* Person’s year of birth, represented asYYYYplaceOfBirth:string | null* Person’s place of birthaddresses:arrayArray with address related datafullAddress:string | nullAddress as single string
document:object* Verified documentnumber:string | null* Document number,[a-zA-Z0-9]characters onlytype:string | null* Document typecountry:string | null* Document issuing country, represented as ISO 3166alpha-2codestate:string | null* Document issuing state, represented as ISO 3166alpha-2oralpha-3code
comments:array(Deprecated) Always returns empty []additionalVerifiedData:object* Data which has been optionally verified for sessionUKTFCheckResult:array* Array of UK DIATF checks resultsCIFAS:string* CIFAS registry check resultElectoral roll and Credit History UK:string* UK Electoral Roll and Credit History check resultPEP:string* PEP check result
*Required parameter
Declined session due to failed CIFAS check
Scenario: there may be a possible match in the CIFAS database.
The webhook example below show only UK DIATF-related part of the webhook. See the example above for full payload.
{
"status": "success",
"verification": {
...
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "CIFAS registry detected a potential match.",
"Electoral roll and Credit History UK": "Registry check did not result in a match"
"PEP": "Registry check was not executed",
}
}
}
}Declined session due to UK Electoral Roll and Credit History check
Scenario: the end-user data may be incorrect or missing in the database.
The webhook example below contains only UK DIATF-related part of the webhook. See the example above for full payload.
{
"status": "success",
"verification": {
...
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "Registry validation was successful",
"Electoral roll and Credit History UK": "Registry check did not result in a match"
"PEP": "Registry check was not executed",
}
}
}
}Declined session due to failed PEP check
Scenario: end-user detected as potential PEP.
The webhook example below contains only UK DIATF-related part of the webhook. See the example above for full payload.
{
"status": "success",
"verification": {
...
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "Registry validation was successful",
"Electoral roll and Credit History UK": "Registry validation was successful"
"PEP": "Person detected to be potentially a PEP",
}
}
}
}Veriff Customer Portal
You can find the verification session related info in the Veriff Customer Portal, under the Webhooks tab.
→ See Review verification in Veriff Customer Portal about how to view the session info in the Veriff Customer portal
UKDIATF Certified Identity Verification (L1B)
A low-confidence solution, completed using Veriff’s end-user flow to capture the document and selfie.
Used for | Allowed documents | Send | Is end-user flow customizable? | Checks done |
|---|---|---|---|---|
KYC |
| Optional | No | CIFAS |
Flow overview
Step 1: create a session using the POST /sessions endpoint
See the POST /sessions[↗] section for a detailed overview of how to create a session
Passing the
idNumber,firstName,lastNameanddateOfBirthare mandatory
Passing the
verification.address.fullAddressparameter is optionalVeriff strongly recommends creating and using vendorData or endUserId for improved fraud detection
Step 2: start a session using the POST /sessions endpoint
Open the response payload of the POST /sessions[↗] request you just made
Use the URL in the
verification.urlparameter in the payloadA web flow will start, which will guide you through the process
Step 3: wait for session decision and decision webhook response
As soon as the session is verified, the decision webhook will send the response with session status. It will be one of 9000-code statuses
This response will include the identity verification result and session status, as well as all the UK DIATF CIFAS check result
The latter is visible in
verification.additionalVerifiedData.UKTFCheckResult.CIFASstring
In case the session is
declined, the webhook contains relevant info about the reasonThe reason for decline is visible in:
verification.code,verification.reasonandverification.reasonCodeparameters
If the session failed due to the CIFAS check, the explanation is visible in the
UKTFCheckResult.CIFASstring
Find decision and/or session related info
Webhook response
L1B Webhook response = decision webhook response for an IDV session + CIFAS-specific property in the verification.additionalVerifiedData.UKTFCheckResult.CIFAS string.
The CIFAS check must be successful, i.e. no match in the CIFAS database.
Approved session
Sample request
The example below uses placeholder data to show all mandatory parameters and the UK DIATF-related part of the webhook.
Depending on your integration’s configuration, your production payload may contain additional parameters; for info on fields from other solutions, see the decision webhook documentation.
{
"status": "success",
"verification":
"id": "12df6045-3846-3e45-946a-14fa6136d78b",
"attemptId": "00bca969-b53a-4fad-b065-874d41a7b2b8",
"code": 9001,
"status": "approved",
"reason": null,
"reasonCode": null,
"vendorData": "12345678",
"endUserId" : "a1b2c35d-e8f7-6d5e-3cd2-a1b2c35db3d4",
"acceptanceTime": "2024-01-15T09:30:00.000Z",
"submissionTime": "2024-01-15T10:16:15.736755Z",
"decisionTime": "2024-01-15T10:20:00.000Z",
"person": {
"firstName": "JOHN",
"lastName": "SMITH",
"dateOfBirth": "1990-01-15",
"gender": null,
"nationality": null,
"idNumber": "12345678901",
"yearOfBirth": null,
"placeOfBirth": null,
"addresses": null,
},
"document": {
"number": null,
"type": null,
"country": null,
"state": null
},
"comments": [],
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "Registry validation was successful"
}
}
}
}Request properties explained
status:string* Status of the responseverification:object* Verification request decision objectid:string* UUID v4 which identifies the verification sessionattemptId:string* UUID v4 of the attempt which received a status (as shown inverification.statusfield)code:integer* Verification session decision code, one of9001,9102,9103,9104,9121. For more info, see the verification session decision codesstatus:string* Verification status, one ofapproved,declined,resubmission_requested,expired,abandonedreason:string | null* Reason why the verification failedreasonCode:integer | null* Reason code of the failed verification. For more info, see the possible codes for a failed verificationvendorData:string | null* The unique identifier that you created for your end-user.nullif not specifiedendUserId:string | null* TheUUIDthat you created for your end-user.nullif not specifiedacceptanceTime:string* Timestamp of the session generation, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)submissionTime: string* Timestamp of when the session was submitted, represented asUTC YYYY-MM-DDTHH:MM:SS.SSSSSS+Timezone Offset(ISO 8601)decisionTime:string | null* Timestamp of the decision, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)person:object* Data about the verified personfirstName:string | null* Person's first name as written on the documentlastName:string | null* Person's last name as written on the documentdateOfBirth:string* Person’s date of birth, represented asYYYY-MM-DDgender:string | null* Person’s gender, represented as M or F, ornullif not presentnationality:string | null* Person’s nationality, represented as ISO 3166alpha-2oralpha-3numberidNumber:string | null* National identification numberyearOfBirth:string | null* Person’s year of birth, represented asYYYYplaceOfBirth:string | null* Person’s place of birthaddresses:arrayArray with address related datafullAddress:string | nullAddress as single string
document:object* Verified documentnumber:string | null* Document number,[a-zA-Z0-9]characters onlytype:string | null* Document typecountry:string | null* Document issuing country, represented as ISO 3166alpha-2codestate:string | null* Document issuing state, represented as ISO 3166alpha-2oralpha-3code
comments:array(Deprecated) Always returns empty []additionalVerifiedData:object* Data which has been optionally verified for sessionUKTFCheckResult:array* Array of UK DIATF checks resultsCIFAS:string* CIFAS registry check result
Declined session due to failed CIFAS check
Scenario: there may be a possible match in the CIFAS database.
The webhook example below show only UK DIATF-related part of the webhook. See the example above for full payload.
{
"status": "success",
"verification": {
...
"additionalVerifiedData": {
"UKTFCheckResult": {
"CIFAS": "CIFAS registry detected a potential match."
}
}
}
}Veriff Customer Portal
You can find the verification session related info in the Veriff Customer Portal, under the Webhooks tab.
→ See Review verification in Veriff Customer Portal about how to view the session info in the Veriff Customer portal
Status and reason codes
For an approved session, see the verification.code and verification.status parameters.
If the session was declined or resubmission_requested, you can find additional information by checking the verification.status, verification.code, verification.reason and verification.reasonCode data objects.
For more info about the codes you are seeing, refer to:
Changelog
Date | Description |
|---|---|
Feb 20, 2026 |
|
Jun 12, 2025 | Added note about the UK DIATF certification being temporarily paused |