# DMV Data Match Technical Details

DMV Data Match is Incode’s data verification service through AAMVA or through validation of Verifiable Credentials. During verification, the supported document data fields are validated against the data on the record held by the issuing state’s DMV.

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

***

## Decisioning

When a connection is made and the provided Document Number matches to a record within the state DMV system, the supported data fields collected from the session are sent to the DMV Data Match provider for verification. Below are all data fields that could be available for matching. Not all participating states support all 5.

- `"firstName"`
- `"paternalLastName"`
- `"birthDate"`
- `"issueDate"`
- `"expirationDate"`

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

- **OK**: Data Match is successful

- **FAIL**: Data Match is unsuccessful

<Accordion title="Scoring">
  The default AAMVA DLDV score is 100, with each data field that returns `FAIL` status causing a 15 point score deduction. The total module score is computed after all data field matches are complete. This calculation determines whether the overall module passed or failed:

  - **OK**: 2 or fewer fields failed, or a module score of 70 or greater
  - **FAIL**: More than 2 fields failed, or a module score of less than 70
</Accordion>

***

## Standalone API

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

### Request Body

```json
{
    "idNumber": "D12345678",
    "firstName": "JOHNTEST",
    "paternalLastName": "DOETEST",
    "birthDate": "03-16-1990",
    "issueDate": "01-15-2020",
    "expirationDate": "01-15-2028",
    "issuerState": "TX"
}
```

### Response Body

```json
{
    "valid": true,
    "statusCode": 0,
    "governmentValidation": {
        "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"
            },
            {
                "value": "true",
                "status": "OK",
                "key": "issueDate"
            },
            {
                "value": "true",
                "status": "OK",
                "key": "expirationDate"
            }
        ],
        "ocrValidationOverall": {
            "value": "100.0",
            "status": "OK"
        },
        "overall": {
            "value": "100.0",
            "status": "OK"
        },
        "provider": "DMV DATA MATCH"
    }
}
```

### Response Details

The response for DMV Data 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.     |
| `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

This object contains the following fields:

<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: Data did not match during validation.
        - UNKNOWN: DMV Data 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>
  <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**
        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>
        `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>
  </tbody>
</Table>

<br />
