How to use Account Verification Service
The Account Verification Service API allows you to check account ownership, confirming whether your customer is the owner of the IBAN they have provided you with.
With the name and IBAN we will confirm whether they match and this user owns the related IBAN or not. This product can be used for both retail and corporate account ownership verification.
Please note this is a universal API using the same endpoint as our KSA Account Verification Service for IBANs.
Using the API
To use the Account Verification Service API you will need to call the endpoint sandbox.leantech.me/verifications/v2/iban
To make a request you will need to provide;
- full customer name (you will need to ask the customer to provide the full name on the account for the IBAN that is being checked)
- customer IBAN
The response will return whether the account is verified with a true or false response to 'iban_ownership_verified'. Where the response is 'true' this means it is a match and the account ownership has been verified. Where the response is 'false' this means it is a no match and the account has not been verified.
Where it is a no match the account is not verified, we will also identify whether there is a partial match between the customer name provided and the name held on the bank account for the IBAN being checked.
Note in the response you will receive the masked account holder name (where the account being verified is with ENBD, EI or Liv the unmasked name will be returned)
Partial matches
Partial matches indicate a high likelihood that the person or company being checked is the owner of the account. For partial matches in the response;
- Where iban_ownership_verified is returned as 'false' we check for partial matches
- Anything over the set threshold will result in a partial match and we will confirm this under the attribute 'matching' along with the score
- The scoring is on a scale from 0-1, with 0 being no match and 1 being the highest similarity between the two names provided
- Anything below the set threshold will result in 'no match' to the 'match' attribute and this can be confirmed that the account is not verified
- Where a partial match is returned you will still receive the masked name in the response which you can then use to either prompt your customer to re-enter the correct details or utilise the score as a degree of confidence they are the account holder and proceed with your customer journey
Corporate accounts
Where a corporate account ownership is being checked, please be aware we will strip out the special characters from the name submitted to check, for example a lot of corporate account names contain 'L.L.C'. When we return the response and it is a match (true) you will always receive the unmasked name back and this can be used to update in your system. Where it returns a no match (false), partial matching will also be applied.
Testing the API in sandbox
You can test the API in our sandbox environment and check the scenarios where account ownership is verified and where ownership is not verified.
Type | Scenario | Request IBAN | Request Name | IBAN Ownership Verified | Match |
---|---|---|---|---|---|
Retail | Account ownership is verified (non-ENBD account) | AE620030012285049920001 | Adam Ahmed | true | n/a |
Retail | Account ownership is not verified (non-ENBD account) | AE620030012285049920001 | Adam Stark | false | no match |
Retail | Account ownership is partially verified (non-ENBD account) | AE620030012285049920001 | Adam something | false | partial |
Retail | Account ownership is verified (ENBD account) | AE420260001015819612801 | Adam Ahmed | true | n/a |
Retail | Account ownership is not verified (ENBD account) | AE420260001015819612801 | Adam something | false | no match |
Retail | Account ownership is partially verified (ENBD account) | AE420260001015819612801 | Adam something | false | partial |
Corporate | Account ownership is verified (non-ENBD account) | AE620030012285049920001 | ABC Limited | true | n/a |
Corporate | Account ownership is not verified (non-ENBD account) | AE620030012285049920001 | ABC something | false | no match |
Corporate | Account ownership is partially verified (non-ENBD account) | AE620030012285049920001 | ABC Limit | false | partial |
Corporate | Account ownership is verified (ENBD account) | AE420260001015819612801 | ABC Limited | true | n/a |
Corporate | Account ownership is not verified (ENBD account) | AE420260001015819612801 | ABC Something | false | partial |
Corporate | Account ownership is partially verified (ENBD account) | AE420260001015819612801 | ABC Limit | false | no match |
Note, for no match cases you can use any name not listed above in sandbox to retrieve a no match response.
Request and responses
Example request
{
"iban": "AE420260001015819612801",
"identifications": [
{
"type": "FULL_NAME",
"value": "Adam Ahmed"
}
],
"type": "PERSONAL"
}
Example response - ownership verified
{
"status": "OK",
"results_id": null,
"message": "Data successfully retrieved",
"timestamp": "2024-07-30T11:06:22.502090861Z",
"meta": null,
"status_detail": null,
"verifications": {
"iban_ownership_verified": true,
"swift_code": "ADCBAEAAXXX",
"bank_name": {
"en": "Abu Dhabi Commercial Bank",
"ar": null
},
"bank_code": "003",
"account_status": null,
"account_holder_name": "Adam Ahme*",
"verification_method": "CONFIRMATION_OF_PAYEE_SERVICE"
}
}
Example response - ownership not verified
{
"status": "OK",
"results_id": null,
"message": "Data successfully retrieved",
"timestamp": "2024-09-11T05:43:38.157026614Z",
"meta": null,
"status_detail": null,
"verifications": {
"iban_ownership_verified": false,
"matching": {
"type": "NO_MATCH",
"score": 0.52
},
"swift_code": "ADCDEDGHXXX",
"bank_name": {
"en": "Abu Dhabi Commercial Bank",
"ar": null
},
"bank_code": "026",
"account_status": null,
"account_holder_name": "MATT*** SMIT*",
"verification_method": "CONFIRMATION_OF_PAYEE_SERVICE"
}
}
Example response - ownership not verified but partial match
{
"status": "OK",
"results_id": null,
"message": "Data successfully retrieved",
"timestamp": "2024-09-11T05:43:38.157026614Z",
"meta": null,
"status_detail": null,
"verifications": {
"iban_ownership_verified": false,
"matching": {
"type": "PARTIAL",
"score": 0.96
},
"swift_code": "ADCDEDGHXXX",
"bank_name": {
"en": "Abu Dhabi Commercial Bank",
"ar": null
},
"bank_code": "026",
"account_status": null,
"account_holder_name": "MATT*** SMIT*",
"verification_method": "CONFIRMATION_OF_PAYEE_SERVICE"
}
}
Errors
Status | Code | Description |
---|---|---|
LEAN_ERROR | 200 | There is a Lean system error. If the error continues contact Lean. |
BANK_ISSUE | 200 | There are connection issues with the bank and the request should be retried. Note this does not determine whether an account can be verified, it means the connecting bank system is currently down. Please try the request again. |
UNSUPPORTED_BY_BANK | 200 | The bank for the account requested is not currently supported for verification. |
DISABLED_BY_LEAN | 200 | We have temporarily disabled this service due to an ongoing issue. If the issues persists, please contact Lean. |
INVALID_IBAN | 400 | The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again. |
INVALID_PARAMETERS | 400 | The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again. |
GIVEN_INPUT_CANNOT_BE_VERIFIED | 200 | The account cannot be verified in this case and should not be retried. This means the customer's IBAN/account status is not Active and we cannot verify the account ownership. In this instance, please do not retry this request. |
Example response - fail
{
"status": "FAILED",
"results_id": null,
"message": "Account cannot be verified in this case. Please do not retry.",
"timestamp": "2024-08-28T08:07:50.237874202Z",
"meta": null,
"status_detail": {
"granular_status_code": "GIVEN_INPUT_CANNOT_BE_VERIFIED",
"status_additional_info": "Account cannot be verified in this case. Please do not retry."
},
"verifications": null
}
Updated about 1 month ago