Account holder verification
To verify an account holder, submit their name, sort code, and account number via a POST request, then check the verification status with a GET request.
When you make a payout, an account holder verification check is performed on the beneficiary. In this process, the beneficiary’s name and account identifiers (sort code and account number) are checked against what is on file at the bank.
Make an account holder verification request
To verify a specific account holder, you need:
- An account holder name
- A sort code and account number, or an IBAN
Make a POST request to the /v3/account-holder-verifications/requests endpoint with this information:
{
"account_holder_name": "John Doe",
"account_identifier": {
"type": "sort_code_account_number",
"sort_code": "123456",
"account_number": "12345678"
}
}
{
"account_holder_name": "John Doe",
"account_identifier": {
"type": "iban",
"iban": "FR7630006000011234567890189"
}
In the API response, you receive an id for the request.
{
"id": "550e8400-e29b-41d4-a716-446655440000"
}
You do not receive any information on the status of the verification check in the response. To find out the result of the check, you need to make a GET request to the same endpoint, using the id you received in the response.
Monitor an account holder verification check
When you make an account holder verification check, it can have one of the following results:
- Account holder verification is complete and the result was
match - Account holder verification is complete and the result was
partial_match, which also includes the account holder name - Account holder verification is complete and the result was
no_match - Account holder verification is complete and the result was
match_not_possible, which also includes a failure reason in plain English - The verification attempt failed.
You can Normally, the verification process takes a few seconds.
GET account holder verification
To see the status of a particular check, you can make a GET request to the /v3/account-holder-verifications/requests/{id} endpoint (where id is the ID of the request that you created earlier).
{
"id": "550e8400-e29b-41d4-a716-446655440003",
"status": "pending"
}
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"match_result": {
"type": "match"
}
}
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"status": "completed",
"match_result": {
"type": "no_match"
}
}
The response will contain:
- the
idof the verification request
You already submitted this in the previous step. - the
statusof the request
This can bepending,completeorfailed. - the
resultof the check, if the check is completed or failed
This can bematch,partial_match,no_matchormatch_not_possible.
If you receive a partial_match result, you also receive the account holder’s name in the response, so you can decide whether to move forward with the payout:
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"status": "completed",
"match_result": {
"type": "partial_match",
"account_holder_name": "Jean D."
}
}
If you receive a match_not_possible or failed response, you also receive a failure reason with information on why verification failed:
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"status": "completed",
"match_result": {
"type": "match_not_possible",
"failure_reason": "Bank unable to match"
}
}
{
"id": "550e8400-e29b-41d4-a716-446655440004",
"status": "failed",
"failure_reason": "provider_error"
}
If you receive a failed webhook or response to a GET request, we recommend retrying the check.
Webhooks
{
"type": "account_holder_verification_completed",
"event_version": 1,
"event_id": "b8d4dda0-ff2c-4d77-a6da-4615e4bad941",
"account_holder_verification_id": "550e8400-e29b-41d4-a716-446655440000",
"match_result": {
"type": "match"
}
}
{
"type": "account_holder_verification_completed",
"event_version": 1,
"event_id": "e2g7ggc3-h25f-74g7-d049-7798h8e77263",
"account_holder_verification_id": "880h1733-h5ce-74h7-e049-7798h8e77263",
"match_result": {
"type": "no_match"
}
}
{
"type": "account_holder_verification_completed",
"event_version": 1,
"event_id": "d1f6ffb2-g14e-63f6-c938-6687g7d66152",
"account_holder_verification_id": "770g0622-g4bd-63g6-d938-6687g7d66152",
"match_result": {
"type": "partial_match",
"account_holder_name": "J Smith"
}
}
{
"type": "account_holder_verification_failed",
"event_version": 1,
"event_id": "c9e5eeb1-f03d-52e5-b827-5576f6c55041",
"account_holder_verification_id": "660f9511-f3ac-52f5-c827-5576f6c55041",
"failure_reason": "provider_error"
}
{
"type": "account_holder_verification_completed",
"event_version": 1,
"event_id": "e2g7ggc3-h25f-74g7-d049-7798h8e77263",
"account_holder_verification_id": "880h1733-h5ce-74h7-e049-7798h8e77263",
"match_result": {
"type": "match_not_possible",
"failure_reason": "Bank unable to match"
}
}
Updated about 2 hours ago
