# DMV Face Match Technical Details

DMV Face Match is Incode’s direct connection to state DMV systems for biometric face comparison. During verification, the supported document data fields are sent to the DMV. If the document data fields match to a record within the DMV database, the uploaded selfie is compared against the official portrait stored in the state’s DMV database. A successful Face Match guarantees that the Data Match also passed, and provides the highest level of assurance that the person presenting the document is the legitimate holder.

DMV Face Match is part of the overall [US GovMatch](/general-reference/united-states-govmatch/) offering.

***

## Decisioning

State requirements mandate that certain data fields must match before Incode can access the DMV selfie. Face matching only occurs after this data match succeeds. Therefore, a successful Face Match guarantees that the Data Match also passed.

Decisioning should be based on the `status` value in the `overall` object. The `status` value can be:

- **OK**: Face Match is successful

- **FAIL**: Face Match is unsuccessful
  - Did not meet Must-Match requirements of the state

    OR
  - Met Must-Match requirements of the state, but uploaded face image did not match official photograph stored in the state's DMV database

<Accordion title="Scoring">
  Most states return a face match confidence score with a passing threshold of 77. Due to variability of image quality by state, face match confidence thresholds vary, and not every state may provide that level of granularity. Numeric match confidence is provided where applicable and acceptance thresholds are subject to change. When numeric match confidence is not returned, a simple pass (100) / fail (0) is used when determining a match.
</Accordion>

<Accordion title="Must-Match Data fields for CA">
  For California, the following data must meet the listed match requirements:

  - Document Number: Exact match
  - First 3 letters of Last Name: Partial match
  - Date of Birth: Exact match
</Accordion>

<Accordion title="Must-Match Data fields for VA, AZ, MO">
  For Virginia, Arizona, and Missouri, the following data must meet the listed match requirements:

  - Document Number: Exact match
  - First Name: Exact match
  - Last Name: Exact match
  - Date of Birth: Exact match
</Accordion>

***

## Standalone API

`POST` `/omni/process/government-validation?countryCode=USA`

To retrieve the results of GovMatch, use the [Fetch Scores endpoint](/reference/getscores/). When government record verification is enabled for your organization, a `governmentValidation` field is present in the endpoint results.

### Request Body

```json
{
    "idNumber": "T123456789",
    "firstName": "EMILYTEST",
    "paternalLastName": "DAVISTEST",
    "birthDate": "1987-04-18",
    "base64Image": "{{selfie}}",
    "issuerState": "VA"
}
```

### Response Body

```json
{
    "valid": true,
    "statusCode": 0,
    "governmentValidation": {
        "recognitionConfidence": {
            "value": "100.0",
            "status": "OK"
        },
        "validationStatus": {
            "value": "0",
            "status": "OK",
            "key": "ok"
        },
        "ocrValidation": [
            {
                "value": "true",
                "status": "OK",
                "key": "documentNumber"
            },
            {
                "value": "true",
                "status": "OK",
                "key": "firstName"
            },
            {
                "value": "true",
                "status": "OK",
                "key": "paternalLastName"
            },
            {
                "value": "true",
                "status": "OK",
                "key": "birthDate"
            }
        ],
        "ocrValidationOverall": {
            "value": "100.0",
            "status": "OK"
        },
        "overall": {
            "value": "100.0",
            "status": "OK"
        },
        "provider": "DMV Face Match"
    }
}
```

### Response Details

The response for DMV Face Match is contained within the `governmentValidation` object. This object contains the following fields:

