---
title: "Validate an account name (CoP/VoP)"
method: POST
path: "/account-name-validation"
tags: ["Counterparties"]
---

# Validate an account name (CoP/VoP)

`POST /account-name-validation`

## Request

- Base URL: `https://b2b.revolut.com/api/1.0`
- URL: `https://b2b.revolut.com/api/1.0/account-name-validation`
- Auth: HTTP bearer

Validate a counterparty's account name against their account details when [adding a counterparty](https://developer.revolut.com/docs/api/business#add-counterparty) or [making a transfer](https://developer.revolut.com/docs/api/business#create-payment) to a new or existing counterparty.

:::warning
The CoP check is **not** a complete fraud-prevention tool, and it does **not** guarantee the person is who they claim to be.
It only confirms that the name and account details your provide match the bank's records.

Even if the counterparty's details match, you should still exercise due caution when transferring funds.
:::

:::note[Availability & Sandbox behaviour]
- This feature is only available to businesses in the [supported regions](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services).
  Additionally, to get access to CoP in the UK, eligible businesses must contact [Revolut API Support](mailto:api-requests@revolut.com).
- In Sandbox, this feature is only available for **testing**.
  While **incomplete or invalid requests** will return production-like error responses, **complete and valid requests** in Sandbox do **not** undergo real validation and will always return `cannot_be_checked`.
:::

The validation relies on different underlying services, depending on the recipient's payment scheme (region and currency).
These factors determine which fields you must provide and what response you get.
- For examples, refer to the request body samples.
- For more information, see the guides: [Validate an account name (CoP/VoP)](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee).

## Request body

