IBAN Validator
Data Validation Finance Credits / request: 1Validates an IBAN and parses country, bank, branch and account details.
GET
https://api.apikodu.com/api/v1/ibanvalidator
Documentation
Overview
Validates an IBAN and splits country, bank and account parts.
Authentication
Every request requires the x-api-key header. Credits used and remaining quota are returned in response headers (x-api-credits-used, x-api-remaining-credits, x-rate-limit-*).
Request
GET
https://api.apikodu.com/api/v1/ibanvalidator?iban=TR330006100519786457841326
Query string.
Parameters
| Name | Type | Required | Default | Options | Description |
|---|---|---|---|---|---|
iban |
string | * Required | — | — | IBAN with or without spaces. |
Response
| Name | Type | Description |
|---|---|---|
isValid |
boolean | true when MOD-97 checksum and country length are valid. Invalid IBANs still return HTTP 200. |
iban |
string | Normalized IBAN: no spaces, uppercase. |
ibanPrint |
string | Print format in groups of 4. Example: TR60 0001 0001 ... |
ibanObfuscated |
string | IBAN with the middle masked as X. Last 4 digits remain visible. |
countryCode |
string | ISO 3166-1 alpha-2 country code (first 2 characters). |
checkDigits |
string | IBAN check digits (characters 3–4). |
bban |
string | Basic Bank Account Number (BBAN), excluding country code and check digits. |
bankIdentifier |
string | Bank identifier inside the BBAN. Length depends on the country. May be null. |
bankName |
string | Bank name when known. Null otherwise. |
branchIdentifier |
string | Branch identifier when the country uses one. Otherwise null. |
sepaMember |
boolean | Whether the country is a SEPA member. |
isQrIban |
boolean | Whether the IBAN is in the Swiss/Liechtenstein QR-IBAN range. |
Errors
| HTTP | code | Description |
|---|---|---|
400 |
-227 |
`iban` is empty or whitespace. Invalid checksum returns HTTP 200 with data.isValid=false. |
401 |
-100 |
x-api-key is missing, empty, malformed, inactive, banned, expired, IP-restricted, or not allowed for this API. |
429 |
-221 |
Per-minute request limit exceeded. Response headers: x-rate-limit-limit, x-rate-limit-remaining, x-rate-limit-reset. |
429 |
— | Package credit quota cannot cover this request. Body may be { error, limit, currentUsage, requestCost } (no code field). |
500 |
-1 |
Unexpected server error. message is a generic error text without technical details. |
Notes
- Success body is { data: { ... } }. Error body is { code, message }. code is an ApiResponseCode enum value (negative integer).
Sample response
{
"data": {
"isValid": true,
"iban": "TR600001000104603212345678",
"ibanPrint": "TR60 0001 0001 0460 3212 3456 78",
"ibanObfuscated": "XXXXXXXXXXXXXXXXXXXXXX5678",
"countryCode": "TR",
"checkDigits": "60",
"bban": "0001000104603212345678",
"bankIdentifier": "00010",
"bankName": "T.C. Ziraat Bankası A.Ş.",
"branchIdentifier": null,
"sepaMember": false,
"isQrIban": false
}
}
Code samples
const response = await fetch('https://api.apikodu.com/api/v1/ibanvalidator', {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
response = requests.get('https://api.apikodu.com/api/v1/ibanvalidator', headers=headers)
print(response.json())
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetStringAsync("https://api.apikodu.com/api/v1/ibanvalidator");
Console.WriteLine(response);
$response = file_get_contents('https://api.apikodu.com/api/v1/ibanvalidator', false, stream_context_create([
'http' => [
'header' => "x-api-key: YOUR_API_KEY"
]
]));
print_r(json_decode($response, true));
curl -X GET 'https://api.apikodu.com/api/v1/ibanvalidator' \
-H 'x-api-key: YOUR_API_KEY'
Start building in minutes
Create a free account, get your API key and send your first request in minutes.