> For the complete documentation index, see [llms.txt](https://docs.uqudo.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.uqudo.com/docs/kyc/uqudo-sdk/sdk-result/data-structure/verification-object.md).

# Verification Object

{% hint style="info" %}
It's important to always validate the SDK result against your specific requirements.

The mobile SDK is designed to automatically detect and block screen presentation and printed document attacks, unless these protections have been explicitly disabled. However, server-side verification provides an additional layer of security by repeating these checks and performing further specialised validations. These include advanced print detection models, which can identify attacks that the mobile SDK may miss, as well as ID photo substitution attack detection.

While the mobile SDK serves as an effective first line of defence, server-side validation remains essential. Following a zero-trust approach to client devices, we currently replicate all mobile SDK security checks on the server. We are also continuously developing more advanced security capabilities that will be available exclusively through server-side verification.

**Note:** For the web SDK, server-side validation is even more crucial because the SDK does not automatically detect or block screen presentation or printed document attacks. These security checks are performed entirely during server-side verification.

\
Also, make sure to validate the other sections of the verification object, like "Data consistency check", "MRZ checksum", "Reading", "Biometric" and "Lookup".
{% endhint %}

```json
{
  "verifications": [{
	"documentType": "document type, e.g. UAE_ID",
	"sourceDetection": {
  		"enabled": true,
      "allowNonPhysicalDocuments": true or false,
  		"selectedResolution": "e.g. 2160x3840",
  		"optimalResolution": true or false
	},
	"idScreenDetection": {
  		"enabled": true or false,
  		"score": 0-100
	},
	"idPrintDetection": {
  		"enabled": true or false,
  		"score": 0-100
	},
	"idPhotoTamperingDetection": {
  		"enabled": true or false,
  		"score": 0-100
	},
	"dataConsistencyCheck": {
  		"enabled": true or false,
  	  "fields": [{
      		"name": "common field name",
"match": "MATCH or MATCH_PARTIALLY or NO_MATCH",
      		"sources": [{
          		"source": "SCAN or READING or LOOKUP",
          		"documentSide": "FRONT or BACK or none",
          		"name": "original field name that is used in the source",
          		"value": "original value of the field"
        		}]
    	}]
	},
	"mrzChecksum": {
  		"enabled": true or false,
  		"finalCheckDigit": number,
  		"valid": true or false,
  		"checkDigits": [{
   		    "fieldName": "name",
   		 	  "fieldValue": "value",
   			  "checkDigit": number,
   		 	  "valid": true or false
   	 	}]
	},
	"reading": {
  		"enabled": true or false,
      "passiveAuthentication": {
           "enabled": true,
           "countrySigningCertificateAvailable": true or false,
           "documentSigningCertificateAvailable": true or false,
           "documentSigningCertificateSignatureValid": true or false,
           "documentDataSignatureValid": true or false,
      },
      "chipAuthentication": {
           "enabled": true
      },
      "activeAuthentication": {
           "enabled": true
      }
	},
	"biometric": {
  		"enabled": true or false,
  		"type": "FACIAL_RECOGNITION",
  		"matchLevel": 0-5	
  },
	"lookup": {
  		"enabled": true or false,
  		"documentFound": true or false
  }  
  }]
}
```

Source detection:

* **enabled**: Always true
* **allowNonPhysicalDocuments**: By default is set to false, can be overridden in the mobile SDK configuration. Always true for the web SDK
* **selectedResolution**: Resolution used to perform source detection
* **optimalResolution**: Indicates if the process was performed with optimal resolution. Regarding the mobile SDK, in the majority of the cases it should be true but in rare cases might be false, for instance for phones that don’t support an optimal resolution. Suboptimal resolution can affect the accuracy of the source detection process and therefore should trigger a warning and therefore manually evaluated

Id screen detection:

* **enabled**: Always true
* **score**: An assigned score ranging from 0 to 100 indicates the likelihood of a document scanned through a screen. A higher score suggests a higher probability to be a screen. It's important to be aware that the **mobile SDK only** will reject scanning attempts if the score exceeds 50 unless allowNonPhysicalDocuments is set to true

Id print detection:

* **enabled**: Always true
* **score**: An assigned score ranging from 0 to 100 indicates the likelihood of a document scanned through a printed copy. A higher score suggests a higher probability to be a printed copy. It's important to be aware that the **mobile SDK only** will reject scanning attempts if the score exceeds 50 unless allowNonPhysicalDocuments is set to true

Id photo tampering detection:

* **enabled**: Always true
* **score**: An assigned score ranging from 0 to 100 indicates the likelihood of tampering with the ID photo. A higher score suggests a higher probability of tampering. It's important to be aware that the **mobile SDK only** will reject scanning attempts if the score exceeds 70. Scores surpassing 40 should trigger a warning and therefore manually evaluated\
  \
  **Note**: This feature has been removed from the mobile SDK since version 3.8.0. See the changelog here <https://docs.uqudo.com/docs/kyc/uqudo-sdk/changelog/mobile-sdk#version-3.8.0>

Data consistency check:

* **enabled**: Always true
* **fields**: List of fields found across all the steps of the KYC journey that are duplicates and therefore can be matched. Please be aware that the list may be empty if there are no fields available for matching.
* Field object:
  * **name**: Common field name across all the sources
  * **match**: MATCH or MATCH\_PARTIALLY or NO\_MATCH
  * **sources**: List of sources that have been matched
  * Source object:
    * **source**: The source of the field. Possible values are SCAN, READING or LOOKUP
    * **documentSide**: The side of the document (FRONT or BACK) if source is SCAN
    * **name**: Original field name
    * **value**: Value of the field

MRZ checksum:

* **enabled**: Enabled if the document contains a MRZ
* **finalCheckDigit**: The check digit number used to validate the checksum of multiple values across the MRZ
* **valid**: If the final checksum is valid or not
* **checkDigits**: List of check digit validations per MRZ field
* Check digit object:
  * **fieldName**: Field name
  * **fieldValue**: Field value
  * **checkDigit**: Check digit number
  * **valid**: If the checksum is valid or not

Reading:

* **enabled**: If the reading step (NFC chip reading) was enabled or not. Only available in the mobile SDK
* **passiveAuthentication**: Available only if passive authentication is supported by the document
  * **enabled**: true If passive authentication is supported by the document (e.g. passport), otherwise passiveAuthentication object is not returned as described above
  * **countrySigningCertificateAvailable**: true if the country signing certificate is available
  * **documentSigningCertificateAvailable**: true if the document signing certificate is available
  * **documentSigningCertificateSignatureValid**: implies that countrySigningCertificateAvailable is true. If countrySigningCertificateAvailable is false the attribute is not exported
  * **documentDataSignatureValid**: if digital signature validation of the data was successful or not. For passports could be false as we don't reject the reading because some passports could have a defect
* **activeAuthentication**: Available only if active authentication was performed
  * **enabled**: true If active authentication is supported by the document, otherwise activeAuthentication object is not returned as described above
* **chipAuthentication**: Available only if chip authentication was performed
  * **enabled**: true If chip authentication is supported by the document, otherwise chipAuthentication object is not returned as described above

Biometric:

* **enabled**: If biometric was enabled or not
* **type**: Can only be FACIAL\_RECOGNITION
* **matchLevel**: match level returned

Lookup:

* **enabled**: If lookup was enabled or not
* **documentFound**: If a matching document was found or not
