Free IBAN API
Turn an IBAN into the bank behind it - name, BIC/SWIFT code, city and address - for 60+ countries. No API key. No sign-up. CORS enabled, so it works from a browser as well as a server.
Resolve an IBAN
Send an array of IBANs. You get one result per IBAN, in the same order.
curl -X POST https://iban-analyzer.com/api/v1/public/analyze \
-H "Content-Type: application/json" \
-d '["DK4890041234567890"]'
Response:
{
"results": [
{
"iban": "DK4890041234567890",
"isValid": true,
"validationBreakdown": {
"ibanCheckDigitValid": true,
"ibanMod97Valid": true,
"lengthValid": true,
"structureValid": true,
"overallValid": true
},
"ibanDetails": {
"iban": "DK4890041234567890",
"countryCode": "DK",
"bankCode": "9004",
"accountNumber": "1234567890"
},
"countryInfo": { "code": "DK", "name": "Denmark", "sepaSupport": true },
"bankDetails": {
"bankName": "SPAR NORD BANK A/S",
"swiftCode": "SPNODK22XXX",
"bankCity": "AALBORG",
"bankAddress": "SKELAGERVEJ 15",
"bankZipCode": "9200"
},
"bankDataAvailable": true
}
]
}
From a browser
const res = await fetch("https://iban-analyzer.com/api/v1/public/analyze", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(["DK4890041234567890"]),
});
const { results } = await res.json();
console.log(results[0].bankDetails.bankName); // SPAR NORD BANK A/S
Supported countries
curl https://iban-analyzer.com/api/v1/public/supported-countries
What you get, and what you don't
Validation is a checksum and works for every IBAN country. Naming the bank behind the account needs reference data, which we compile from national registers - the Deutsche Bundesbank Bankleitzahlen file, Oesterreichische Nationalbank, the National Bank of Ukraine, Banka Slovenije, Banco de España, Narodná banka Slovenska, Banco Central do Brasil, Bits AS, Finanssiala, the Central Bank of Cyprus, and the GLEIF BIC-to-LEI mapping.
Where we hold no bank for an IBAN, bankDataAvailable
is false and
bankDetails is absent. That is
deliberate: an honest gap is more useful than a confident guess when the answer
is going on a transfer form.
Limits and fair use
600 lookups a minute per network, which is enough for a form, a dashboard or a
nightly job. Exceed it and you get 429
with a retryAfterSeconds field.
No key is required and none is checked - please do not scrape the whole dataset
through it. If you need higher volume, guaranteed limits or a support contact,
there is a metered API with a key.
Bank reference data is compiled from the national registers listed above and is accurate to the best of those sources, but it is not a certified payment record. For a payment that must not fail, confirm with the recipient or their bank. Not affiliated with any bank.