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:
| Outcome | Meaning |
|---|---|
match | The provided name matches the registered account holder. account_ownership_verified is true. |
partial_match | The 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_match | The 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 UNNDifferent 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.
| Country | Account identifier | Bank identifier | Holder name returned | Typical response time |
|---|---|---|---|---|
| United Arab Emirates | IBAN | — | Yes (unmasked) | 5–8 s |
| Saudi Arabia | IBAN | — | Masked (unmasked on request) | 5–8 s |
| United Kingdom | Account number or IBAN | Sort code | Partial matches only | 2–5 s |
| Germany, France, Italy, Spain, Netherlands, Belgium, Ireland, Portugal, Austria, Greece, Finland, Luxembourg, Malta, Cyprus | IBAN | — | Partial matches only (Belgium: full) | 5–8 s |
| Poland, Czechia region (SK, SI, HR), Baltics (EE, LV, LT), Bulgaria | IBAN | — | Poland: full; others partial only | 5–10 s |
| Turkey | IBAN | — | Masked | 2–5 s |
| India | Account number | IFSC code | Yes | 3–7 s |
| Pakistan | Account number or IBAN | BIC | Yes | 2–3 s |
| Indonesia | Account number | BIC | Yes | 2–3 s |
| Malaysia | Account number | BIC | Yes | 2–3 s |
| Vietnam | Account number | BIC | Yes | 2–3 s |
| South Korea | Account number | BIC or local code | Yes | 2–3 s |
| China | Account number | BIC (business) | Individuals restricted; business exact match | 2–12 s |
| Bangladesh, Nepal | Account number | BIC | Restricted / score-dependent | 2–3 s |
| Australia | Account number | BSB code | Not returned | 2–5 s |
| Philippines | Account number | — | Format check only | 1–2 s |
| United States | Account number | ABA routing number | Restricted | 1–10 s |
| Brazil | IBAN | — | Yes | 5–8 s |
| Mexico | CLABE | — | Yes | Up to 5–10 min |
| Argentina | CBU | — | Yes | 2–5 s |
| Chile, Peru, Ecuador, Colombia, Uruguay | Account number (Peru: CCI) | BIC or local code | Yes (Uruguay masked) | 2–8 s |
| Nigeria | NUBAN | BIC | Yes | 2–5 s |
| Uganda | Account number | BIC | Yes | 2–5 s |
| South Africa | Account number | BIC or branch code | Existence check; name not guaranteed | 5–8 s |
Business accounts in EuropeFor business account verification in several European markets (e.g. Austria, Belgium, Croatia), include the company's VAT or business registration number as a
registration_ididentification alongside the company name.
Mexico response timesMexican 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 Parameter | Description |
|---|---|
reference_no | Type: string required — Your reference for this check (e.g. your user or payout ID). Alphanumeric plus - _ / \ , . + @. |
country_code | Type: string required — Country of the account in ISO 3166-1 alpha-2 (e.g. AE, SA, GB). |
account_type | Type: string required — personal or business. |
account | Type: object required — The account to verify. See the account request model. |
identifications | Type: array of objects required — One or more identifications of the expected account holder. See the identifications request model. |
bank_identifier | Type: 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
| Property | Description |
|---|---|
type | Type: string required — iban for IBAN markets, account_id for local account numbers, clabe (Mexico), cbu (Argentina), cci (Peru), nuban (Nigeria). |
value | Type: string required — The account identifier, without spaces. |
identifications request model
| Property | Description |
|---|---|
type | Type: string required — One of: full_name, given_name, surname, national_id, emirates_id, iqama, trade_licence, commercial_registration, unified_number, registration_id. |
value | Type: 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 Parameter | Description |
|---|---|
success | Type: bool — Whether the request was processed. |
check_id | Type: string — The ID of this check, for audit and support. |
result.account_ownership_verified | Type: bool — true when the account holder matches the provided identifications. |
result.matching | Type: string — match, partial_match, or no_match. ID-based matching returns match or no_match only. |
result.match_score | Type: number — Name similarity score, 0–1. Returned for name-based matching. |
result.account_status | Type: string — Status of the account where reported by the bank: active, blocked, closed, in_liquidation. |
result.account_holder_name | Type: string — The registered holder name — full, masked, or omitted depending on the country (see coverage table). |
error_code | Type: string — Present when the verification could not be performed. See Error Codes. |
Updated about 1 hour ago
