Most of the verification solutions use the decision webhook to post data about the verification decision, verified data and checks, and session info (e.g. session ID, attempt ID, different timestamps).
The payload is sent to Webhook decisions URL, which you need to set up the webhook in the Veriff Customer Portal.
→ See Webhooks Guide > Set up webhooks sub-section for detailed overview of the setup process
When is decision webhook sent?
Veriff sends decision webhooks immediately after making a decision, with one exception: webhooks with resubmission_requested status are delayed by 5 minutes for SDK sessions (native or web) where end-users are asked to resubmit their data on the final screen. During this 5-minute window:
No webhook is sent
End-user can resubmit their data
If they do not resubmit within 5 minutes, Veriff sends the webhook with
resubmission_requestedstatus
If the session is uploaded via API, decision webhook is sent immediately.
Prerequisites
- Make sure you have access to the Veriff Customer Portal
- Set up webhook URL(s) on your side and have them at hand
- Make sure they match the Webhook URL requirements
- Make sure your system is able to handle Webhooks receipt, delivery and resending requirements
- Check the Webhooks headers and payload section for info
- Secure your communication, check the HMAC Authentication and Endpoint Security article
- Make sure your system is able to handle the Backwards compatible changes
5.Proceed to Decision webhook setup section below
Decision webhook setup
Log in to the Veriff Customer Portal
Navigate to the Integrations page via the top menu and open the relevant integration
On the integration's page, select the Settings tab
Under the title Integration settings you see a list of webhooks
Fill in the
Webhook decisions URL
→ See Webhooks Guide > Set up webhooks sub-section for detailed overview of the setup process
Additional notes
Driver's license categories extraction
Contact your Solutions Engineer who can activate the feature for your integration, so it is possible to extract the
validFromandvalidUntildates from a driver's license.
riskScoreparameterThis is a numerical value representing the overall risk associated with the session. Lower score indicates higher confidence in that the session is genuine.
In the API and webhooks payloads, the range is shown as an integer in the range of 0.0–1.0
In the Veriff Customer Portal, the range is shown as 1–100
pepSanctionMatchparameterWarning: legacy field, may return incorrect result.
If you are running the AML checks, please see the watchlist-screening webhook for accurate data.
If you are running the UKDIATF M1B checks, accurate data is in the decision webhook payload, in
verification.additionalVerifiedData.UKTFResult.PEPstring.
submissionTimeparameterThis parameter indicates the moment when the session was submitted. It is an accurate timestamp of the session submission moment and can differ from the time value that can be derived from when the even webhook with
submittedstatus was received.
Sample request
{
"status": "success",
"verification": {
"id": "12df6045-3846-3e45-946a-14fa6136d78b",
"attemptId": "00bca969-b53a-4fad-b065-874d41a7b2b8",
"vendorData": "12345678",
"endUserId": "a1b2c35d-e8f7-6d5e-3cd2-a1b2c35db3d4",
"status": "approved",
"code": 9001,
"reason": null,
"reasonCode": null,
"decisionTime": "2024-11-06T07:17:36.916Z",
"acceptanceTime": "2024-11-06T07:15:27.000Z",
"submissionTime": "2024-11-06T07:16:15.736755Z",
"person": {
"firstName": "SARAH",
"lastName": "MORGAN",
"dateOfBirth": "1967-03-30",
"gender": null,
"nationality": null,
"idNumber": null,
"yearOfBirth": "1967",
"placeOfBirth": "MADRID",
"addresses": [
{
"fullAddress": "1234 Ridge Road, Indiana, 56789 USA",
"parsedAddress": {
"city": null,
"unit": null,
"state": "Indiana",
"street": "1234 Ridge Road",
"country": "USA",
"postcode": "56789",
"houseNumber": "null"
}
}
],
"fullName": "SARAH EMILY MORGAN",
"nameComponents": {
"title": null,
"middleName": "EMILY",
"firstNameOnly": "SARAH",
"firstNameSuffix": null
},
"occupation": "Engineer",
"employer": "Any Company LLC",
"foreignerStatus": "EXTRANJERO",
"extraNames": "NOM D'USAGE",
"title": "DR",
"pepSanctionMatch": null,
"citizenship": null,
"electorNumber": "GMVLMR80070501M100",
"eyeColor": "BRN",
"hairColor": "BRN",
"height": "5'-03"",
"weight": "093 lb"
},
"document": {
"number": "MORGA753116SM9IJ",
"validFrom": null,
"validUntil": "2022-04-20",
"type": "DRIVERS_LICENSE",
"country": "US",
"state": "NY",
"placeOfIssue": "ALBANY",
"firstIssue": "2015-03-21",
"issueNumber": "01",
"issuedBy": "ISSUER",
"remarks": "WORK PERMITTED",
"nfcValidated": true,
"residencePermitType": "C",
"portraitIsVisible": "true",
"signatureIsVisible": "true",
"ineIdentifier": "116375842",
"specimen": {
"containsContactlessChip": false,
"firstIssuedDate": "2020-01-01",
"lastIssuedDate": "2021-01-02",
"nistVersion": "1.2.3",
"digitalDocument": true,
"nonStandardDrivingLicense": false,
"militaryDocument": false,
"temporaryEmergencyDocument": false,
"asylumRefugeeDocument": false,
"ICAOStandardizedDocument": false,
"notNationalIdCard": true,
"legalStatus": "primary",
"hasSecurityRisk": false
}
},
"additionalVerifiedData": {
"driversLicenseNumber": "1234569",
"driversLicenseCategory": {
"B": true
},
"driversLicenseCategoryFrom": {
"B": "2019-10-06"
},
"driversLicenseCategoryUntil": {
"B": "2025-10-05"
},
"driversLicenseCategories": ["B", "C", "5", "6"],
"estimatedAge": 32,
"estimatedGender": 0.613,
"processNumber": "12345678912 1234",
"cpfValidation": {
"status": "CPF is validated",
"cpfNumber": "123456789",
"name": "SARAH MORGAN",
"dateOfBirth": "1967-03-30",
"yearOfDeath": null
},
"ineBiometricRegistryValidation": {
"faceMatch": true,
"faceMatchPercentage": 89,
"responseStatus": "success"
},
"registryValidation": {
"countryRegistry": "CO",
"registryName": "resigo",
"fullNameSimilarity": 80,
"documentValid": true,
"personIsAlive": true
},
"proofOfAddress": {
"nameMatch": true,
"nameMatchPercentage": 100.00
"documentType": "UTILITY_BILL",
"fraud": {
"riskLevel": "HIGH_RISK",
"reason": "PDF_PROCESSED_BY_EDITOR",
"reasonDescription": "Document was processed using editing software",
"indicators": []
}
},
"validationResults": [
{
"registryName": "USA - Credit + US Identity Graph (US15)",
"firstName": "MATCH",
"lastName": "MATCH",
"dateOfBirth": "NO_INPUT",
"address": "PARTIAL_MATCH",
"city": "MATCH",
"state": "MATCH",
"zip": "MATCH",
"idNumber": "NO_DATA"
}
]
},
"riskScore": {
"score": 0.12
},
"riskLabels": [
{
"label": "document_integration_...",
"category": "document",
"sessionIds": ["5a2358e7-fd31-4fcb-a23f-4d76651ba68a"]
}],
"biometricAuthentication": {
"matchedSessionId": "d40edb60-6ae6-4475-be72-84b81669cce6",
"matchedSessionEndUserId": "a1b2c35d-e8f7-6d5e-3cd2-a1b2c35db3d4",
"matchedSessionVendorData": "User001",
"details": {
...
}
},
"comments": []
},
"highRisk": false,
"technicalData": {
"ip": "186.153.67.122"
}
} Request properties explained
*Always sent, irrespective of product or solution used
status:string* Status of the responseverification:object* Verification request decision object.nullif decision is not available yetid:string* UUID v4 which identifies the verification sessionattemptId:string* UUID v4 of the attempt which received a status (as shown inverification.statusfield)vendorData: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 specifiedstatus:string* Verification status, one ofapproved,declined,resubmission_requested,review,expired,abandonedcode:integer* Verification session decision code, one of9001,9102,9103,9104,9121. For more info, see the verification session decision codesreason: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 verificationdecisionTime:string | null* Timestamp of the decision, represented asUTC YYYY-MM-DDTHH:MM:SS.SSS+Timezone Offset(ISO 8601)acceptanceTime: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)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: a map with keysfulladdressandparsedAddress. Optional, depending on the integrationfullAddress:string | nullAddress as single stringparsedAddress:objectObject containing parts of thefullAddressvalue as separate keys. Optional, depending on the integrationcity:string | nullAny human settlement, including cities, towns, villages, hamlets, localities, etc.country:string | nullSovereign nations and their dependent territories (ISO-3166)houseNumber:string | nullExternal (street-facing) building numberpostcode:string | nullPostal codes used for mail sortingstate:string | nullA first-level administrative divisionstreet:string | nullStreet nameunit:string | nullAn apartment, unit, office, lot, or other secondary unit designator
fullName:string | nullFull name of the person. Optional, only for Indian Aadhaar cards registry based verificationnameComponents:objectObject containing person’s name components extracted from the document. Optional, only available if configured for you integration by Verifftitle:string | nullPerson’s title extracted from the document, e.g., “MR”, “MS”.nullwhen no title data present on the documentmiddleName:string | nullPerson’s middle name extracted from the document, from a dedicated field on the document or document barcode results.nullwhen the first name has no suffix according to barcode data. The field is not sent when the document has no dedicated field or barcodefirstNameOnly:string | nullPerson’s first name extracted from the document and stripped from all components likemiddleNameorfirstNameSuffixfirstNameSuffix:string | nullPerson’s first name suffix.nullwhen the first name has no suffix according to barcode data. The field is not sent when the document has no barcode
occupation:stringOccupation data from the document. Optional, depending on the integrationemployer:stringEmployer's name from the document. Optional, depending on the integrationforeignerStatus:stringForeigner status field from the document. Optional, depending on the integrationextraNames:stringAdditional name from the document. Optional, depending on the integrationtitle:stringPerson’s title extracted from the document. Optional, depending on the integrationifeIdentifier:string | nullThe voter's card identifier (OCR). Optional, only for Mexican registries verificationineIdentifier:string | nullThe citizen's identifier (Identificador del Ciudadano). Optional, only for Mexican registries verificationpepSanctionMatch:string | nullLegacy field, may return incorrect result, should be ignoredcitizenship:nullDeprecated, always returns nullelectorNumber:string | nullPerson’s electoral number. Optional, currently only for Mexican registry checks. Present only if the data was available on the documenteyeColor:string | nullPerson’s eye color as stated on the document. Optional, present only if the data was available on the documenthairColor:string | nullPerson’s hair color as stated on the document. Optional, present only if the data was available on the documentheight:string | nullPerson’s height as stated on the document. Optional, present only if the data was available on the documentweight:string | nullPerson’s weight as stated on the document. Optional, present only if the data was available on the document
document:object* Verified documentnumber:string | null* Document number,[a-zA-Z0-9]characters onlytype:string | null* Document type, one ofPASSPORT,ID_CARD,RESIDENCE_PERMIT,DRIVERS_LICENSE,VISA,OTHER. For more info, see the Supported document types for IDV articlecountry:string | null* Document issuing country, represented as ISO 3166alpha-2codestate:string | null* Document issuing state, represented as ISO 3166alpha-2oralpha-3coderemarks:stringData extracted from document’s remarks fieldvalidUntil:string | nullDocument is valid until date, represented asYYYY-MM-DD. Optional, must be configured for your integration by the Solutions EngineervalidFrom:string | nullDocument is valid from date, represented asYYYY-MM-DD. Optional, must be configured for your integration by the Solutions EngineerplaceOfIssue:string | nullPlace where document was issued. Optional, depending on the integrationfirstIssue:string | nullDate of document first issue, represented asYYYY-MM-DD. Optional, depending on the integrationissueNumber:string | nullDocument issue number. Optional, depending on the integrationissuedBy:string | nullDocument issuing authority. Optional, depending on the integrationnfcValidated:booleanIndicates if the biometric document data has been successfully decoded. Optional, only when NFC validation has been enabled for the integrationresidencePermitType:stringType of the residence permit, as shown on the document. Optional, depending on the integrationportraitIsVisible:booleanIndicates that the portrait image is visible in the session and its quality is sufficient to perform verification. Optional, depending on the integrationsignatureIsVisible:booleanIndicates that the signature is present on the document and readable to perform the verification. Optional, depending on the integrationineIdentifier:string | nullPerson’s INE (Mexican voter’s registry) identifier number. Optional, present only if the data was available on the documentspecimen:objectContains additional data about the particular document type. Optional, depending on integrationcontainsContactlessChip:booleanIndicates if the document contains a contactless chip (NFC)firstIssuedDate:stringIndicates the first issue date of the identity document template, as YYYY-MM-DDlastIssuedDate:stringIndicates the last issue date of the identity document template, as YYYY-MM-DDnistVersion:stringIndicates the version of the US National Institute of Standards and Technology guidelinesdigitalDocument:booleanIndicates if the document is a digital template identity documentnonStandardDrivingLicense:booleanIndicates if the driving permit is different from the standard driver's licence (e.g. it is a learner's license, temporary driver's license, permit to drive boats)militaryDocument:booleanIndicates if the document is issued to a military personnel/staff or personnel's familytemporaryEmergencyDocument:booleanIndicates if the document is a temporary identity documentasylumRefugeeDocument:booleanIndicates if it is a document that is issued exclusively to asylum seekers or refugeesICAOStandardizedDocument:booleanIndicates if the document is under the standards of International Civil Aviation OrganizationnotNationalIdCard:booleanIndicates if the identity card is not a national ID card (e.g., social security card, tax ID, electoral ID)legalStatus:string|nullIndicates the legal status of the identity document in the country of issuance. One of primary, secondary, tertiary, indicating to what extent the document is accepted as legal proof of identityhasSecurityRisk:booleanIndicates if the document has properties that can increase the chance of document tampering
additionalVerifiedData:objectData that has been optionally verified for the session. Optional, depending on the integrationdriversLicenseNumber:stringNumber of the driver's license. Optional, depending on the integrationdriversLicenseCategory:objectIndicates the driver’s licence category/ies. Optional, the presence of this property depends on drivers licence category extraction being enabled for the integration.B:Boolean | null
driversLicenseCategoryFrom:objectDate when the driving license category was obtained. Optional, depending on the integrationB:string | nullCategory is valid from date, represented asYYYY-MM-DD
driversLicenseCategoryUntil:objectDriving license category expiry date. Optional, depending on the integrationB:string | nullCategory is valid until date, represented asYYYY-MM-DD
driversLicenseCategories:arrayList of category types visible on the driver's licenseestimatedAge:numberEstimated age. Optional, depending on the integrationestimatedGender:numberEstimated gender, values closer to 0.0 indicate 'male', values closer to 1.0 indicate 'female'. Optional, depending on the integrationUKTFCheckResult:arrayArray of UK DIATF checks results. Optional, only for customers with Veriff UK DIATF solutioncpfValidation:object | nullBrazilian individual taxpayer registry (CPF) validation check object. Optional, only for customers with Brazilian registry checksstatus:string | nullStatus of the entry in the registry, one ofCPF is validated,CPF is suspended,CPF holder is deceased,CPF is pending regularization,CPF is cancelled(was a duplicate),Cancelled craft(meaning that it was cancelled due to reasons other than being a duplicate)cpfNumber:string | nullBrazilian individual taxpayer registry (CPF) number of the personname:string | nullPerson's name in the CPFdateOfBirth:string | nullPerson's date of birth in the CPF asYYYY-MM-DDyearOfDeath:string | null Person's year of death in the CPF asYYYY-MM-DD
processNumber:stringProcess number (e.g., "Trámite №") from the document. Optional, depending on the integrationineBiometricRegistryValidation: object INE Biometric Database Verification check object. Optional, available only when the INE Biometric Validation check has been enabled for the integrationfaceMatch:boolean | nullIndicates if the person's selfie image is a match with their image in the registry. This decision is made based on the value returned infaceMatchPercentage(see below).nullif the check could not be completedfaceMatchPercentage:integer | nullIndicates the level of similarity the system thinks the matched images have, in the range of 0-100. Values ≥85 indicate a match; values <85 indicate that images do not match.nullif the check could not be completedresponseStatus:string | nullIndicates the response received from the service provider. One of success or failure; ornullif the check could not be completed
registryValidation:objectRegistry validation check object. Optional, available only when the registry validation check has been enabled for the integration (currently available for Colombia registries)countryRegistry:stringCountry of the registryregistryName:stringName of the registryfullNameSimilarity:numberSimilarity of the full name in the registry to the full name in the documentdocumentValid:booleanIndicates if the document is valid in the registrypersonIsAlive:booleanIndicates if the person is alive in the registry
proofOfAddress:objectProof of address data. Optional, available only if the Proof of Address Verification has been enabled for your integration.nameMatch:booleanIndicates if the name on the proof of address document matches the name from the initial request data.nullif the check could not be completed.nameMatchPercentage:floatIndicates the level of similarity the matched names have, in the range of 0.00-100.00.nullif the check could not be completed.documentType:stringIndicates the type of the proof of address document.nullif the check could not be completed.fraud:objectReturns data about document integrity. Available only if the fraud validation check has been enabled for your Proof of Address integration.riskLevel:string | nullIndicates the risk level, possible valuesLOW_RISK,MEDIUM_RISK,HIGH_RISK.nullif the check was not executed or failed.reason:string | nullShort description indicating the reason behind the risk level.nullif the check was not executed or failed.reasonDescription:string | nullHuman readable explanation of the data in thereasonfield.nullif the check was not executed or failed.indicators:arrayArray strings listing the factors that influenced the risk assessment. Empty if the check was not executed or failed.
validationResults:arrayData that has been optionally verified for the US Database Verification session, depending on the integration. Empty if no additional data was verified. Optional, depending on integrationregistryName:stringName of the registryfirstName:stringIndicates the match level of person’s first name datalastName:stringIndicates the match level of person’s last name datadateOfBirth:stringIndicates the match level of person’s date of birth dataaddress:stringIndicates the match level of person’s address datacity:stringIndicates the match level of person’s address data, specifically citystate:stringIndicates the match level of person’s address data, specifically statezip:stringIndicates the match level of person’s address data, specifically zip code (post code)idNumber:stringIndicates the match level of person’s identity number or SNN number data
riskScore:objectData about the risk score. Optional, depending on the integrationscore:numberA float in the range of 0.0–1.0. Numerical value representing the overall risk associated with the session. Lower score indicates more confidence in that the session is genuine. Note: in the Veriff environment, the range is shown as 1–100.
riskLabels:arrayArray of risk labels related to the session. Optional, the presence of this property depends on risk labels being enabled for the integration. Log in to Customer portal to see the Risk Insights and Crosslinks[↗] article in Veriff Knowledge Baselabel:stringName of the risk labelcategory:stringRisk label category, one ofclient_data_mismatch,crosslinks,device,document,images,network,session,person,risk-scoresessionIds:arrayArray of verification IDs that are referenced to the particular risk label
biometricAuthenticationobjectBiometric Authentication data object. Optional, the presence of this property depends on biometric authentication being enabled for the integrationmatchedSessionId:string | nullUUID v4 which refers to the verification session ID which face matchedmatchedSessionEndUserId:string | nullRefers to the verification session endUserId which the face matchedmatchedSessionVendorData:string | nullUUID v4 which refers to the verification session vendor data or end-user UUID which face matcheddetails:objectLists the results of different checks that were made to verify the end-user. Log in to Customer portal to see the Risk Insights and Crosslinks[↗] article in Veriff Knowledge Base
comments:array(Deprecated) Always returns empty []highRisk:boolean(Deprecated) Marked if session was considered high risk or not
technicalData:object* Technical data objectip:string | nullIP of the device from which the verification was made
Changelog
Date | Description |
|---|---|
Oct 3, 2025 |
|
Oct 2, 2025 |
Note about |
Sep 8, 2025 | Updated the description of |
Sep 5, 2025 |
|
Jul 22, 2025 |
|
Jul 14, 2025 | Improved the description of When is decision webhook sent? section |
Jun 12, 2025 | The |
Jun 6, 2025 | Heading “Article versioning” changed to “Changelog” |
May 20, 2025 |
|
May 15, 2025 |
|
Apr 12, 2025 |
|
Mar 12, 2025 | Documentation published |