- union
  - ValidateAccountNameRequestUK
    - `account_no` string, required: The account number of the counterparty.
    - `sort_code` string, required: The sort code of the counterparty's account.
    - `company_name` string: The name of the business counterparty. **Required** when the account type is business (`individual_name` is not specified).
    - `individual_name` object: The name of the individual counterparty, split into first name and last name. **Required** when the account type is personal (`company_name` isn't specified).
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
  - ValidateAccountNameRequestAU
    - `account_no` string, required: The account number of the counterparty.
    - `bsb` string, required: The BSB (Bank-State-Branch) number for the counterparty's account. Used to identify the bank and branch in Australia.
    - `company_name` string: The name of the business counterparty. **Required** when the account type is business (`individual_name` is not specified).
    - `individual_name` object: The name of the individual counterparty, split into first name and last name. **Required** when the account type is personal (`company_name` isn't specified).
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
  - ValidateAccountNameRequestRO
    - `iban` string, required: The IBAN (International Bank Account Number) for the counterparty's account.
    - `bic` string: The BIC (Bank Identifier Code) for the counterparty's account. Also known as the SWIFT code. This value is optional. It can be provided, for example, when the automatic BIC detection fails and the check is unsuccessful.
    - `recipient_country` string, required: The counterparty's bank country, provided as a 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) code. For RO CoP, the **possible value** is `RO`.
    - `recipient_currency` string, required: The counterparty account’s currency, provided as a 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code. For RO CoP, the **possible value** is `RON`.
    - `company_name` string: The name of the business counterparty. **Required** when the account type is business (`individual_name` is not specified). ⓘ Note that for [RO](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services), the name you provide helps identify the request, but is **not** used for the actual check. The API simply returns the partially masked name associated with the IBAN for you to validate. Therefore, the returned name may differ from the one you provide.
    - `individual_name` object: The name of the individual counterparty, split into first name and last name. **Required** when the account type is personal (`company_name` isn't specified). ⓘ Note that for [RO](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services), the name you provide helps identify the request, but is **not** used for the actual check. The API simply returns the partially masked name associated with the IBAN for you to validate. Therefore, the returned name may differ from the one you provide.
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
  - ValidateAccountNameRequestEUR
    - `iban` string, required: The IBAN (International Bank Account Number) for the counterparty's account.
    - `bic` string: The BIC (Bank Identifier Code) for the counterparty's account. Also known as the SWIFT code. It can be provided, for example, when the automatic BIC detection fails and the check is unsuccessful.
    - `recipient_country` string, required: The counterparty's bank country, provided as a 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) code.
    - `recipient_currency` string, required: The counterparty account’s currency, provided as a 3-letter [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code. For VoP, the **possible value** is `EUR`.
    - `company_name` string: The name of the business counterparty. **Required** when the account type is business (`individual_name` is not specified).
    - `individual_name` object: The name of the individual counterparty, split into first name and last name. **Required** when the account type is personal (`company_name` isn't specified).
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.

## Response `200`

Account name validation result

:::note
- The actual results returned in the response come from the CoP services, not from Revolut.
  The Business API passes them on as received.

  Because of this, the descriptions below should be treated as an approximation rather than complete documentation.
- The responses differ depending on the CoP service, even when the schema appears the same.
  Make sure that you refer to the appropriate response variant.
:::

- union
  - ValidateAccountNameResponseUK
    - `result_code` 'matched' | 'close_match' | 'not_matched' | 'cannot_be_checked' | 'temporarily_unavailable', required: The result of the check. Possible values for UK: | Result code | Description | |-------------------|-------------| | **`matched`** | The name and account type match the provided details. | | **`close_match`** | The name and/or account type are similar to the provided values: <ul><li>The name is a match, but the account type is incorrect. For example, an individual recipient's name was provided under `company_name`. The **actual account type** is returned.</li><li>The name is similar to the provided values. Account type is correct. The **actual name** is returned.</li><li>The name is similar to the provided values, and the account type is incorrect. The **actual values** are returned.</li></ul>The actual values are returned. | | **`not_matched`** | The name and account type don't match the provided values. | | **`cannot_be_checked`** | The check cannot be performed and retries won't help. For example, the recipient's bank doesn't support CoP. | | **`temporarily_unavailable`** | The check cannot be performed right now. For example, the recipient's bank didn't respond to our request. You should retry the request later. |
    - `reason` AccountNameValidationReasonUK: A code which explains why a given result was returned, and the service that returned it. For example, it might happen that the details you provided match the account details, but you specified the counterparty as an individual, and the account type is business.
      - `type` 'uk_cop' | 'eu_cop' | 'ro_cop' | 'au_cop': The reason type. Determines the [service](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code. For UK, the values is: `uk_cop`.
      - `code` 'close_match' | 'individual_account_name_matched' | 'company_account_name_matched' | 'individual_account_close_match' | 'company_account_close_match' | 'not_matched' | 'account_does_not_exist' | 'account_switched' | 'cannot_be_checked': The reason code. Possible values for UK: | Value | Description | | --- | --- | | **`close_match`** | The provided name is similar to the account name, the account type is correct. The actual name is returned. | | **`individual_account_name_matched`** | The names match but the counterparty is an individual, not a business. | | **`company_account_name_matched`** | The names match but the counterparty is a business, not an individual. | | **`individual_account_close_match`** | The provided name is similar to the account name, and the account type is incorrect – the counterparty is an individual, not a business. The actual name is returned. | | **`company_account_close_match`** | The provided name is similar to the account name, and the account type is incorrect - the counterparty is a business, not an individual. The actual name is returned. | | **`not_matched`** | The account details don't match the provided values. | | **`account_does_not_exist`** | The account does not exist. | | **`account_switched`** | The account has been switched using the Current Account Switching Service. Please contact the recipient for updated account details. | | **`cannot_be_checked`** | The account cannot be checked. |
    - `company_name` string: The name of the recipient when the account type is business. Provided only if `individual_name` is not specified. When the name is a close match, the actual full name is returned, otherwise, the name you provided is returned.
    - `individual_name` object: The name of the recipient when the account type is personal. Provided only if `company_name` is not specified. When the name is a close match, the actual first and last names are returned in full.
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
    - `name_validation_id` string, uuid: The unique identifier of a CoP (Confirmation of Payee) check. Pass this as `name_validation_id` on a subsequent [`POST /pay`](https://developer.revolut.com/docs/api/business#create-payment) request to link the check to the payment. This prevents rate-limiting issues in regions like Romania, where CoP queries are limited to 3 per 24 hours without an initiated payment.
  - ValidateAccountNameResponseAU
    - `result_code` 'matched' | 'close_match' | 'not_matched' | 'cannot_be_checked' | 'temporarily_unavailable', required: The result of the check. Possible values for AU: | Result code | Description | |------------------------------------|-------------| | **`matched`** | The name matches the provided details. For personal accounts, this also covers **close matches**, in which case the **actual name** is returned. | | **`close_match` (business account)** | The name is similar to the provided value. | | **`not_matched`** | The name doesn't match the provided values. | | **`cannot_be_checked`** | The check cannot be performed and retries won't help. For example, the recipient's bank doesn't support CoP. | | **`temporarily_unavailable`** | The check cannot be performed right now. For example, the recipient's bank didn't respond to our request. You should retry the request later. |
    - `reason` AccountNameValidationReasonAU: A code which explains why a given result was returned, and the service that returned it. In some cases, it may provide more details about the result.
      - `type` 'uk_cop' | 'eu_cop' | 'ro_cop' | 'au_cop': The reason type. Determines the [service](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code. For AU, the value is: `au_cop`.
      - `code` 'close_match' | 'individual_account_name_matched' | 'company_account_name_matched' | 'individual_account_close_match' | 'company_account_close_match' | 'not_matched' | 'account_does_not_exist' | 'account_switched' | 'cannot_be_checked': The reason code. Possible values for AU: | Value | Description | | --- | --- | | **`close_match`** (business accounts): | The provided name is similar to the account name. The actual name is returned. Mismatched account type is corrected. | | **`not_matched`** | The account details don't match the provided values. | | **`account_does_not_exist`** | The account does not exist. | | **`account_switched`** | The account has been switched using the Current Account Switching Service. Please contact the recipient for updated account details. | | **`cannot_be_checked`** | The account cannot be checked. |
    - `company_name` string: The name of the recipient when the account type is business. Provided only if `individual_name` is not specified. When the name is a close match, the actual full name is returned. Otherwise, the name you provided is returned. :::tip[Mismatched name type is corrected] The mismatched name type in the request is corrected in the response. This means that, for example, if an individual recipient's name was provided under `company_name`, in the response it is returned under `individual_name`. :::
    - `individual_name` object: The name of the recipient when the account type is personal. Provided only if `company_name` is not specified. When the name is a close match, the actual first and last names are returned. Otherwise, the name you provided is returned. :::tip[Mismatched name type is corrected] The mismatched name type in the request is corrected in the response. This means that, for example, if an individual recipient's name was provided under `company_name`, in the response it is returned under `individual_name`. :::
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
    - `name_validation_id` string, uuid: The unique identifier of a CoP (Confirmation of Payee) check. Pass this as `name_validation_id` on a subsequent [`POST /pay`](https://developer.revolut.com/docs/api/business#create-payment) request to link the check to the payment. This prevents rate-limiting issues in regions like Romania, where CoP queries are limited to 3 per 24 hours without an initiated payment.
  - ValidateAccountNameResponseRO
    - `result_code` 'matched' | 'close_match' | 'not_matched' | 'cannot_be_checked' | 'temporarily_unavailable', required: The result of the check. For RO CoP, the API **checks if an account exists for the provided IBAN**. Possible results are: | Result code | Description | |-----------------------------|-------------| | **`matched`** | An account with the provided IBAN was found. When this status is returned, the API also returns a partial name of the account holder. Use this returned name to validate your recipient's details. | | **`cannot_be_checked`** | The check cannot be performed and retries won't help. For example, the recipient's bank doesn't support CoP. | | **`temporarily_unavailable`** | The check cannot be performed right now. For example, the recipient's bank didn't respond to our request. You should retry the request later. |
    - `reason` AccountNameValidationReasonRO: A code which explains why a given result was returned, and the service that returned it.
      - `type` 'uk_cop' | 'eu_cop' | 'ro_cop' | 'au_cop': The reason type. Determines the [service](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code. For RO, the value is: `ro_cop`.
      - `code` 'close_match' | 'individual_account_name_matched' | 'company_account_name_matched' | 'individual_account_close_match' | 'company_account_close_match' | 'not_matched' | 'account_does_not_exist' | 'account_switched' | 'cannot_be_checked': The reason code. Possible values for RO: | Value | Description | | --- | --- | | **`cannot_be_checked`** | The account cannot be checked. |
    - `company_name` string: The **partially masked** name of the recipient when the account type is business. Provided only if `individual_name` is not specified. :::warning[Name considerations] - The name you provide helps identify the request, but is not used for the actual check. The API simply returns the partial name associated with the IBAN for you to validate. Therefore, the **returned name may differ** from the one you provided. - **Mismatched name type is not corrected**. This means that the name type in the response is returned as it was provided in the request. For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`). :::
    - `individual_name` object: The partial name of the recipient when the account type is personal, that is, the first name and the last name's initial. Provided only if `company_name` is not specified. :::warning[Name considerations] - The name you provide helps identify the request, but is not used for the actual check. The API simply returns the partial name associated with the IBAN for you to validate. Therefore, the **returned name may differ** from the one you provided. - **Mismatched name type is not corrected**. This means that the name type in the response is returned as it was provided in the request. For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`). :::
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The initial of the last name of the recipient.
    - `name_validation_id` string, uuid: The unique identifier of a CoP (Confirmation of Payee) check. Pass this as `name_validation_id` on a subsequent [`POST /pay`](https://developer.revolut.com/docs/api/business#create-payment) request to link the check to the payment. This prevents rate-limiting issues in regions like Romania, where CoP queries are limited to 3 per 24 hours without an initiated payment.
  - ValidateAccountNameResponseEUR
    - `result_code` 'matched' | 'close_match' | 'not_matched' | 'cannot_be_checked' | 'temporarily_unavailable', required: The result of the check. Possible values for EUR: | Result code | Description | |-----------------------------|-------------| | **`matched`** | The name matches the provided details. | | **`close_match`** | The recipient's name is similar to the provided value. The **actual name** is returned. | | **`not_matched`** | The name and account type don't match the provided values. The **name provided in the request** is returned. | | **`cannot_be_checked`** | The check cannot be performed and retries won't help. For example, the recipient's bank doesn't support VoP. | | **`temporarily_unavailable`** | The check cannot be performed right now. For example, the recipient's bank didn't respond to our request. You should retry the request later. |
    - `reason` AccountNameValidationReasonEUR: A code which explains why a given result was returned, and the service that returned it. For example, it might happen that the details you provided match the account details, but you specified the counterparty as an individual, and the account type is business.
      - `type` 'uk_cop' | 'eu_cop' | 'ro_cop' | 'au_cop': The reason type. Determines the [service](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code. For EUR, the value is: `eu_cop`.
      - `code` 'close_match' | 'individual_account_name_matched' | 'company_account_name_matched' | 'individual_account_close_match' | 'company_account_close_match' | 'not_matched' | 'account_does_not_exist' | 'account_switched' | 'cannot_be_checked': The reason code. Possible values for EUR: | Value | Description | | --- | --- | | **`close_match`** | The provided name is similar to the account name. The actual name is returned. | | **`not_matched`** | The account details don't match the provided values. | | **`account_does_not_exist`** | The account does not exist. | | **`account_switched`** | The account has been switched using the Current Account Switching Service. Please contact the recipient for updated account details. | | **`cannot_be_checked`** | The account cannot be checked. |
    - `company_name` string: The name of the recipient when the account type is business. Provided only if `individual_name` is not specified. When the name is a close match, the actual name is returned. Otherwise, the name you provided is returned. :::warning[Mismatched name type is not corrected] The name type in the response is returned as it was provided in the request. For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`). :::
    - `individual_name` object: The name of the recipient when the account type is personal. Provided only if `company_name` is not specified. When the name is a close match, the actual name is returned. Otherwise, the name you provided is returned. :::warning[Mismatched name type is not corrected] The name type in the response is returned as it was provided in the request. For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`). :::
      - `first_name` string, required: The first name of the recipient.
      - `last_name` string, required: The last name of the recipient.
    - `name_validation_id` string, uuid: The unique identifier of a CoP (Confirmation of Payee) check. Pass this as `name_validation_id` on a subsequent [`POST /pay`](https://developer.revolut.com/docs/api/business#create-payment) request to link the check to the payment. This prevents rate-limiting issues in regions like Romania, where CoP queries are limited to 3 per 24 hours without an initiated payment.

## Other responses

- `400`: Bad request Returned, for example, when the data you provided is invalid or required data is missing.
- `401`: Unauthorized Returned, for example, when the credentials you used to make the request are invalid. For more information, see the **Authorization** section.
- `404`: Not found Returned, for example, when your account does not have access to CoP.
- `429`: Too many requests Returned when you've exceeded the rate limit for CoP checks. In Romania, for example, making more than 3 CoP queries without initiating a payment within a 24-hour period will temporarily restrict access to the service for 24 hours.
- `default`: Unexpected error

---

[API](https://skmtc.dev/revolut/apis/business-api.md) - [All operations](https://skmtc.dev/revolut/apis/business-api/llms.txt) - [OpenAPI document](https://skmtc.dev/revolut/apis/business-api/revisions/be089d9fa8b4?raw)
