Skip to content
IBANforge
Germany · Bundesbank · SEPA

Which API checks German IBANs and names the bank and BIC?

IBANforge checks a German IBAN in one call against the bank code file of the Deutsche Bundesbank (last read in November 2026): structure and check digits, the Bankleitzahl in the register, the account-number check digit by the Bundesbank method, and the bank and BIC from the same file. When the Bankleitzahl is not in the register, the answer is not_allocated with authoritative: true, because then no bank holds that code.

The API does not match the account holder's name and does not say whether the account exists. The name match is the Verification of Payee run by the banks.

We sell IBANforge. The comparison further down also says when another provider is the better choice.

What an API has to do for a German IBAN

Correct check digits only prove that the characters fit together. A useful check also answers the questions below, and says where each answer comes from.

  • Is the IBAN well formed?Where the answer comes from: ISO 13616: 22 characters, modulo 97 check digitsField in the response: valid
  • Is the Bankleitzahl allocated?Where the answer comes from: The Bundesbank bank code fileField in the response: bank_code_check
  • Does the account-number check digit fit?Where the answer comes from: The method the Bundesbank assigns to the BankleitzahlField in the response: national_check_digits
  • Which bank, which BIC?Where the answer comes from: The same entry of the bank code fileField in the response: bank_code_check.institution, bic
  • Which SEPA schemes, which VoP status for the bank?Where the answer comes from: The European Payments Council registers, otherwise the country (the answer says which)Field in the response: sepa

What we read at the Bundesbank

The bank code file, with its date

The Bundesbank allocates the Bankleitzahlen and updates its stock every quarter, in March, June, September and December. We re-read the file every month, last in November 2026: 3,507 bank codes, 75 of them marked for deletion. In every answer, as_of names the month of that reading, not a Bundesbank validity date.

A missing code carries weight

Because the Bundesbank allocates the codes itself, an absence is a fact about Germany and not about our data: status not_in_register, reason not_allocated, authoritative true. Where we read no complete register, the same miss is absent_from_reference_data and rules nothing out.

The account-number check digit

The file assigns a check-digit method (Prüfzifferberechnungsmethode) to every Bankleitzahl. The answer names it in national_check_digits.method, with the result and the source. A wrong check digit never turns valid to false. With a method the Bundesbank publishes without test account numbers it is only a warning, and a method we cannot check reliably stays not_checked.

The BIC and its source

The file carries the BIC next to the Bankleitzahl. bic.source names the file, and bic.basis: national_register says that the BIC was read there and not guessed.

Codes that end

When the Bundesbank marks a Bankleitzahl for deletion, the answer carries retired: true and, when the register names a successor, superseded_by. A format check does not see this.

Quelle: Deutsche Bundesbank, Bankleitzahlendatei, read in November 2026. The update dates at the Bundesbank (German), read on 5 November 2026

Two answers

These values are not typed by hand: when this page is built they are taken from the Bundesbank file we read in November 2026.

An allocated Bankleitzahl

DE89 3704 0044 0532 0130 00 is the specimen IBAN of many tutorials. The Bankleitzahl 37040044 belongs to Commerzbank, and the BIC comes from the same file. It says nothing about the account itself.

Extract of the response

{
  "iban": "DE89370400440532013000",
  "valid": true,
  "bank_code_check": {
    "value": "37040044",
    "status": "verified",
    "match": "register",
    "register": "Deutsche Bundesbank Bankleitzahlendatei",
    "authoritative": true,
    "institution": {
      "name": "Commerzbank",
      "street": null,
      "post_code": "50447",
      "town": "Köln",
      "country": "DE"
    },
    "as_of": "2026-11"
  },
  "bic": {
    "code": "COBADEFFXXX",
    "bank_name": "Commerzbank",
    "source": "Deutsche Bundesbank Bankleitzahlendatei",
    "basis": "national_register",
    "authoritative": true,
    "as_of": "2026-11"
  }
}

A Bankleitzahl nobody holds

The check digits of this IBAN are correct, so valid stays true. Only the register shows that the Bundesbank never allocated 99999999. next_steps turns that into an action software can branch on.

Extract of the response

{
  "iban": "DE37999999990123456789",
  "valid": true,
  "bank_code_check": {
    "value": "99999999",
    "status": "not_in_register",
    "reason": "not_allocated",
    "match": null,
    "authoritative": true,
    "register": "Deutsche Bundesbank Bankleitzahlendatei",
    "as_of": "2026-11"
  },
  "bic": null,
  "next_steps": [
    {
      "code": "bank_code_not_allocated",
      "do": "Do not send. The bank code is absent from the national register, so no institution holds this account."
    }
  ]
}

Call it yourself, without a key

curl -s -X POST https://api.ibanforge.com/v1/iban/validate \
  -H "Content-Type: application/json" \
  -d '{"iban":"DE89370400440532013000"}'

For production, take a key. Prices and allowances

Verification of Payee: what is mandatory, and what we say about it

What it is

