Know Your Payee

Verify an IBAN against an intended individual or business using the IDWise Know Your Payee workflow.

IBAN Verification confirms that a bank account belongs to the person or business your customer claims it does — before you register a beneficiary, release a payout, or settle a withdrawal. IDWise matches the payee details you provide (name, or a government/business identifier in supported markets) against the details registered on the account at the bank, and returns a clear ownership verdict in seconds.

Use IBAN Verification to:

  • Stop misdirected and failed payouts — catch typos and wrong accounts before money moves.
  • Prevent payee fraud — detect authorized push payment (APP) scams and mule accounts by confirming the account holder is who the payer expects.
  • Strengthen KYC/KYB and payout compliance — add a documented ownership check to beneficiary registration and withdrawal flows.
  • Reduce operational cost — fewer recalls, investigations, and support tickets from bounced transfers.

How It Works

You submit the account identifier (IBAN or local account number), the account type (personal or business), and one or more identifications for the expected account holder. IDWise checks the account directly against banking networks and verified data sources in the account's country, then returns an ownership verdict.

Name-based matching

When you provide the account holder's name, IDWise compares it against the name registered on the account and returns one of three outcomes:

OutcomeMeaning
matchThe provided name matches the registered account holder. account_ownership_verified is true.
partial_matchThe names are similar but not identical (similarity score ≥ 0.7) — a strong indication of ownership with minor differences such as abbreviations, middle names, or transliteration variants. account_ownership_verified is false; review the match_score and the returned holder name to decide.
no_matchThe similarity score is below 0.7. The account does not appear to belong to the named payee. account_ownership_verified is false.

The match score is on a 0–100 scale, where 100 is an exact match. The partial-match threshold is 70.

ID-based matching (UAE and Saudi Arabia)

In the UAE and KSA you can verify ownership using a government or business identifier instead of (or in addition to) a name. ID-based matching returns a binary match / no_match verdict:

  • Personal accounts — Emirates ID (UAE), National ID or Iqama (KSA).
  • Business accounts — Trade License (UAE), Commercial Registration (CR) and/or Unified National Number (UNN) (KSA).
👍

KSA business accounts — send both CR and UNN

Different banks register business accounts under different identifiers. Providing both the CR and the UNN maximizes the chance of a successful match. If you provide only one and get no match, the account may still be valid under the other identifier.

Account holder name in the response

Whether the registered account holder's name is returned depends on the country and local privacy rules:

  • In some markets the name is returned in full (e.g. UAE).
  • In others it is returned masked (e.g. J*** S****), or only on partial matches to help you resolve near-misses.
  • In a few markets the name is used for matching but never returned.

The coverage table below indicates behavior per country.

Country Coverage

IBAN Verification covers 45+ countries. The table below lists, per country, the account identifier to send, whether a bank identifier is required, and what the response returns.

CountryAccount identifierBank identifierHolder name returnedTypical response time
United Arab EmiratesIBANYes (unmasked)5–8 s
Saudi ArabiaIBANMasked (unmasked on request)5–8 s
United KingdomAccount number or IBANSort codePartial matches only2–5 s
Germany, France, Italy, Spain, Netherlands, Belgium, Ireland, Portugal, Austria, Greece, Finland, Luxembourg, Malta, CyprusIBANPartial matches only (Belgium: full)5–8 s
Poland, Czechia region (SK, SI, HR), Baltics (EE, LV, LT), BulgariaIBANPoland: full; others partial only5–10 s
TurkeyIBANMasked2–5 s
IndiaAccount numberIFSC codeYes3–7 s
PakistanAccount number or IBANBICYes2–3 s
IndonesiaAccount numberBICYes2–3 s
MalaysiaAccount numberBICYes2–3 s
VietnamAccount numberBICYes2–3 s
South KoreaAccount numberBIC or local codeYes2–3 s
ChinaAccount numberBIC (business)Individuals restricted; business exact match2–12 s
Bangladesh, NepalAccount numberBICRestricted / score-dependent2–3 s
AustraliaAccount numberBSB codeNot returned2–5 s
PhilippinesAccount numberFormat check only1–2 s
United StatesAccount numberABA routing numberRestricted1–10 s
BrazilIBANYes5–8 s
MexicoCLABEYesUp to 5–10 min
ArgentinaCBUYes2–5 s
Chile, Peru, Ecuador, Colombia, UruguayAccount number (Peru: CCI)BIC or local codeYes (Uruguay masked)2–8 s
NigeriaNUBANBICYes2–5 s
UgandaAccount numberBICYes2–5 s
South AfricaAccount numberBIC or branch codeExistence check; name not guaranteed5–8 s
📘

Business accounts in Europe

For business account verification in several European markets (e.g. Austria, Belgium, Croatia), include the company's VAT or business registration number as a registration_id identification alongside the company name.

⚠️

Mexico response times

Mexican bank rails can take several minutes to respond. Design your integration to tolerate a long-running request for MX, or verify the account ahead of payout time rather than inline.

Required Input

Input ParameterDescription
reference_noType: string required — Your reference for this check (e.g. your user or payout ID). Alphanumeric plus - _ / \ , . + @.
country_codeType: string required — Country of the account in ISO 3166-1 alpha-2 (e.g. AE, SA, GB).
account_typeType: string requiredpersonal or business.
accountType: object required — The account to verify. See the account request model.
identificationsType: array of objects required — One or more identifications of the expected account holder. See the identifications request model.
bank_identifierType: object conditional — Required in markets that use local account numbers (see coverage table). type is one of bic, clearing_id, sort_code, branch_code; value is the corresponding code.

Account request model

PropertyDescription
typeType: string requirediban for IBAN markets, account_id for local account numbers, clabe (Mexico), cbu (Argentina), cci (Peru), nuban (Nigeria).
valueType: string required — The account identifier, without spaces.

identifications request model

PropertyDescription
typeType: string required — One of: full_name, given_name, surname, national_id, emirates_id, iqama, trade_licence, commercial_registration, unified_number, registration_id.
valueType: string required — The identification value (1–256 characters).

Which identifications are accepted depends on the country and account type — see Country Coverage. In most markets full_name is required (the US requires given_name and surname). In the UAE and KSA you may send an ID identification instead of, or alongside, the name.

Verification Response

Output ParameterDescription
successType: bool — Whether the request was processed.
check_idType: string — The ID of this check, for audit and support.
result.account_ownership_verifiedType: booltrue when the account holder matches the provided identifications.
result.matchingType: stringmatch, partial_match, or no_match. ID-based matching returns match or no_match only.
result.match_scoreType: number — Name similarity score, 0–1. Returned for name-based matching.
result.account_statusType: string — Status of the account where reported by the bank: active, blocked, closed, in_liquidation.
result.account_holder_nameType: string — The registered holder name — full, masked, or omitted depending on the country (see coverage table).
error_codeType: string — Present when the verification could not be performed. See Error Codes.

Did this page help you?