IBAN to BIC — deriving the BIC from an IBAN
The question comes up constantly — a form demands a BIC the user doesn't know, an ERP field won't stay empty, a non-SEPA corridor requires it — and most tools answer it badly, because deriving a BIC is a data problem, not a parsing problem. The BIC is not hidden inside the IBAN; the IBAN carries a national bank code, and only a register that maps bank codes to institutions can tell you whose BIC that is.
Honesty first: within SEPA, the BIC is no longer required. Regulation (EU) 260/2012 made euro payments IBAN-only years ago. If your counterparty and you are both in SEPA and your bank still demands a BIC, that is their legacy, not the standard. The question stays real everywhere else — international wires, non-SEPA corridors, legacy ERPs, compliance forms — which is why this page exists.
One call
curl -X POST https://api.ibanforge.com/v1/iban/validate \
-H "Content-Type: application/json" \
-d '{"iban": "DE89370400440532013000"}'{
"valid": true,
"bic": {
"code": "COBADEFF",
"bank_name": "COMMERZBANK Aktiengesellschaft",
"city": "Frankfurt am Main"
},
"bank_code_check": {
"value": "37040044",
"status": "verified",
"match": "register",
"register": "Deutsche Bundesbank Bankleitzahlendatei",
"authoritative": true,
"as_of": "2026-08"
}
}The German bank code 37040044 was extracted from the IBAN, checked against the Bundesbank's own file, and resolved to Commerzbank's BIC. authoritative: true tells you the source was the national register, and as_of tells you which month's edition answered.
How the resolution actually works
- Extract the bank code from the IBAN using the country's BBAN structure (89 countries covered).
- Ask the national register first. For CH/LI (SIX BankMaster), DE (Bundesbank), AT (OeNB), BE (BNB) and FI, the register is the allocation authority: a hit is the institution the code belongs to, a miss (
not_in_register) means the code is allocated to nobody — a strong reason to stop a payment. See data sources for what each register publishes. - Fall back to the composite BIC map everywhere else: 121k+ BIC entries assembled from GLEIF, the public SWIFT directory, SIX, EBA STEP2, Bundesbank and NBP. A hit names who holds the matching BIC — the response marks these
authoritative: false, because naming the BIC holder is a fact, while promising it is your counterparty's bank would be a guess.
The honest limits
- You get the institution's BIC, not a branch BIC. Registers allocate bank codes to institutions; branch-level BIC11s are not derivable from an IBAN in any country, by anyone.
- Some countries have no code-to-BIC mapping at all. There,
bicisnull— never guessed. An honest null beats a fabricated code that bounces a payment. - The BIC that a register publishes can lag reality by up to a month (registers republish monthly). Every answer carries
as_ofso you know exactly how fresh it is.
Related: BIC lookup (when you already have the BIC) · What "verified" means · Data sources & provenance