How to use Account Verification
Lean's Account Verification products help businesses confirm bank account ownership, reducing fraud, streamlining onboarding, and meeting compliance requirements with a single API call.
The service checks if a customer owns the IBAN they’ve provided by matching identifiers like a National ID, CR number, or name to the official account holder information associated with that IBAN.
Lean supports ownership verification for retail, business, and freelancer accounts, making it a versatile solution across financial use cases.
We offer two methods for verifying account ownership;
-
Bank Connection (Open Banking):
Use the Verify Connected Account endpoint to confirm that a customer owns a bank account they've connected through Lean. This is ideal when you already have an open banking session.
-
Direct IBAN Verification (Account Verification API):
Pass a customer’s IBAN and identifier directly to Lean’s API to validate ownership without requiring a connected open banking session. This removes the need for manual IBAN certificate uploads, reducing customer friction and simplifying your user journey.
This is a universal API using the same endpoint as ourUAE Account Verification for IBANs.
Account Verification via Bank Connection
When a user has connected their account via Lean, you can confirm ownership using the Verify Connected Account endpoint. An Entity must have been created, with the accounts, identity and identities permissions.
You’ll provide:
- The Entity ID (from the bank connection)
- A customer identifier (e.g., National ID, CR number, Freelancer number)
You can also retrieve all IBANs associated with the Entity ID letting you verify ownership without requiring the user to input their IBAN manually.
Best for: Customers who have connected via Lean Open Banking
To test in sandbox you will need the following identifications input and an entity ID.
Entity ID
An entity_id for an entity you have created with a mockbank with the permissions accounts
,identity
and identities
.
Identifications
Scenario | Identifications | Account Verification |
---|---|---|
Personal | National ID: 1106972886 | True |
Personal | National ID: 1134933866 | False |
Business | Commercial Registration Number: 1010093978 and Unified National Number: any value that starts with 7 and is 10 digits | True |
Business | Commercial Registration Number: 1010096678 and Unified National Number: any value that starts with 7 and is 10 digits | False |
Note, any other combination of valid identifications parameters will still give a list of IBANs but they will be marked as 'false', a no match.
IBAN Verification via Account Verification API
Use the Account Verification API to check ownership without needing a bank connection. This is a standalone API which can be plugged into multiple points or systems in your customer journey to check account ownership when onboarding, before disbursing funds or enabling a customer to withdraw funds.
You’ll provide:
- The customer’s IBAN
- A customer identifier (e.g., National ID, CR number, name)
Lean will return whether the IBAN belongs to your customer; 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.
Best for: Lightweight ownership checks where no open banking session is required (e.g., for claim disbursements or customer fund withdrawals to a different bank account).
Account Verification +
Account Verification + is an enhanced version of our Account Verification product. In addition to confirming ownership of an account, it also retrieves the beneficiary name associated with the provided IBAN.
This allows you to improve customer experience and operations by reducing errors and prevent misrouted or rejected payments.
Lean Platform (no code)
You can also use the Lean Platform, a no-code dashboard to complete Account Verification checks;
- 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 identifier 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.
Best for: compliance teams or operations managers who need fast verification without developer involvement.
To test the API you can use the below mocked data and responses;
Scenario | Identifications Type | IBAN | Identifications | Ownership verified |
---|---|---|---|---|
Personal | National ID | SA2810000011100000461309 | National ID 1106972886 | True |
Business | Commercial Registration and Unified Number | SA2810000011100000461309 | Commercial Registration Number: 1010093978 Unified National Number: 7112233445 | True |
Freelancer | National ID and Freelancer Number | SA2810000011100000461309 | National ID: any valid Saudi national ID or Iqama and Freelancer Number: FL-67846766 | True |
Personal, Business and Freelancer | ID types as above per Personal, Business or Freelancer | Any other IBAN (not listed above) | ID numbers as above per Personal, Business or Freelancer | False |
Personal, Business and Freelancer | Full name | Any other valid IBAN (not listed below) | Adam Ahmed | True |
Personal, Business and Freelancer | Full name | SA3076747147122249133391 | Adam Ahmed | N/A - Closed account |
Personal, Business and Freelancer | Full name | SA4420000001234567891234 | Adam Ahmed | N/A - Blocked account |
Personal, Business and Freelancer | Full name | SA4576615857476891197381 | Adam Ahmed | N/A - In liquidation account |
For business account verification, the API supports verification using either the Commercial Registration (CR) number, the Unified National Number (UNN), or both.
Best practice: Provide both CR and UNN where available.
This increases the likelihood of a successful match, since different banks may store either identifier and we can't guarantee which one will be available for the IBAN.
If only one identifier is provided and no match is found, the account may still be valid under the other identifier.
Example request and response
curl --request POST \
--url https://sandbox.sa.leantech.me/verifications/v2/iban \
--header 'accept: */*' \
--header 'content-type: application/json' \
--data '
{
"type": "PERSONAL",
"iban": "SA2810000011100000461309",
"identifications": [
{
"type": "NATIONAL_ID",
"value": "1106972886"
}
]
}
'
{
"status": "OK",
"results_id": "e894ede4-dd81-41fb-b52d-fb4fec16c16c",
"message": "Data successfully retrieved",
"timestamp": "2025-05-19T12:09:54.672818827Z",
"meta": null,
"status_detail": null,
"verifications": {
"iban_ownership_verified": true,
"swift_code": "ALBISARI",
"bank_name": {
"en": "AlBilad Bank",
"ar": "بنك البلاد"
},
"bank_code": "١٥",
"account_status": "ACTIVE",
"account_holder_name": "NA****AL**** IN****RM****IO**** SY****E****"
"verification_method": "SARIE"
}
}
Error handling
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 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. |
Updated about 1 month ago