Banking & PaymentsPhase 3 Live

Catch the bad IBAN before the bank does.

The complete SWIFT IBAN registry — 77 countries with correct lengths and BBAN structures, the ISO 7064 mod-97-10 checksum, and bank/branch/account extraction for DE, GB, FR, ES, IT and NL. Fully offline and deterministic: pre-validate payee details before a payment ever leaves, instead of waiting for the bank to bounce it.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://almanac.tools/v1/iban/validate?iban=GB82WEST12345698765432"
Response
{
  "data": {
    "input": "GB82WEST12345698765432",
    "normalized": "GB82WEST12345698765432",
    "country": "GB",
    "isValidFormat": true,
    "isValidChecksum": true,
    "isValid": true,
    "bankCode": "WEST",
    "branchCode": "123456",
    "accountNumber": "98765432"
  }
}
77
IBAN registry countries
6
Countries with bank/branch extraction
mod-97
ISO 7064 check-digit algorithm
50
IBANs per batch call
What it is

The IBAN Validation API checks an International Bank Account Number for the right length, the correct per-country BBAN structure, and a valid ISO 7064 mod-97-10 check digit, then extracts the bank, branch and account fields for the countries with a known layout. It covers the full 77-country IBAN registry and is pure and deterministic — no network, no clock, no I/O.

§ 01Differentiators

Built for the awkward middle.

Structure + checksum, not a regex

We check the total length and the per-country BBAN pattern from the SWIFT IBAN Registry, then run the real ISO 7064 mod-97-10 checksum. A single transposed digit fails the check digit — the same failure the receiving bank would return, caught before you send.

Bank-field extraction

For DE, GB, FR, ES, IT and NL we split the validated IBAN into its bank code, branch/sort code and account number, so you can route, reconcile or display payee details without parsing the string yourself.

Offline and deterministic

Every call is pure math — no third-party lookup, no rate-limited registry, no surprises. The same IBAN always returns the same result, which makes it safe to put in a validation hot path or a batch reconciliation job.

§ 02The surface

Endpoints

Every route takes a Bearer API key. Validation runs before authentication, so a malformed request never costs you a credit.

GET/v1/iban/validate
GET/v1/iban/countries
POST/v1/iban/batch
§ 03Answers

Frequently asked

What does the mod-97 checksum actually catch — and what can’t it?

It catches structural errors: a wrong length, a BBAN that doesn’t match the country’s pattern, and the vast majority of single-character typos and digit transpositions, because those change the ISO 7064 mod-97-10 check digit. What it cannot tell you is whether the account exists, is open, or is funded — that is a bank-side question no offline check can answer. This is pre-flight validation: it stops the obviously-broken IBANs, so a real payment failure is far more likely to be a genuine account issue than a typo.

Which countries get bank and branch field extraction?

Six: Germany (DE), the United Kingdom (GB), France (FR), Spain (ES), Italy (IT) and the Netherlands (NL). For a valid GB IBAN, for example, we return the 4-letter bank code, the 6-digit sort code as branchCode, and the 8-digit account number. All 77 registry countries are validated for length, structure and checksum; the bank/branch/account fields are simply null for countries without an implemented layout.

Do I have to normalize the input first?

No. Input is uppercased and all whitespace is stripped before validation, so "gb82 west 1234 5698 7654 32" validates identically to "GB82WEST12345698765432". The response echoes your raw input and the normalized form so you can store the clean version.

How many IBANs can I validate in one batch?

Up to 50 per POST /v1/iban/batch call. The response returns one full result object per input, in order, each with its own format, checksum and field-extraction outcome. Because validation is pure and never throws, an invalid IBAN in the list never breaks the others — it just comes back with isValid false and a reason.

What’s the difference between an IBAN and a national format like a UK sort code?

The IBAN is the international wrapper: a country code, two check digits, then the country’s own BBAN. For the UK that BBAN embeds the familiar 6-digit sort code and 8-digit account number, which our GB extraction pulls back out for you. We validate the IBAN as a whole (including the mod-97 check digit, which national formats don’t have); we don’t separately validate raw national numbers that aren’t wrapped in an IBAN.

What happens with an unknown or wrong-length country code?

You still get a fully populated result. If the first two characters aren’t a known IBAN country, or the length doesn’t match that country’s registry entry, isValidFormat is false and reason explains exactly what failed — for example "Unknown IBAN country code" or "Expected length 22 for GB". The checksum is computed honestly either way, so you can see whether the digits themselves were even self-consistent.

§ 04The portfolio

More from the almanac

Start building with IBAN Validation.

One key unlocks every Almanac API. Free tier, no credit card, deterministic results you can pin in a test.