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

# Verification of Payee (VoP)

Verification of Payee (VoP) lets you verify that the name on a customer's external account matches the actual account holder at the receiving bank before sending funds.

## Supported account types

VoP is available for:

| Account type                  | Currency | Identifier |
| ----------------------------- | -------- | ---------- |
| IBAN                          | EUR      | `iban`     |
| UK Sort Code + Account Number | GBP      | `gb`       |

## How it works

1. Create an external account with `account_owner_name` set
2. Call the verify endpoint to trigger a VoP check
3. Poll the external account until the verification completes
4. Read the `account_verification` field on the external account response

***

## Trigger a verification

<Note>
  The verify endpoint does not require an Idempotency-Key header. If a verification is already in progress for the external account, the request will return a `409 Conflict` error.
</Note>

```bash Request theme={null}
curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer-id>/external_accounts/<external-account-id>/verify' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <api-key>'
```

```json Response theme={null}
{
  "account_type": "iban",
  "account_verification": {
    "iban": {
      "match_level": "pending",
      "reason_code": null,
      "validated_account_owner_name": null
    },
    "requested_at": "2026-01-15T12:00:00.000Z",
    "completed_at": null
  }
}
```

***

## Reading the result

Once the verification completes, the `account_verification` object on the external account will be populated with the result:

```json theme={null}
{
  "id": "c8948ce6-26ac-4d37-a336-742f961a76f3",
  "customer_id": "23c2d400-4c69-4c5a-b31a-88d035d7e8ae",
  "currency": "eur",
  "account_type": "iban",
  "account_owner_name": "Ada Lovelace",
  "account_verification": {
    "iban": {
      "match_level": "match",
      "reason_code": null,
      "validated_account_owner_name": "Ada Lovelace"
    },
    "requested_at": "2026-01-15T12:00:00.000Z",
    "completed_at": "2026-01-15T12:00:03.421Z"
  }
}
```

***

## Match levels

| Match level   | Description                                                                                                                                                    |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pending`     | Verification is still in progress.                                                                                                                             |
| `match`       | The account owner name matches the account holder at the receiving bank.                                                                                       |
| `close_match` | The name is a close but not exact match (e.g. minor spelling differences). The `validated_account_owner_name` field will contain the name on file at the bank. |
| `no_match`    | The account owner name does not match the account holder.                                                                                                      |
| `error`       | The verification could not be completed (e.g. the receiving bank does not support VoP).                                                                        |

***

## Response fields

The `account_verification` object contains:

| Field                                                                   | Type                      | Description                                                                       |
| ----------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------- |
| `iban` or `gb`                                                          | object                    | Verification result keyed by account type.                                        |
| `iban.match_level` / `gb.match_level`                                   | string                    | One of `pending`, `match`, `close_match`, `no_match`, `error`.                    |
| `iban.reason_code` / `gb.reason_code`                                   | string \| null            | Additional context from the receiving bank when the result is not a full match.   |
| `iban.validated_account_owner_name` / `gb.validated_account_owner_name` | string \| null            | The name on file at the receiving bank (returned on `close_match` or `no_match`). |
| `requested_at`                                                          | string (ISO 8601)         | When the verification was requested.                                              |
| `completed_at`                                                          | string (ISO 8601) \| null | When the verification completed. Null while pending.                              |

***

## Prerequisites

* The external account must have `account_owner_name` set.
* The external account must be of type `iban` or `gb`.
* No other verification may already be in progress for that external account.

## Error cases

| Status | Condition                                                               |
| ------ | ----------------------------------------------------------------------- |
| `400`  | Account type not supported for VoP, or `account_owner_name` is missing. |
| `409`  | A verification is already in progress for this external account.        |
