External account verification

Use Numeral to verify external accounts, maximise success rate, and reduce fraud

With Numeral, companies can verify their external accounts prior to sending or collecting payments. Verifying external accounts is key to maximising payment success rate and reducing fraud.

Verifications include:

  • Account number structure
  • Bank code
  • Account holder, based on name and / or company registration number
  • Account status

This feature is available in the dashboard and through the API.

Verifications

VerificationDescription
Account number structure
valid_account_number
Numeral verifies the account number structure, including:
  • Check digits
  • Length, depending on country
  • Authorised characters
Bank code
matching_account_number_and_bank_code
Numeral verifies that the bank code matches the account number. In case it does not match, the correct bank code is returned
Account holder
matching_account_holder
For supported banks, Numeral retrieves the account holder from the bank holding the account and compares it your data.
Account status
active_account
For supported banks, Numeral retrieves the account status from the bank holding the account.

Use the feature

Verify an external account in the dashboard

To verify an external account in the dashboard, create an external account or go to an existing external account and click on Verify account under the Actions menu.

Verify an external account with the API

To verify an external account with the API, use the Verify external account endpoint.

The process is asynchronous, meaning the response indicates pending_verification with all verifications set to null.

Numeral then gathers results from the different sources. This process can take up to 30 seconds.

Once all results are available, a verified event is sent, with all verifications' results. Alternatively, you can retrieve the external_account to get all verifications' results.

curl --request POST \
     --url https://sandbox.numeral.io/v1/external_accounts/39446492-3d63-4a3c-8f96-a8ed8be91c0c/verify \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --header 'X-API-Key: Your_API_Key'
{
  "id": "39446492-3d63-4a3c-8f96-a8ed8be91c0c",
  "object": "external_account",
  "type": "legal_entity",
  "status": "approved",
  "status_details": "",
  "name": "Acme Corp. settling account",
  "holder_name": "Acme Corp.",
  "holder_address": {
    "country": "",
    "line_1": "",
    "line_2": "",
    "building_number": "",
    "street_name": "",
    "postal_code": "",
    "region_state": "",
    "city": ""
  },
  "account_number": "FR1212739000506541967515Q48",
  "bank_code": "SOMEBIC0XXX",
  "counterparty_id": null,
  "company_registration_number": "123456789",
  "company_registration_number_type": "fr_siren",
  "metadata": {},
  "custom_fields": {},
  "account_verification": {
    "result": "pending_verification",
    "valid_account_number": null,
    "matching_account_number_and_bank_code": null,
    "matching_account_holder": null,
    "active_account": null,
    "created_at": null
  },
  "created_at": "2024-05-22T12:34:34.721347Z",
  "disabled_at": null
}
{
  "id": "39446492-3d63-4a3c-8f96-a8ed8be91c0c",
  "object": "external_account",
  "type": "legal_entity",
  "status": "approved",
  "status_details": "",
  "name": "Acme Corp. settling account",
  "holder_name": "Acme Corp.",
  "holder_address": {
    "country": "",
    "line_1": "",
    "line_2": "",
    "building_number": "",
    "street_name": "",
    "postal_code": "",
    "region_state": "",
    "city": ""
  },
  "account_number": "FR1212739000506541967515Q48",
  "bank_code": "SOMEBIC0XXX",
  "counterparty_id": null,
  "company_registration_number": "123456789",
  "company_registration_number_type": "fr_siren",
  "metadata": {},
  "custom_fields": {},
  "account_verification": {
    "result": "valid",
    "valid_account_number": {
      "result": "valid",
      "details": {
        "reason": "",
        "expected_value": "",
        "message": ""
      }
    },
    "matching_account_number_and_bank_code": {
      "result": "valid",
      "details": {
        "reason": "",
        "expected_value": "",
        "message": ""
      }
    },
    "matching_account_holder": {
      "result": "valid",
      "details": {
        "reason": "",
        "expected_value": "",
        "message": ""
      }
    },
    "active_account": {
      "result": "valid",
      "details": {
        "reason": "",
        "expected_value": "",
        "message": ""
      }
    },
    "created_at": "2024-05-22T12:35:01.892244399Z"
  },
  "created_at": "2024-05-22T12:34:34.721347Z",
  "disabled_at": null
},

Test cases for sandbox

You will find here all test cases supported in our sandbox environment.

Coverage

VerificationCountries supported
Account number structureEurope
Bank codeEurope
Account holder
  • France
  • Netherlands
  • More countries to come
You will find here the list of banks covered.
Account status
  • France
  • Netherlands
  • More countries to come
You will find here the list of banks covered.

Data providers

Numeral supports a number of data providers to verify accounts:

  • IBAN.com
  • SurePay
  • SEPA Mail Diamond
  • Swift (planned)