| **Field**                               | Type                | **Description**                                                                                                                                                                                               |
| --------------------------------------- | ------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `validationStatus`                      | StatusValue         | Provider status code for error handling. Contains a `value`, `status`, and `key`. See [below](#statusvalue-keyvalue-pairs) for more information.                                                              |
| `ocrValidation`<br />_Optional_         | Array\[StatusValue] | Individual data field match results. Each data field result contains a `value`, `status`, and `key`. See [below](#statusvalue-keyvalue-pairs) for more information.                                           |
| `recognitionConfidence`<br />_Optional_ | StatusValue         | Face Match confidence score. Only present for DMV Face Match; indicates biometric verification was performed. Contains a `value` and `status`. See [below](#statusvalue-keyvalue-pairs) for more information. |
| `ocrValidationOverall`<br />_Optional_  | StatusValue         | Percentage of OCR fields that matched. Supplementary data for analysis. Contains a `value` and `status`. See [below](#statusvalue-keyvalue-pairs) for more information.                                       |
| `overall`                               | StatusValue         | Primary verification result. Use this field to determine pass/fail. Contains a `value` and `status`. See [below](#statusvalue-keyvalue-pairs) for more information.                                           |
| `provider`<br />_Optional_              | String              | Indicates whether the request was sent to DMV Face Match (`DMV Face Match`) or DMV Data Match (`DMV Data Match`). Only present for US verification.                                                           |

#### StatusValue Key/Value Pairs

Any field listed as StatusValue in the table above contains a `value` and a `status`. Some also contain a `key`.

<Table align={[null,null,"left"]}>
  <thead>
    <tr>
      <th>
        **Field**
      </th>

      <th>
        Type
      </th>

      <th>
        **Description**
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `value`<br />_Optional_
      </td>

      <td>
        String
      </td>

      <td>
        The numeric or boolean value.
      </td>
    </tr>

    <tr>
      <td>
        `status`
      </td>

      <td>
        String
      </td>

      <td>
        The status code. Possible statuses are:

        - `OK`: User passed verification.

        - `FAIL`: Either data or face did not match during validation.

        - `UNKNOWN`: DMV Face Match was run, but the submitted document or region isn’t supported or something went wrong when trying to perform validation.
      </td>
    </tr>

    <tr>
      <td>
        `key`<br />_Optional_
      </td>

      <td>
        String
      </td>

      <td>
        The key for which the status is being reported. For example, `firstName`, `birthDate`, or `documentNumber`.
      </td>
    </tr>
  </tbody>
</Table>

### Error Codes

Please refer to <Anchor target="_blank" href="/general-reference/error-code-changes-for-us-government-verification/">Upcoming Changes to Error Codes for US Government Verification</Anchor>

If these errors appear for a legitimate user, or if the errors persist, submit a support ticket through [http://support.incode.com/](http://support.incode.com/) for further investigation.

<Table align={["left","left","left","left"]}>
  <thead>
    <tr>
      <th>
        Reason Code
      </th>

      <th>
        Description
      </th>

      <th>
        Status
      </th>

      <th>
        Next Steps
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `providerNotConfigured`
      </td>

      <td>
        **Provider Not Configured**<br />Provider is not configured or is incorrectly configured for this flow.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Submit a support ticket through [http://support.incode.com/](http://support.incode.com/) to troubleshoot issues with your configuration.
      </td>
    </tr>

    <tr>
      <td>
        `missingDocumentId`
      </td>

      <td>
        **Missing Document Number**
        Document number missing or has an invalid pattern.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Check ID capture quality for barcode/OCR readability issues.
      </td>
    </tr>

    <tr>
      <td>
        `invalidExpirationDate`
      </td>

      <td>
        **Invalid Expiration Date**
        Expiration date is not valid per document standards.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Check ID capture quality for barcode/OCR readability issues. If user is legitimate, submit a support ticket through [http://support.incode.com/](http://support.incode.com/) for further investigation.
      </td>
    </tr>

    <tr>
      <td>
        `notEnoughData`
      </td>

      <td>
        **Missing Required Data**
        One or more required fields are missing or invalid.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Ensure all required fields are provided by the user in the session.
      </td>
    </tr>

    <tr>
      <td>
        `missingSelfie`
      </td>

      <td>
        **Missing Selfie**
        Provider requires selfie for processing but not provided in session.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Ensure the user provides a selfie in the session.
      </td>
    </tr>

    <tr>
      <td>
        `documentTypeNotSupported`
      </td>

      <td>
        **Document Type Not Supported**
        Invalid document type for validation by the configured provider.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Ensure the user is providing a supported document type.
      </td>
    </tr>

    <tr>
      <td>
        `geographicRegionNotSupported`
      </td>

      <td>
        **Country Not Supported**
        Document country not supported by the configured provider.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Verify the user is providing a supported document and countries are provisioned correctly.
      </td>
    </tr>

    <tr>
      <td>
        `geographicStateRegionNotSupported`
      </td>

      <td>
        **State Not Supported**
        Document state not supported by the configured provider.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Verify the user is providing a supported document and states are provisioned correctly.
      </td>
    </tr>

    <tr>
      <td>
        `connectionError`
      </td>

      <td>
        **Provider Connection Error**
        Error occurred during processing within provider environment.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Try again later; if issue persists, submit a support ticket through [http://support.incode.com/](http://support.incode.com/).
      </td>
    </tr>

    <tr>
      <td>
        `infrastructureError`
      </td>

      <td>
        **Incode Processing Error**
        Error occurred during processing within Incode environment.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Try again later; if issue persists, submit a support ticket through [http://support.incode.com/](http://support.incode.com/).
      </td>
    </tr>

    <tr>
      <td>
        `null`
      </td>

      <td>
        If government validation status is not present, then it means the module was not run.
      </td>

      <td>
        `UNKNOWN`
      </td>

      <td>
        Try again later; if issue persists, submit a support ticket through [http://support.incode.com/](http://support.incode.com/).
      </td>
    </tr>

    <tr>
      <td>
        `userNotFound`
      </td>

      <td>
        **User Not Found**
        ID not found in government database.
      </td>

      <td>
        `FAIL`
      </td>

      <td>
        Check data extraction quality. If user is legitimate, submit a support ticket through [http://support.incode.com/](http://support.incode.com/) for further investigation.
      </td>
    </tr>

    <tr>
      <td>
        `faceComparisonFailed`
      </td>

      <td>
        **Face Match Failed**
        Selfie does not match government database portrait.
      </td>

      <td>
        `FAIL`
      </td>

      <td>
        Check selfie capture quality. If user is legitimate, submit a support ticket through [http://support.incode.com/](http://support.incode.com/) for further investigation.
      </td>
    </tr>
  </tbody>
</Table>

<br />
