Free IBAN API – Validate & Calculate German IBANs

A free JSON API to validate any IBAN and to calculate German IBANs from a bank code (BLZ) and account number. No API key, no registration, CORS-enabled — call it straight from the browser or your backend. Bank data comes from the Deutsche Bundesbank bank directory.

Last reviewed:

Validate an IBAN

POST /api/v1/validate

Checks any IBAN for length, country format and the ISO 7064 MOD-97 check digit. For a German IBAN it also resolves the bank name, BIC and BLZ from the Bundesbank directory.

Request body
{
  "iban": "DE89370400440532013000"
}
curl
curl -X POST https://www.iban-rechner.pro/api/v1/validate \
  -H "Content-Type: application/json" \
  -d '{"iban":"DE89370400440532013000"}'
JavaScript (fetch)
const res = await fetch("https://www.iban-rechner.pro/api/v1/validate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ iban: "DE89370400440532013000" }),
});
const data = await res.json();
Success response (200)
{
  "valid": true,
  "iban": "DE89 3704 0044 0532 0130 00",
  "country": "DE",
  "sepa": true,
  "sepaInstant": null,
  "bank": "Commerzbank Nürnberg",
  "bic": "COBADEFFXXX",
  "blz": "37040044"
}

A structurally invalid IBAN also returns HTTP 200 with valid: false and an error message — the request itself was well-formed:

Invalid IBAN response (200)
{
  "valid": false,
  "iban": "DE00 3704 0044 0532 0130 00",
  "error": "Invalid check digits"
}

sepa and sepaInstant are true, false or null. null means the public BLZ dataset does not prove scheme reachability either way — it is not a negative. The bank, bic and blz fields appear only when the bank code is found.

Calculate a German IBAN

POST /api/v1/calculate

Builds a German IBAN from a bank code (BLZ) and an account number. Only country: "DE" is supported — the BLZ + account scheme is Germany-specific. The BLZ must exist in the public Bundesbank register.

Request body
{
  "country": "DE",
  "blz": "37040044",
  "account": "0532013000"
}
curl
curl -X POST https://www.iban-rechner.pro/api/v1/calculate \
  -H "Content-Type: application/json" \
  -d '{"country":"DE","blz":"37040044","account":"0532013000"}'
JavaScript (fetch)
const res = await fetch("https://www.iban-rechner.pro/api/v1/calculate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    country: "DE",
    blz: "37040044",
    account: "0532013000",
  }),
});
const data = await res.json();
Success response (200)
{
  "iban": "DE89 3704 0044 0532 0130 00",
  "valid": true,
  "formallyValid": true,
  "assurance": "mathematical-only",
  "warning": "Standardformel; bankspezifische Bundesbank-IBAN-Regeln …",
  "bank": "Commerzbank Nürnberg",
  "bic": "COBADEFFXXX"
}

The response carries assurance: "mathematical-only". The IBAN is built with the standard MOD-97 formula, which is correct for the large majority of German banks. A minority of institutions use deviating Bundesbank IBAN rules that are not published in the public BLZ dataset, so a mathematical-only IBAN should be reconciled against your bank records before you rely on it. That is exactly what the warning field states (in German).

Error responses

Errors return a JSON body with an error string and one of these status codes:

StatusMeaning
400Bad request. A required field is missing or has the wrong type, or the body is not valid JSON. For /validate that is a missing or non-string iban; for /calculate a missing country, blz or account.
413Payload too large. The request body exceeds the 4 KB cap (see limits below).
422Unprocessable. The request was well-formed but cannot be fulfilled — e.g. /calculate was called with a non-DE country, a BLZ that is not in the public Bundesbank register, or an account number the IBAN formula rejects.

Limits & fair use

  • No authentication and no SLA. This is a best-effort free service with no uptime guarantee. Do not build anything mission-critical directly on it.
  • Request bodies are capped at 4 KB. Larger bodies return 413.
  • No rate limit is currently enforced, but fair use is expected. If you need high or sustained throughput, please self-host rather than hammering this endpoint.
  • calculate returns assurance: "mathematical-only" because some banks use deviating Bundesbank IBAN rules that are not in the public BLZ dataset. Treat the result as formally valid, not bank-confirmed.

Attribution

If you use this API in a public project, a link to iban-rechner.pro is appreciated.

Open the IBAN Checker