IBAN Validation API
Check account details before you pay.
Validate IBANs and retrieve country, bank, branch, and BIC information where available. Catch invalid identifiers early and give your payment workflow structured bank data.
- IBAN
- FR76 3000 6000 0112 3456 7890 189
- Bank and BIC/SWIFT identified
- CREDIT AGRICOLE SA, AGRIFRPP
IBAN is the standard international format used by banks to identify accounts for cross-border and domestic transfers across Europe and other supported regions.
An IBAN consists of up to 34 (depending on the country) alphanumeric characters and contains the country code, 2 check digits, the bank identifier, the branch identifier (optionally) and the domestic bank account number.
For example, IBAN number FR7630006000011234567890189:
- FR - country code
- 76 - check digits
- 30006 - bank code
- 00001 - branch code
- 12345678901 - bank account number
- 89 - national check digits
When you send money to an invalid IBAN number, the bank should reverse the transaction and return the money, but this might take some time and your bank may charge you a fee. Using our flexible and fast RESTful API you can validate an IBAN number and receive all possible information about it - see whether it's valid and which country and BIC code it belongs to, as well as BIC code bank name, branch information and city.
How to validate an IBAN number
To start using our Fin Codes API sign up here and create your API key. Pass this key either via x-api-key HTTP header or via api_key query param.
To validate an IBAN number call /v2/iban/{iban_number} endpoint using HTTP client of your preference, i.e.:
curl 'https://api.fincodesapi.com/v2/iban/FR7630006000011234567890189' \
--header 'X-Api-Key: your-api-key-here' \
--header 'Accept: application/json'
# INSTALLATION
$ composer require guzzlehttp/guzzle
# REQUEST
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.fincodesapi.com/v2/iban/FR7630006000011234567890189', [
'headers' => [
'Accept' => 'application/json',
'X-Api-Key' => 'your-api-key-here',
],
]);
echo $response->getBody();
# INSTALLATION
$ python -m pip install requests
# REQUEST
import requests
url = "https://api.fincodesapi.com/v2/iban/FR7630006000011234567890189"
headers = {
"Accept": "application/json",
"X-Api-Key": "your-api-key-here"
}
response = requests.request("GET", url, headers=headers)
print(response.text)
# INSTALLATION
$ npm install node-fetch --save
// REQUEST
import fetch from 'node-fetch';
const url = 'https://api.fincodesapi.com/v2/iban/FR7630006000011234567890189';
const options = {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-Api-Key': 'your-api-key-here'
}
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error('error:' + err));
const options = {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-Api-Key': 'your-api-key-here'
}
};
fetch('https://api.fincodesapi.com/v2/iban/FR7630006000011234567890189', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
The response should be:
{
"success": true,
"data": {
"id": "FR7630006000011234567890189",
"account_number": "1234567890189",
"national_bank_code": "30006",
"national_branch_code": "00001",
"bic": {
"id": "AGRIFRPP",
"address": "12 PLACE DES ETATS-UNIS",
"postcode": "92120",
"branch_name": "(HEAD OFFICE)",
"branch_code": "",
"country": {
"id": "FR",
"name": "France"
},
"city": {
"id": "a3e9cd32-d241-475a-89bb-41f9621be4e5",
"country_id": "FR",
"name": "Montrouge"
},
"bank": {
"id": "fff72551-720a-4c37-b430-32d747634905",
"country_id": "FR",
"code": "AGRI",
"name": "CREDIT AGRICOLE SA"
}
},
"country": {
"id": "FR",
"name": "France"
}
}
}
You can find full documentation here.
Using our API you can check whether an IBAN is in the valid format and represents an existing bank/branch, but we can't guarantee that the actual account number exists, or that it represents the intended account. Our API should help you to confirm some of the details you already know, such as the country and bank.
Need to verify the account holder as well? Use our Verification of Payee (VoP) feature to match a payee name against the bank account for SEPA IBANs.
Supported countries
- Albania (AL)
- Andorra (AD)
- Austria (AT)
- Belarus (BY)
- Belgium (BE)
- Benin (BJ)
- Bosnia and Herzegovina (BA)
- Bulgaria (BG)
- Croatia (HR)
- Cyprus (CY)
- Czech Republic (CZ)
- Denmark (DK)
- Egypt (EG)
- Estonia (EE)
- Finland (FI)
- France (FR)
- Georgia (GE)
- Germany (DE)
- Greece (GR)
- Hungary (HU)
- Iceland (IS)
- Ireland (IE)
- Israel (IL)
- Italy (IT)
- Jordan (JO)
- Kazakhstan (KZ)
- Kosovo (XK)
- Latvia (LV)
- Lebanon (LB)
- Liechtenstein (LI)
- Lithuania (LT)
- Luxembourg (LU)
- Malta (MT)
- Moldova (MD)
- Monaco (MC)
- Montenegro (ME)
- Netherlands (NL)
- Norway (NO)
- Poland (PL)
- Portugal (PT)
- Qatar (QA)
- Romania (RO)
- San Marino (SM)
- Serbia (RS)
- Slovakia (SK)
- Slovenia (SI)
- Spain (ES)
- Sweden (SE)
- Switzerland (CH)
- Tunisia (TN)
- Turkey (TR)
- United Arab Emirates (AE)
- United Kingdom (GB)
Need to validate multiple types of bank details? Explore our Bank Account Validation API.