Before a credit transfer, the payee name entered is matched against the name that belongs to the IBAN. This applies to SEPA credit transfers and SEPA instant credit transfers between payment accounts. The legal basis is Article 5c of the SEPA Regulation, inserted by Regulation (EU) 2024/886.

Who the duty falls on

Payment service providers in the euro area, since 9 October 2025: the payer's bank asks, the payee's bank answers. A business submitting transfers in a bundle must have the option to opt out. This page is not legal advice.

What IBANforge says about it

Whether the bank it resolved is in the European Payments Council VoP register: sepa.vop_participant and sepa.vop_register_status, with register_source and register_as_of when the register was read for that bank. That is a statement about the bank, not about the account.

What IBANforge does not do

Match a name. The API never answers Match or No Match and does not replace your bank's check. A false or null in the VoP fields is not a result about a name.

The VoP fields in detail

Sources

The comparison for German IBANs

We sell IBANforge; read this comparison knowing that. Every statement about another provider comes from its public pages, read on 24 September 2026. What we did not check says so. If something is wrong or a price has changed, write to support@ibanforge.com.

IBANforge

Bank code in the national register
Complete registers for DE, AT, BE, SK, CZ, BG, CH, LI: a missing code can be reported as unallocated when the register is available. An absence in a partial list or composite map stays inconclusive; read the source and authoritative.
Prices
Prepaid packs: $4 / 1,000 credits, with no expiry. A Pro subscription and per-call x402 payments are also available; see the pricing page for units and details.
All prices

IBANAPI

A free plan that renews, a self-hosted engine, prepaid credits tied to a period.

Bank code in the national register
Announced on their home page (24 September 2026): the bank code in the IBAN is resolved against their own bank registry (central banks, SEPA data and manual review). Whether a code missing from it means not allocated: not checked by us.
The calculation, prices read on 24 September 2026
For 2,000 validations with bank data, from the published prices: at IBANforge, $8 in prepaid credits (two packs of 1,000) that never expire. At IBANAPI, the smallest single plan with 2,000 bank lookups is Enterprise, $115 for 365 days, which includes 5,000. Repeat purchases of a smaller plan are not compared here.
When IBANAPI is the better choice
  • You want to run the validation engine inside your own infrastructure.
  • You need the domestic account number checked in countries where IBANAPI announces it and IBANforge does not.

What a bank code missing from IBANAPI’s registry means (allocated to nobody, or simply not listed) is not stated on the pages we read.

The full comparison with IBANAPI

iban.com

SWIFT-licensed BIC data, Verification of Payee, UK sort codes, annual licences.

Bank code in the national register
Not checked by us
The calculation, prices read on 24 September 2026
For 2,000 validations with bank data, from the published prices: at IBANforge, $8 in prepaid credits (two packs of 1,000) that never expire. At iban.com, the Professional licence includes 2,000 lookups a year for €530, excluding VAT.
When iban.com is the better choice
  • You need to check the account holder’s name (Verification of Payee). IBANforge does not: it checks the bank behind the IBAN, not the person.
  • You validate UK or Irish sort codes and account numbers.
  • You want BIC data under a SWIFT licence, and an annual contract that can be paid by invoice.

iban.de, which says its IBAN and BIC services are powered by iban.com, names in its legal notice the company that iban.com’s terms name as licensor. It lists €420 to €3,800 a year for a one-year term, and a free trial of 100 queries active one month.

The full comparison with iban.com

AbstractAPI

A validity boolean, high request rates, an Enterprise plan with an SLA.

Bank code in the national register
Not checked by us
The calculation, prices read on 24 September 2026
The two answers do not cover the same ground: AbstractAPI documents no BIC or bank name in its response, while IBANforge names the bank and its BIC. For volume alone, from the published prices: 5,000 validations cost $69 for a month at AbstractAPI (Standard, billed monthly) and $20 at IBANforge (one pack of 5,000 credits, no expiry).
When AbstractAPI is the better choice
  • You only need to know whether an IBAN is well formed, at a high rate of single calls: Standard lists 25 requests per second. IBANforge accepts 100 requests a minute per IP address, with up to 100 IBANs in one batch call.
  • You want an Enterprise plan whose card lists a 99.99% uptime SLA.
The full comparison with AbstractAPI

Open-source libraries

Bank code in the national register
Varies by library: schwifty rejects a bank code unknown to its bundled registry. Others not checked by us.
When a library is the better choice
You only need local structure and checksum checks. Libraries such as ibantools, schwifty, iban4j and IbanNet can avoid a remote API call. Some also include bank data: check the package’s coverage and update policy.

All providers in one table

The same logic across Europe

The registers of Germany, Austria, Belgium, Slovakia, the Czech Republic, Bulgaria, Switzerland and Liechtenstein are read in full. There, a missing code comes back as not_allocated.

In the rest of the 89 IBAN countries a partial register or a composite map names the bank, and the answer says that it cannot rule a code out. A batch call takes up to 100 IBANs.

IBAN formats and registers by country

Read on