> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onboardme.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Trigger Identity Verification and AML Screening

> Learn how to send a KYC identity verification request through OnboardMe, with options for Basic or Extensive AML screening, for clients or new recipients.

OnboardMe lets you trigger identity verification (KYC) for any individual or company. Optionally, you can include AML (anti-money laundering) screening at the same time. This guide walks you through the process.

## Prerequisites

* API credentials with write access (`canWrite: true`)
* Sufficient wallet balance to cover the verification fee

## How it works

When you call `POST /api/v1/id-verifications/send`, OnboardMe:

1. Creates an identity verification request
2. Sends the recipient an email with a link to complete the verification (unless `mute` is `true`)
3. Charges the practice wallet for the verification fee

The response includes the fee breakdown and a direct link to the verification flow.

## Sending a verification

### Verify an existing client

```bash theme={null}
curl -X POST "https://anzapi.onboardme.app/api/v1/id-verifications/send" \
  -H "X-OM-Auth-ID: YOUR_CLIENT_ID" \
  -H "X-OM-Auth-Key: YOUR_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678"
  }'
```

You can override the client's email or mobile for this request only:

```json theme={null}
{
  "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
  "entityEmail": "alternate@client.example"
}
```

### Verify a new recipient (not yet on file)

Omit `entityKey` and supply name and contact details directly:

```json theme={null}
{
  "entityName": "Jordan Lee",
  "entityEmail": "jordan@example.com",
  "entityMobile": "+61 412 000 111"
}
```

## Including AML screening

Set `includeAml` to add AML screening alongside identity verification:

| Value         | Description                                     |
| ------------- | ----------------------------------------------- |
| *(omitted)*   | Identity verification only                      |
| `"Basic"`     | Identity verification + Basic AML screening     |
| `"Extensive"` | Identity verification + Extensive AML screening |

```json theme={null}
{
  "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
  "includeAml": "Basic"
}
```

## Understanding the response

```json theme={null}
{
  "verificationKey": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
  "idVerificationFee": 3.50,
  "amlSubscriptionFallbackReserve": 0.00,
  "totalWalletRequired": 3.50,
  "accessUrl": "https://app.onboardme.app/verify/f1e2d3c4-...",
  "emailSent": true
}
```

* **`verificationKey`** — unique identifier for this verification request
* **`idVerificationFee`** — fee charged for the identity check
* **`amlSubscriptionFallbackReserve`** — additional reserve for AML if not covered by subscription
* **`totalWalletRequired`** — total amount charged to the practice wallet
* **`accessUrl`** — direct link to the verification flow
* **`emailSent`** — `true` if the invitation email was sent successfully

## Sending without an email (mute mode)

Set `mute: true` to create the verification request without sending an email. The `accessUrl` is still returned and can be delivered via your own channel:

```json theme={null}
{
  "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
  "mute": true
}
```

<Note>
  Unlike eForm mute mode, the `accessUrl` in ID verification mute mode is a direct client-facing link — the same one that would have been emailed.
</Note>

## Insufficient wallet balance

If the practice wallet has insufficient funds, the request returns **400 Bad Request** and no charge is made. Ask the practice administrator to top up the wallet before retrying.

## Error reference

| Status | Meaning                                       |
| ------ | --------------------------------------------- |
| 400    | Insufficient wallet balance — no charge made  |
| 401    | Invalid credentials                           |
| 403    | Read-only credentials — write access required |
| 404    | Entity key not found                          |
| 429    | Rate limit exceeded                           |
