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.

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.

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

StatusCodeDescription
LEAN_ERROR200There is a Lean system error. If the error continues contact Lean.
BANK_ISSUE200There 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_BANK200The bank for the account requested is not currently supported for verification.
DISABLED_BY_LEAN200We have temporarily disabled this service due to an ongoing issue. If the issues persists, please contact Lean.
INVALID_IBAN400The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again.
INVALID_PARAMETERS400The IBAN entered is invalid. Please amend the IBAN to a valid IBAN and try the request again.
GIVEN_INPUT_CANNOT_BE_VERIFIED200The 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
}