Verdict Definitions
The complete vocabulary of verdicts returned by the eKYC sanity, tampering and face-matching APIs, grouped by the check that produces them.
Face Sanity
Returned in data.portrait_sanity.verdict by Verify Face Sanity, and in the liveness result by Verify Face Liveness.
| Field | Type | Description |
|---|---|---|
good | string | Image is of good quality. |
not_qualified | string | Image is of poor quality — blurry, too bright or too dark. |
image_has_multiple_faces | string | Image has more than one face. |
image_has_no_faces | string | Image has no face. |
face_too_small | string | Face in the image is too small. |
face_too_big | string | Face in the image is too big. |
left | string | Face tilted left. |
right | string | Face tilted right. |
small_or_closed_eye | string | Eyes are too small or closed. |
wear_glasses | string | Wearing glasses, but eyes are visibly open. |
occluded_face | string | Face is occluded. |
is_live | string | Liveness check result. |
incorrect_image_type | string | The input image is not the correct type for this flow. |
ID Sanity
Returned in data.card_sanity.verdict by Verify ID Card Sanity.
| Field | Type | Description |
|---|---|---|
good | string | Image is of good quality. |
incomplete | string | The image is obscured or incomplete. |
abnormal_object | string | An object is present in the image, obscuring information. |
image1_not_qualified | string | The front image is of poor quality (blurry, too bright, too dark), affecting the readability of information. |
image2_not_qualified | string | The back image is of poor quality (blurry, too bright, too dark), affecting the readability of information. |
image1_glare | string | The front image is too bright, with the bright area inside the ID. |
image2_glare | string | The back image is too bright, with the bright area inside the ID. |
no_card | string | The ID card is not detected in the image. |
multicard_image | string | There is more than one ID card in the image. |
photocopied | string | The card is a photocopy, not the real one. |
id_card_too_small | string | ID card is too small. |
ID Tampering
Returned in data.card_tampering.details[].verdict by Detect ID Card Tampering.
| Field | Type | Description |
|---|---|---|
good | string | The image has no signs of alteration, forgery or editing. |
non_liveness | string | The photo is taken from an image — for example a screenshot on a phone or computer. |
photo_tampered | string | The ID photo shows signs of modification. |
wrong_font_format | string | There are signs of information being altered. |
age_not_match | string | Age information from the QR code and the OCR date of birth do not match. |
id_not_follow_rule | string | The NID number sequence contradicts the province/city, gender, year of birth, issue date or expiration date on the card. See the composition rules below. |
invalid_expiry_date | string | The expiration date is invalid against the 25/40/60 birthday rule. See the derivation below. |
card_expired | string | The card is expired, comparing the current date with the expiration date printed on the NID. |
incorrect_issue_date | string | The NID was issued before the customer turned 13 years old. |
not_in_same_card | string | The front and back do not belong to the same NID. |
wrong_font_or_format | string | Fields on the NID have unusual fonts or formats. |
qr_info_not_match | string | The QR code contradicts the card surface. |
mrz_not_follow_rule | string | The MRZ code is not valid against the TD1 standard. |
mrz_qr_info_not_match | string | The MRZ and the QR disagree. |
NID number composition
id_not_follow_rule checks the ID number against the information printed on the card:
- The first 3 digits are the code for the province, centrally governed city, or country where the citizen registered their birth (ID cards only).
- The next 1 digit is the gender code of the citizen.
- The next 2 digits are the year-of-birth code of the citizen.
- The last 6 digits are a random number range.
Expiry date derivation
invalid_expiry_date checks that the expiration date is the nearest of the holder's exact 25th, 40th or 60th birthday. If the card was issued within 2 years before one of those birthdays, the expiration date rolls forward to the next one.
Example: Mr. A, born 4 May 1980, held a card expiring 4 May 2020. On 3 October 2018 he applied for a replacement. Because the application fell between 5 May 2018 and 4 May 2020, the new expiration date is 4 May 2040.
If the card is issued to someone over 60, or within 2 years before turning 60, the expiration date is "No expiration date".
Face Matching
Returned in data.compare_faces[].result by Compare Faces.
| Field | Type | Description |
|---|---|---|
matched | string | Faces are matched. |
unmatched | string | Faces are not matched. |
unsure | string | Not sure — the score falls between the match and non-match thresholds. |
Next Steps
- Verify ID Card Sanity — where ID sanity verdicts come from
- Detect ID Card Tampering — where tampering verdicts come from
- eKYC Overview — how the verdicts combine into an onboarding decision