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:
- One endpoint, many countries. The same request format works across all supported corridors, using either a domestic account number or an IBAN.
- Clear account status. Every validation returns one of four statuses: valid, invalid, blocked or inconclusive.
- 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.
- Bank details in the response. Where available, the response includes the account currency, account type and bank name.
- No money moves. Validation is a non-financial check; it does not debit or credit the beneficiary account.
Pre-requisites
- Sign up for an account with Decentro before you start integration.
- After sign-up, you will receive API credentials for our Staging/UAT environment and access to our dashboard.
- Use these credentials to begin your testing and integration.
- Contact your support team to enable Validate Bank Account for your account.
Relevant APIs:
Understanding the account status
| account_status | response_key | What it means |
|---|---|---|
| valid | success_account_valid | The account exists and can receive funds (or, for IBAN-only checks, the IBAN structure is correct). |
| invalid | success_account_invalid | The account does not exist, the bank code (BIC/clearing code) is wrong, the IBAN is malformed, or the identification details are invalid. |
| blocked | success_account_blocked | The account exists but is closed, dormant or blocked. |
| inconclusive | success_account_inconclusive | We could not confirm or deny the account's validity. |
Name match
When you set perform_name_match: true:
- beneficiary_details.name becomes mandatory.
- 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.
- 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.
- Name match is not available for US.
ImportantA
nullname_match_scoredoes not mean the name is wrong. It means the bank did not return a usable name for that account or country. Useaccount_statusto 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.
ImportantUse
GBfor the United Kingdom, notUK. China individual and business accounts both useCN; Decentro tells them apart by the identification you send (a USCC means a business account).
| Country | Country code | Account field | Bank field | Identification required |
|---|---|---|---|---|
| India | IN | account_id | clearing_system_id (IFSC) | — |
| United States | US | account_id | clearing_system_id (ABA) | — |
| United Kingdom | GB | account_id or iban | clearing_system_id (Sort Code) | — |
| Australia | AU | account_id | clearing_system_id (BSB) | — |
| Brazil | BR | iban | — | CPF/CNPJ as registration_id |
| China (individual) | CN | account_id (62* card) | — | — |
| China (business) | CN | account_id | bic | USCC as registration_id |
| South Korea | KR | account_id | bic or clearing_system_id | — |
| Indonesia | ID | account_id | bic | — |
| Vietnam | VN | account_id | bic | — |
| Malaysia | MY | account_id | bic | — |
| Nepal | NP | account_id | bic | — |
| Pakistan | PK | account_id or iban | bic | — |
| Bangladesh | BD | account_id | bic | — |
| Thailand | TH | account_id | bic | — |
| Nigeria | NG | NUBAN as account_id | bic | — |
| Uganda | UG | account_id | bic | — |
| South Africa | ZA | account_id | bic or clearing_system_id | — |
| Saudi Arabia | SA | iban + account_holder_type | — | NATIONAL_ID (personal) / UNIFIED_NUMBER or COMMERCIAL_REGISTRATION (business) |
| Mexico | MX | CLABE as account_id | — | — |
| Peru | PE | CCI as account_id | — | — |
| Chile | CL | account_id | bic or clearing_system_id | RUT as registration_id |
| Colombia | CO | account_id | bic or clearing_system_id | CC/NIT |
| Ecuador | EC | account_id | bic or clearing_system_id | CC/RUC as registration_id |
| Argentina | AR | CBU as account_id | — | — |
| Uruguay | UY | account_id | bic | — |
| Belgium | BE | iban | — | VAT/Company No. as registration_id |
| France | FR | iban | — | VAT/SIREN as registration_id |
| Italy | IT | iban | — | VAT as registration_id |
| Netherlands | NL | iban | — | VAT as registration_id |
| Poland | PL | iban | — | VAT/NIP/REGON as registration_id |
| Other SEPA countries | Code of the IBAN's country (first two letters of the IBAN) | iban | — | — |
Country-specific notes
| Country | Behaviour | What to expect |
|---|---|---|
| Mexico | The 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 States | Account 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 Kingdom | The 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 Korea | Provider 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, Uruguay | The provider returns a masked name. | Name match can't be performed. name_match_score is null. |
| Saudi Arabia | The provider returns a masked name. | Name match accuracy is limited. account_holder_type (PERSONAL or BUSINESS) is mandatory in the request. |
| Thailand | Only account existence is checked; ownership is not. | Name match can't be performed. name_match_score is null. |
| Belgium | Only business accounts can be validated. | Requests to validate personal accounts are rejected. |
Best practices
- Validate before every first payout to a new beneficiary, and again whenever the beneficiary changes their bank details.
- Use a unique reference_id (up to 36 characters) for every request so you can reconcile responses with your records.
- Treat inconclusive as "not yet known", not as a failure. Retry later rather than rejecting the beneficiary outright.
- Set your own name match threshold. The score is an input to your decision; choose a cut-off that fits your risk appetite.
