IBANforge

Rezepte — IBAN validieren in Ihrem Stack

Jedes Rezept macht denselben Aufruf: POST /v1/iban/validate — Struktur + Prüfziffer, ausgebende Bank (BIC), Bankcode-Prüfung gegen das Nationalregister, EMI/vIBAN-Klassifikation und SEPA/VoP-Erreichbarkeit. Zuerst ein kostenloser Schlüssel (200 Anfragen/Monat, ohne Karte):

curl -X POST https://api.ibanforge.com/v1/keys/generate \
  -H "Content-Type: application/json" \
  -d '{"email": "sie@firma.com"}'

Die ehrliche Notiz, die in jede Integration gehört: Eine lokale Mod-97-Prüfung fängt Tippfehler — sonst nichts. Drei der vier offiziellen Beispiel-IBANs bestehen jede Prüfziffer und zeigen dennoch auf Bankcodes, die kein Register vergeben hat — die ganze Geschichte. Die Registerprüfung ist der Teil, der lokal unmöglich ist.

Python

Mit dem offiziellen SDK (pip install ibanforge):

from ibanforge import IBANforge
 
client = IBANforge(api_key="ifk_ihr_schluessel")
result = client.validate("DE89370400440532013000")
print(result["valid"], result["bic"]["code"], result["bank_code_check"]["status"])
# True COBADEFF verified

Oder schlicht requests:

import requests
 
r = requests.post(
    "https://api.ibanforge.com/v1/iban/validate",
    json={"iban": "DE89370400440532013000"},
    headers={"Authorization": "Bearer ifk_ihr_schluessel"},
    timeout=15,
)
data = r.json()
print(data["valid"], data["bank_code_check"]["status"])  # True verified

Node.js / TypeScript

Natives fetch, keine Abhängigkeit:

const res = await fetch("https://api.ibanforge.com/v1/iban/validate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer ifk_ihr_schluessel",
  },
  body: JSON.stringify({ iban: "DE89370400440532013000" }),
});
const data = await res.json();
console.log(data.valid, data.bic?.code, data.bank_code_check?.status);
// true COBADEFF verified

Das offizielle SDK (npm install @ibanforge/sdk) kapselt denselben Aufruf mit Typen.

PHP

Nichts über das hinaus, was PHP mitbringt:

<?php
$payload = json_encode(["iban" => "DE89370400440532013000"]);
$ctx = stream_context_create(["http" => [
    "method"  => "POST",
    "header"  => "Content-Type: application/json\r\nAuthorization: Bearer ifk_ihr_schluessel",
    "content" => $payload,
    "timeout" => 15,
]]);
$data = json_decode(file_get_contents(
    "https://api.ibanforge.com/v1/iban/validate", false, $ctx), true);
echo $data["valid"] ? "gültig" : "ungültig", " — ",
     $data["bank_code_check"]["status"] ?? "n/a", PHP_EOL;
// gültig — verified

Google Sheets

Erweiterungen → Apps Script, dann eine benutzerdefinierte Funktion für =VALIDATE_IBAN(A2):

function VALIDATE_IBAN(iban) {
  const res = UrlFetchApp.fetch("https://api.ibanforge.com/v1/iban/validate", {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer ifk_ihr_schluessel" },
    payload: JSON.stringify({ iban: String(iban) }),
    muteHttpExceptions: true,
  });
  const d = JSON.parse(res.getContentText());
  return [[d.valid, d.bic ? d.bic.code : "", d.bank_code_check ? d.bank_code_check.status : ""]];
}

Quota im Blick behalten: ein Aufruf pro Zellauswertung. Für ganze Spalten besser der Batch-Endpoint aus einem Script (bis 100 IBANs pro Aufruf).

n8n

Community-Node installieren — Validierung, BIC-Suche, Schweizer Clearing und Compliance-Vorprüfung, mit Credentials-Maske:

Settings → Community nodes → Install → n8n-nodes-ibanforge

Self-hosted: npm install n8n-nodes-ibanforge. (Unverifizierte Community-Nodes laufen self-hosted; das verifizierte Listing für n8n Cloud ist unterwegs.)

KI-Agenten (MCP)

Claude Desktop, Claude Code, Cursor und jeder MCP-Client:

npx -y ibanforge-mcp        # stdio, 5 Tools, Free-Tier-Schlüssel optional

Oder der gehostete Transport, ohne Installation: https://api.ibanforge.com/mcp — 10 kostenlose Tool-Aufrufe pro IP und Tag, ganz ohne Schlüssel: der schnellste Weg für einen Assistenten, die Daten zu prüfen, bevor Sie sich festlegen.

Was zurückkommt

Die Antwort, die die Rezepte ausgeben (Produktionsantwort, gekürzt):

{
  "valid": true,
  "bic": { "code": "COBADEFF", "bank_name": "COMMERZBANK Aktiengesellschaft", "city": "Frankfurt am Main" },
  "bank_code_check": {
    "value": "37040044",
    "status": "verified",
    "register": "Deutsche Bundesbank Bankleitzahlendatei",
    "authoritative": true,
    "as_of": "2026-08"
  }
}

authoritative: true heißt: das Nationalregister selbst hat geantwortet. Felder, die die Daten nicht tragen, sind null — nie geraten. Die vollständige Semantik erklärt, was verified verspricht und was nicht.

Siehe auch: Was „verified" bedeutet · IBAN zu BIC · Test-IBAN-Generator · Datenquellen