User Verification

Verify that a beneficiary's bank account exists and can receive funds in the destination country before you initiate a cross-border payment.

Sending money to an incorrect or inactive account leads to failed payouts, returned funds, delays and reconciliation effort. The Validate Bank Account API lets you check the beneficiary's account details up front through a single endpoint, across multiple countries. It handles country-specific routing and secure transmission of account data for you.

You can also ask Decentro to retrieve the account holder's name from the bank and compare it with the name you have on record. This returns a name match score you can use in your own risk or onboarding rules.

Key features:

  1. One endpoint, many countries. The same request format works across all supported corridors, using either a domestic account number or an IBAN.
  2. Clear account status. Every validation returns one of four statuses: valid, invalid, blocked or inconclusive.
  3. Optional name match. Set perform_name_match: true to receive the bank-registered account holder name and a name match score from 0 to 100.
  4. Bank details in the response. Where available, the response includes the account currency, account type and bank name.
  5. No money moves. Validation is a non-financial check; it does not debit or credit the beneficiary account.
📗

Pre-requisites

  1. Sign up for an account with Decentro before you start integration.
  2. After sign-up, you will receive API credentials for our Staging/UAT environment and access to our dashboard.
  3. Use these credentials to begin your testing and integration.
  4. Contact your support team to enable Validate Bank Account for your account.

Relevant APIs:

  1. Validate Bank Account

Understanding the account status

account_statusresponse_keyWhat it means
validsuccess_account_validThe account exists and can receive funds (or, for IBAN-only checks, the IBAN structure is correct).
invalidsuccess_account_invalidThe account does not exist, the bank code (BIC/clearing code) is wrong, the IBAN is malformed, or the identification details are invalid.
blockedsuccess_account_blockedThe account exists but is closed, dormant or blocked.
inconclusivesuccess_account_inconclusiveWe could not confirm or deny the account's validity.

Name match

When you set perform_name_match: true:

  1. beneficiary_details.name becomes mandatory.
  2. name_match_score (0–100) is returned only when the bank provides the account holder's name. Otherwise it is null, and the account status is still returned as usual.
  3. For China and South Korea, provider return names in local script. Decentro returns the Latin-script transliteration in account_holder_name and uses it for matching.
  4. Name match is not available for US.
⚠️

Important

A null name_match_score does not mean the name is wrong. It means the bank did not return a usable name for that account or country. Use account_status to decide whether the account is valid.

Country coverage

Pass the value in the Country code column as target_country_code. Codes follow the ISO 3166-1 alpha-2 standard.

⚠️

Important

Use GB for the United Kingdom, not UK. China individual and business accounts both use CN; Decentro tells them apart by the identification you send (a USCC means a business account).

CountryCountry codeAccount fieldBank fieldIdentification required
IndiaINaccount_idclearing_system_id (IFSC)—
United StatesUSaccount_idclearing_system_id (ABA)—
United KingdomGBaccount_id or ibanclearing_system_id (Sort Code)—
AustraliaAUaccount_idclearing_system_id (BSB)—
BrazilBRiban—CPF/CNPJ as registration_id
China (individual)CNaccount_id (62* card)——
China (business)CNaccount_idbicUSCC as registration_id
South KoreaKRaccount_idbic or clearing_system_id—
IndonesiaIDaccount_idbic—
VietnamVNaccount_idbic—
MalaysiaMYaccount_idbic—
NepalNPaccount_idbic—
PakistanPKaccount_id or ibanbic—
BangladeshBDaccount_idbic—
ThailandTHaccount_idbic—
NigeriaNGNUBAN as account_idbic—
UgandaUGaccount_idbic—
South AfricaZAaccount_idbic or clearing_system_id—
Saudi ArabiaSAiban + account_holder_type—NATIONAL_ID (personal) / UNIFIED_NUMBER or COMMERCIAL_REGISTRATION (business)
MexicoMXCLABE as account_id——
PeruPECCI as account_id——
ChileCLaccount_idbic or clearing_system_idRUT as registration_id
ColombiaCOaccount_idbic or clearing_system_idCC/NIT
EcuadorECaccount_idbic or clearing_system_idCC/RUC as registration_id
ArgentinaARCBU as account_id——
UruguayUYaccount_idbic—
BelgiumBEiban—VAT/Company No. as registration_id
FranceFRiban—VAT/SIREN as registration_id
ItalyITiban—VAT as registration_id
NetherlandsNLiban—VAT as registration_id
PolandPLiban—VAT/NIP/REGON as registration_id
Other SEPA countriesCode of the IBAN's country (first two letters of the IBAN)iban——

Country-specific notes

CountryBehaviourWhat to expect
MexicoThe provider confirms the result only after a delay of about 5 minutes.Decentro handles the follow-up for you, so responses for Mexico take longer than for other countries.
United StatesAccount holder name is not available,.Since the provider doesn't return a name, account_holder_name and name_match_score are null. account_status is still returned.
United KingdomThe provider returns the account holder's name only when it partially matches the name you sent.On a partial match, you get account_holder_name and a name_match_score. On a strong or weak match, both are null, so a null score here does not tell you whether the name matched.
China (individual) and South KoreaProvider return the name in local script (Chinese characters or Hangul).Decentro returns the Latin-script translation in account_holder_name and uses it for name matching.
South Africa, Argentina, UruguayThe provider returns a masked name.Name match can't be performed. name_match_score is null.
Saudi ArabiaThe provider returns a masked name.Name match accuracy is limited. account_holder_type (PERSONAL or BUSINESS) is mandatory in the request.
ThailandOnly account existence is checked; ownership is not.Name match can't be performed. name_match_score is null.
BelgiumOnly business accounts can be validated.Requests to validate personal accounts are rejected.

Best practices

  1. Validate before every first payout to a new beneficiary, and again whenever the beneficiary changes their bank details.
  2. Use a unique reference_id (up to 36 characters) for every request so you can reconcile responses with your records.
  3. Treat inconclusive as "not yet known", not as a failure. Retry later rather than rejecting the beneficiary outright.
  4. Set your own name match threshold. The score is an input to your decision; choose a cut-off that fits your risk appetite.