# Identity Verify

`POST https://api.agilitycredit.net/v3/prefill/verify`

Docs page: https://apidocs.agilitycredit.com/api/identity-verify · Tag: Prefill

Pure Identity Verify — verifies the identity submitted for a credit application against the prefill. Requires a prior possession session supplied via the `Agc-Session-Id` header (obtained from `POST /prefill/auth`). The engine **Identity Verify** only runs when the submitted identity differs from the prefill (email is not compared) — if everything matches, the prefill is trusted as-is (`changed: false`) and no additional engine call is made. Requires that `POST /prefill/trust-and-identity` has already run on the session. No trust fields are returned — this endpoint performs identity verification only.

Authentication: `Authorization: Bearer <api key>`.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `Idempotency-Key` | header | yes | A unique, idempotent key. We recommend to use a guid |
| `Agc-Tenant-Id` | header | yes | The tenant ID provided by Agility Credit. |
| `Agc-User-Id` | header | yes | The requestor user ID. |
| `Agc-Session-Id` | header | yes | The prefill session identifier returned from Auth Initial (POST /prefill/auth). |

## Request body (`application/json`), required

The identity being submitted for the credit application.

Schema: `ProveVerifyRequest`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `first_name` | string | yes |  |
| `last_name` | string | yes |  |
| `address` | string |  |  |
| `extended_address` | string |  |  |
| `city` | string |  |  |
| `state` | string |  |  |
| `zip` | string |  |  |
| `dob` | string |  |  |
| `ssn` | string |  | Full SSN. Alternatively send `last4_ssn`. |
| `last4_ssn` | string |  | Last four of the SSN, if not sending the full `ssn`. |
| `secret` | string |  | Optional shared secret. When it matches the secret supplied at Auth Initial, the response is signed with an `X-Agc-Signature` header. |

## Responses

| Status | Description | Body |
| --- | --- | --- |
| 200 | Identity verify decision (or a no-change confirmation) | IdentityVerifyResponse |
| 400 | Bad Request | BadRequestResponse |
| 401 | Unauthorized | UnauthorizedResponse |
| 403 | Forbidden | UnauthorizedResponse |
| 409 | Conflict - no prefill on this session. Run POST /prefill/trust-and-identity before verifying. | BadRequestResponse |
| 410 | Gone - the session expired or was not found. Restart with POST /prefill/auth. | BadRequestResponse |
| 429 | Too Many Requests | TooManyRequestsResponse |
| 500 | Internal Server Error | AgilityServerErrorResponse |
Top-level 200 fields: `session_id`, `status`, `verify_passed`, `changed`, `verify_result`, `reason_code_details`, `completed`.

### Error bodies

400:

```json
{
  "status": "Bad Request - Invalid Parameters",
  "error": "Failed schema validation. Error: data.pull_type must be one of ['prequal', 'hard'], Path: ['data', 'pull_type'], Data: prequalification"
}
```

401:

```json
{
  "message": "Unauthorized"
}
```

403:

```json
{
  "message": "Unauthorized"
}
```

409:

```json
{
  "status": "Bad Request - Invalid Parameters",
  "error": "Failed schema validation. Error: data.pull_type must be one of ['prequal', 'hard'], Path: ['data', 'pull_type'], Data: prequalification"
}
```

410:

```json
{
  "status": "Bad Request - Invalid Parameters",
  "error": "Failed schema validation. Error: data.pull_type must be one of ['prequal', 'hard'], Path: ['data', 'pull_type'], Data: prequalification"
}
```

429:

```json
{
  "error": "Too Many Requests"
}
```

500:

```json
{
  "message": "Agility Server Error"
}
```
