---
Source: https://docs.microblink.com/verify/check
Title: Checks
Description: How Verify checks documents for fraud, and how check results are structured
---

# Checks

A check is one verification unit.
For example, a check might tell you that the document is a photocopy, or that the date of birth printed on the front doesn't match the one encoded in the barcode.

Verify has numerous checks, and they abstractly represent the underlying fraud detection logic and our AI models.
Related checks are grouped together, so a group's result summarizes everything below it.

For example, screen presence and photocopy are both document liveness checks, and together they tell you whether the document was physically present.

## How checks are structured

Checks live in the `verification.checks` object of the [response](./response.md#see-what-was-checked-on-the-document).
It is a typed object with four groups, each of which is itself a check:

```json
{
  "verification": {
    "checks": {
      "extractedDataCheck": { "result": "Fail" },
      "documentLivenessCheck": { "result": "Pass" },
      "visualCheck": { "result": "Pass" },
      "documentValidityCheck": { "result": "Pass" }
    }
  }
}
```

Every check is an object with an overall `result` and sub-checks:

```json
{
  "verification": {
    "checks": {
      "extractedDataCheck": {
        "result": "Fail",
        "mrzCheck": {
          "result": "Fail",
          "parsedCheck": { "result": "Pass" },
          "checkDigitsCheck": { "result": "Fail" }
        }
      }
    }
  }
}
```

## Check results

Every check resolves to one of three values in its `result` field:

- `Pass`: the check ran and the document passed it.
- `Fail`: the check ran and the document failed it.
- `NotPerformed`: the check didn't run, for example because the document doesn't carry the data it needs, or because you disabled it.

## Extracted data checks

`checks.extractedDataCheck` covers everything derived from the data read off the document.
This ranges from simple questions, such as whether the dates are in a logical order, to composites of hundreds of internal checks, such as barcode authenticity on AAMVA documents.

It has six children:

- `matchCheck`: if data is read from more than one place on the document, does the same data match; for example does information from the  visual inspection zone correspond to the information from the [MRZ](./glossary.md#mrz).
- `logicCheck`: whether the values make sense, for example is the date on the document a possible date; includes general document logic, like check digits or document field rules.
- `formatCheck`: whether each field's value has the shape its issuer prescribes.
- `barcodeAuthenticityCheck`: whether the document's barcode is genuine.
- `mrzCheck`: whether the machine-readable zone is sound.
- `genericDataCheck`: checks whether or not the data on the document is generic, for example "Sample Specimen".

## Document liveness checks

`checks.documentLivenessCheck` tells you whether a physical document was in front of the camera, or if it was a non-physical representation.
The passive liveness approach comes down to two checks, powered by various AI models:

- `screenPresenceCheck`: whether the document is being presented on a screen.
- `photocopyCheck`: whether the document is a photocopy.

Hand presence is reported separately, as `imageAssessment.handPresenceCheck`.

## Visual checks

`checks.visualCheck` represents the visual fraud checks.
It doesn't cover visual problems that aren't fraud, such as glare or blur; those belong to [image assessment](#image-assessment-isnt-a-check-group).

It has three children:

- `portraitForgeryCheck`: whether the portrait (face image) has been tampered with.
- `securityFeaturesCheck`: whether the document's static security features are as expected.
- `generativeAiCheck`: whether the image, document, or a part of it, was generated by an AI model.

## Document validity checks

`checks.documentValidityCheck` covers whether the document is usable for identification at all, regardless of whether it's genuine.

It has two children:

- `expiredCheck`: whether this particular document has expired.
- `discontinuedDocumentCheck`: whether this type of document is still acceptable in its jurisdiction today, regardless of its own expiry date.

## Image assessment isn't a check group

Image-related assessment sits outside `verification.checks`, in the top-level `imageAssessment` object.
It holds three checks:

- `imageQualityCheck`: the combined output of the heuristics and models that decide whether the captured images are good enough to verify.
- `croppedDocumentCheck`: whether a side is fully cropped, with no surrounding background.
  See [how to accept cropped images](./cropped.md).
- `handPresenceCheck`: whether a hand is holding or occluding the document.

It's the place to look when a verdict is `Retry`, because it usually explains why a new image would help.
The `messages` response field will also surface relevant information in this case (see [Messages](./messages.md)).


Last updated on Aug 3, 2026
