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.

Auth none HTTPS required CORS yes Rate limit 600 lookups / minute Format JSON

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.