How to use Account Verification

Leans Account Verification confirms whether a customer owns the IBAN they have provided. By comparing the customer’s name to the account holder name 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

Whether using the API or the Lean Platform, the Account Verification product returns one of three responses:

  • Match
  • No match
  • Partial match

Match

A match means the IBAN ownership has been successfully verified. In API responses this is returned as "iban_ownership_verified": true

A no match

A no match response means that the IBAN ownership could not be verified. 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

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, 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.

Using the Lean Platform to verify accounts

To verify account ownership via the Lean Platform:

  1. Log in at https://dev.leantech.me/auth/signin
  2. Navigate to ‘Account Verification’ in the left-hand menu
  3. 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;

  • 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.

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.

TypeScenarioRequest IBANRequest NameIBAN Ownership VerifiedMatch
RetailAccount ownership is verified (non-ENBD account)AE620030012285049920001Adam Ahmedtruen/a
RetailAccount ownership is not verified (non-ENBD account)AE620030012285049920001Adam Starkfalseno match
RetailAccount ownership is partially verified (non-ENBD account)AE620030012285049920001Adam somethingfalsepartial
RetailAccount ownership is verified (ENBD account)AE420260001015819612801Adam Ahmedtruen/a
RetailAccount ownership is not verified (ENBD account)AE420260001015819612801Adam somethingfalseno match
RetailAccount ownership is partially verified (ENBD account)AE420260001015819612801Adam somethingfalsepartial
CorporateAccount ownership is verified (non-ENBD account)AE620030012285049920001ABC Limitedtruen/a
CorporateAccount ownership is not verified (non-ENBD account)AE620030012285049920001ABC somethingfalseno match
CorporateAccount ownership is partially verified (non-ENBD account)AE620030012285049920001ABC Limitfalsepartial
CorporateAccount ownership is verified (ENBD account)AE420260001015819612801ABC Limitedtruen/a
CorporateAccount ownership is not verified (ENBD account)AE420260001015819612801ABC Somethingfalsepartial
CorporateAccount ownership is partially verified (ENBD account)AE420260001015819612801ABC Limitfalseno match

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

CodeStatusDescription
200LEAN_ERRORThere is a Lean system error. If the error continues contact Lean.
200BANK_ISSUEThere 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.
200UNSUPPORTED_BY_BANKThe bank for the account requested is not currently supported for verification.
200DISABLED_BY_LEANWe have temporarily disabled this service due to an ongoing issue. If the issues persists, please contact Lean.
400INVALID_IBANThe IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again.
400INVALID_PARAMETERSThe IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again.
200GIVEN_INPUT_CANNOT_BE_VERIFIEDThe 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
}