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 Free tier 60 lookups / hour 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

60 lookups an hour per network, free and without a key. That is meant to be enough to build against, try it out, or run a low-traffic form. Exceed it and you get 429 with a retryAfterSeconds field. Every lookup counts, whether you send one IBAN or fifty in a batch.

For anything with real volume - a product, a payment run, a nightly job - use the metered API. It takes a key, is billed per call, and carries a support contact.

This limit applies only to the API. Checking an IBAN on iban-analyzer.com or in the browser extension is free, needs no account, and has no limit at all. That will not change.

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.