# Individual Document Verification

Individual Document Verification lets you verify the identity documents stored against an Entity in BNDRY. BNDRY checks the structured document data — document number, expiry date, issuing authority, and other typed fields — against authoritative government sources, returning a result you can use to drive compliance decisions.

## What You Can Do

- Verify government-issued identity documents stored against an individual Entity
- Trigger verification programmatically via the API or automatically through Policies
- Track verification results as Activity Logs on the Entity profile
- Verify Passports, Driver's Licences, Birth Certificates, Medicare Cards (AU), and Visas


## How It Works

The job checks the structured fields of a stored [Document](/docs/core-concepts/documents) against authoritative records. The process is asynchronous — you create a job, run it, then poll for the result.

1. **Store a Document** against the Entity with the relevant identity fields (e.g., document number, date of birth, expiry date).
2. **Create an ID Verification Job** — a named, reusable job configuration.
3. **Run the job**, specifying the Entity and the document type to verify.
4. **Poll for the result** using the operation ID returned from the run.


## Prerequisites

Before running an ID Verification job:

- The Entity must exist in BNDRY as an individual entity.
- The Entity must have a Document of the relevant type stored against it, with all required fields populated.


Storing Documents first
Documents can be created via the BNDRY UI or [Documents API](/docs/core-concepts/documents). The `idType` you supply when running a verification job must match a Document type stored against the entity — for example, if you pass `PASSPORT`, the entity must have a Passport Document with all required fields.

## Using the API

Why 'Job' in the API?
You'll notice we use "verification" when describing the product capability, but "job" appears in API resource names like `IndividualEntityIDVerificationJob`. This follows Google's API design standards for long-running operations ([AIP-152](https://google.aip.dev/152)), ensuring reliable and predictable behaviour for asynchronous workflows.

### Step 1: Create an ID Verification Job

Create a job by `POST`ing to `/v1alpha/individualEntityIDVerificationJobs`. You must supply a unique `individualEntityIdVerificationJobId` — this becomes the final component of the job's resource name and must be 4–63 lowercase alphanumeric characters or hyphens.

BNDRY returns the created job resource:


```json
{
  "name": "individualEntityIDVerificationJobs/id-verification-job-001",
  "createTime": "2024-01-27T10:00:00Z",
  "updateTime": "2024-01-27T10:00:00Z"
}
```

### Step 2: Run the Job

Run the job with a `POST` to `/v1alpha/individualEntityIDVerificationJobs/{job}:run`, specifying the entity to verify and the document type to check. The `idType` must match a Document type stored against the entity.

What if multiple documents exist for the specified type?
The most recently updated document of the specified type will be used for the verification.

BNDRY returns a reference to the long-running operation. The job runs asynchronously, so `done` will initially be `false`.


```json
{
  "name": "individualEntityIDVerificationJobs/id-verification-job-001/operations/4f61bfab-def3-426f-9c1f-77032c8eb551",
  "metadata": {
    "@type": "type.googleapis.com/bndry.api.risk.entities.v1alpha.RunIndividualEntityIDVerificationJobMetadata"
  },
  "done": false
}
```

### Step 3: Poll for the Result

Use the operation name returned in Step 2 to poll for the verification result. When verification is complete, `done` is `true`.


```json
{
  "name": "individualEntityIDVerificationJobs/id-verification-job-001/operations/4f61bfab-def3-426f-9c1f-77032c8eb551",
  "metadata": {
    "@type": "type.googleapis.com/bndry.api.risk.entities.v1alpha.RunIndividualEntityIDVerificationJobMetadata"
  },
  "done": true
}
```

## Managing Jobs

### Retrieve a Job

Retrieve the details of an existing job by its resource name.

### List Jobs

List all ID Verification jobs. Results are paginated — use `pageSize` (max 100) and `pageToken` to page through results.

## API Reference

| Operation | Endpoint |
|  --- | --- |
| [Create an ID Verification Job](/apis/openapi/individual-id-document-verification/individualentityidverificationjobservice_createindividualentityidverificationjob) | `POST /v1alpha/individualEntityIDVerificationJobs` |
| [Run an ID Verification Job](/apis/openapi/individual-id-document-verification/individualentityidverificationjobservice_runindividualentityidverificationjob) | `POST /v1alpha/individualEntityIDVerificationJobs/{job}:run` |
| [Get Operation](/apis/openapi/individual-id-document-verification/individualentityidverificationjobservice_getoperation) | `GET /v1alpha/individualEntityIDVerificationJobs/{job}/operations/{operation}` |
| [Retrieve a Job](/apis/openapi/individual-id-document-verification/individualentityidverificationjobservice_getindividualentityidverificationjob) | `GET /v1alpha/individualEntityIDVerificationJobs/{job}` |
| [List Jobs](/apis/openapi/individual-id-document-verification/individualentityidverificationjobservice_listindividualentityidverificationjobs) | `GET /v1alpha/individualEntityIDVerificationJobs` |