How to use Account Verification
Leans Account Verification confirms whether a customer owns the IBAN they have provided. This API supports both comparing a customer’s name or ID (Emirates ID or Trade Licence number) to the account holder details associated with the IBAN, this service determines if they match.
This product supports both retail and corporate account ownership verification.
You can access this service in two ways:
- Via the Lean Platform, or
- By integrating with the Verify IBAN Ownership API
Note: This is a universal API that uses the same endpoint as our KSA Account Verification Service.
Account Verification results
When using ID (i.e. National ID or Trade License number) as the identifier, the Account Verification product returns a binary response: either match or no match - this outcome is based on an exact match requirement.
When using name as the identifier, the Account Verification product can return one of three possible responses:
Match: The name on the account exactly matches the provided name and the IBAN ownership has been successfully verified. In API responses this is returned as "iban_ownership_verified": true
No match: The name does not match the account holder’s name. A no match is determined when the similarity score between the provided name and the IBAN owner's name is below 0.7. In API responses this is returned as "iban_ownership_verified": false
Partial match: The name is similar but not an exact match. Partial matches indicate a high likelihood of ownership. Where "iban_ownership_verified" is returned as 'false' we check for partial matches;
- If the similarity score is equal to or above the threshold (0.7), it is considered a partial match
- 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 threshold will result in 'no match' to the 'match' attribute and this can be confirmed that the account is not verified
- The API response will return "matching: partial" along with the match score
- 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 using name as the identifier, 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.
Using the Lean Platform to verify accounts
To verify account ownership via the Lean Platform:
- Log in at https://dev.leantech.me/auth/signin
- Navigate to ‘Account Verification’ in the left-hand menu
- Choose one of the two available options:
- Single verification:
Enter your customer's name and IBAN, then click ‘Verify Details’ to perform a real-time check. - Bulk verification:
Upload a CSV file containing multiple customer records for batch verification.
Bulk Verification Guidelines
- Download the sample CSV file from the platform to ensure correct headers and formatting.
- You can upload up to 5 files at a time, with a maximum of 1,000 rows per file.
- Once processing is complete, you’ll receive an email notification.
- Results can be viewed and downloaded from the ‘History’ table within the platform.
Using the API to verify accounts
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;
- the identifier (full name, EID or Trade Licence number)
- 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.
Testing Account Verification in sandbox
You can test our Account Verification in our sandbox environment either on the API or within the Lean Platform using the below test scenarios.
Type | Scenario | Request IBAN | Request Name | Request EID or Trade Licence | IBAN Ownership Verified | Match |
---|---|---|---|---|---|---|
Retail | Account ownership is verified | AE620030012285049920001 | Adam Ahmed | 784196710121542 (784-1967-1012154-2) | true | n/a |
Retail | Account ownership is not verified | AE620030012285049920001 | Adam Stark | 784196510121531 | false | no match |
Retail | Account ownership is partially verified | AE620030012285049920001 | Adam Something | n/a | false | partial |
Business | Account ownership is verified | AE620030012285049920001 | ABC Limited | CL4206 or TL000004778 | true | n/a |
Business | Account ownership is not verified | AE620030012285049920001 | ABC Something | CL4555 or TL000003228 | false | no match |
Business | Account ownership is partially verified | AE620030012285049920001 | ABC Limit | n/a | false | partial |
Note, for no match cases you can use any name not listed above in sandbox to retrieve a no match response.
API request and response examples
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
Code | Status | Description |
---|---|---|
200 | LEAN_ERROR | There is a Lean system error. If the error continues contact Lean. |
200 | BANK_ISSUE | 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. |
200 | UNSUPPORTED_BY_BANK | The bank for the account requested is not currently supported for verification. |
200 | DISABLED_BY_LEAN | We have temporarily disabled this service due to an ongoing issue. If the issues persists, please contact Lean. |
400 | INVALID_IBAN | The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again. |
400 | INVALID_PARAMETERS | The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again. |
200 | GIVEN_INPUT_CANNOT_BE_VERIFIED | The account cannot be verified and in this case and should not be retried. This may mean the customer's IBAN/account status is not Active or the account has not been registered correctly on to the service 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 7 days ago