Zum Inhalt springen
IBANforge

Fehlerreferenz

IBANforge verwendet standardmässige HTTP-Statuscodes und gibt strukturierte Fehler im JSON-Format zurück, {"error": "<token>", "message": "<text>"}. Verzweigen Sie auf error, das stabil bleibt; message kann umformuliert werden. Diese Seite behandelt die Statuscodes der API und die Codes, die ihre Routen teilen; ein Code, der nur zu einer Route gehört (API-Schlüssel, britische Institute), steht auf der Seite dieser Route.

Eine ungültige IBAN ist kein Fehlerstatus. POST /v1/iban/validate antwortet mit HTTP 200, valid: false, einem error-Code und einem Satz in error_detail. Nur die Anfrage selbst (ihr JSON, ein fehlendes Feld, Zahlung, Kontingent, Grösse, Rate) ändert den HTTP-Status.

HTTP-Statuscodes

StatusBedeutungWann es auftritt
200OKDie Anfrage wurde beantwortet. Eine ungültige IBAN liefert trotzdem 200 mit valid: false; ein unbekannter BIC liefert 200 mit found: false
400Bad RequestFehlerhaftes JSON, ein fehlendes Feld oder ein ungültiger Parameter
401UnauthorizedNur die Schlüsselrouten. missing_key (kein Schlüssel gesendet) auf GET /v1/keys/usage, GET /v1/keys/report, GET /v1/credits/balance, POST /v1/keys/claim, POST /v1/keys/revoke und POST /v1/keys/rotate; invalid_key (unbekannter oder inaktiver Schlüssel) auf den ersten vier. POST /v1/keys/claim nimmt einen wegen einer Welle automatischer Anmeldungen gesperrten Schlüssel weiterhin an: Die Beanspruchung holt ihn zurück. Eine kostenpflichtige Route antwortet nie mit 401
403Forbiddenverification_required: POST /v1/keys/generate mit einer Adresse, aus einem Netz, das kürzlich einen Schlüssel geholt hat; ein Code wurde gesendet, wiederholen Sie die Anfrage damit. forbidden_origin: Freigabe oder Ablehnung eines Geräteschlüssels (POST /v1/keys/device/approve, /deny) von einer Seite mit anderer Herkunft
402Payment RequiredKostenpflichtige Route ohne brauchbaren Zahlungsweg: weder Schlüssel noch verbleibendes Gratiskontingent, ein ungültiger Schlüssel oder einer, dessen Kontingent oder Guthaben verbraucht ist, oder eine abgelehnte Zahlung. Der x402-Zahlungsumschlag, mit einer cause, wenn eine zutrifft
404Not FoundUnbekannter Endpunkt. Auf POST /v1/keys/revoke und POST /v1/keys/rotate invalid_key: Der Schlüssel ist unbekannt oder bereits widerrufen
405Method Not AllowedRichtiger Pfad, falsche Methode (zum Beispiel GET /v1/keys/generate); das Feld allow nennt die richtige Methode
409ConflictDie Schlüsselrouten: already_claimed: Der Schlüssel hat die anonyme Stufe bereits verlassen. already_claimed_elsewhere: Diese Adresse hält bereits einen beanspruchten Schlüssel oder hat in den letzten 24 Stunden einen beansprucht. verification_in_flight: Für diese Adresse wurde gerade ein Code ausgestellt; verwenden Sie ihn oder versuchen Sie es in einigen Minuten erneut. Die Paketroute (POST /v1/credits/buy/…), für eine bereits gesehene Zahlung, deren Kauf nicht gutgeschrieben wurde: payment_pending (ihre Abrechnung ist noch nicht bestätigt, zahlen Sie nicht erneut), payment_refused (signieren Sie eine neue Zahlung) oder payment_reversed; nichts wird erneut abgerechnet
413Payload Too LargeBody der Anfrage über 256 KB
429Too Many RequestsMehr als 100 Anfragen in einer Minute von derselben IP-Adresse; warten Sie Retry-After ab
500Internal Server ErrorUnerwarteter Serverfehler (bitte melden, siehe Support)
502, 503Bad Gateway, Service UnavailableDie x402-Zahlungsschiene war nicht erreichbar oder hat mit einem Fehler geantwortet. Später erneut versuchen. Außer 502 settlement_unconfirmed: Der Ausgang Ihrer Zahlung ist unbekannt und sie kann bereits on-chain sein; zahlen Sie nicht erneut, bevor Sie die Überweisung geprüft haben (settlement.transaction enthält ihren Hash, wenn der Facilitator ihn geliefert hat). Auf den Schlüsselrouten 503 verification_unavailable: Die Bestätigungsmail konnte nicht gesendet werden (Schlüssel mit Adresse, Beanspruchung, Gerätefreigabe); in einigen Minuten erneut versuchen. Die Route der britischen Institute hat eigene 502- und 503-Codes, auf ihrer Seite

Validierungsfehlercodes

Sie stehen im Body einer 200-Antwort, wenn valid den Wert false hat: Die Anfrage war erfolgreich, die IBAN hat die Prüfung nicht bestanden. POST /v1/iban/validate, jedes Element von POST /v1/iban/batch und die kostenlose Route GET /v1/iban/format verwenden dieselben sechs Codes. Eine Ausnahme auf /v1/iban/format: Eine Länge ausserhalb der Grenzen (weniger als 15 oder mehr als 34 Zeichen ohne Leerzeichen und Bindestriche, oder mehr als 64 wie gesendet) ergibt 400 invalid_iban_length, nicht 200.

CodeBeschreibungBeispielursache
invalid_formatAndere Zeichen als Buchstaben, Ziffern, Leerzeichen und Bindestriche; weniger als 5 Zeichen; oder mehr als 64 Zeichen wie gesendetEin Punkt oder ein Halbgeviertstrich zwischen den Gruppen, typografische Anführungszeichen, ein abgeschnittenes Einfügen
unsupported_countryDie ersten zwei Buchstaben sind keines der 89 IBAN-LänderXX00 0000 0000 0000. Freier Text landet ebenfalls hier: Seine ersten zwei Buchstaben werden als Ländercode gelesen
wrong_lengthDie Länge entspricht nicht der IBAN-Länge dieses LandesCH93 0076 2011 6238 5295 hat 20 Zeichen; eine Schweizer IBAN hat 21
invalid_check_digitsDie Zeichen 3 und 4 sind keine zwei Ziffern, oder sie lauten 00, 01 oder 99 (ISO 13616 erlaubt 02 bis 98)DE00 3704 0044 0532 0130 00
checksum_failedDie MOD-97-Prüfung schlägt fehlEine Ziffer wurde geändert oder zwei Ziffern vertauscht
invalid_bban_structureLänge und MOD-97 stimmen, aber der nationale Teil folgt nicht dem Aufbau, den das Land festlegtEin Buchstabe in einer deutschen Bankleitzahl, mit passend neu berechneten Prüfziffern

Leerzeichen (geschützte eingeschlossen) und ASCII-Bindestriche werden entfernt und Buchstaben unabhängig von Gross- und Kleinschreibung gelesen, bevor eine dieser Prüfungen läuft.

Beispiel: Validierungsfehler

{
  "iban": "CH100023000000001234",
  "valid": false,
  "error": "wrong_length",
  "error_detail": "Expected 21 characters for CH, got 20.",
  "cost_usdc": 0
}

cost_usdc ist 0, wenn ein Schlüssel oder die Kostprobe ohne Schlüssel den Aufruf bedient hat, und der Preis der Route, wenn der Aufruf per x402 bezahlt wurde.

Eine leere oder fehlende IBAN

{"iban": ""} oder ein Body ganz ohne iban ist eine unvollständige Anfrage, keine ungültige IBAN. Mit einem Schlüssel lautet die Antwort 400 invalid_request. Ohne Schlüssel kommt der 402-Zahlungsumschlag, und von der Kostprobe ohne Schlüssel wird nichts verbraucht: Ein leeres {} ist die Sonde, mit der x402-Indexer die Route entdecken.

Anfragefehlercodes

Sie liefern einen anderen Status als 200.

400 Bad Request

CodeRouteBeschreibung
invalid_jsonvalidate, batch, complianceDer Body der Anfrage ist kein gültiges JSON
invalid_requestvalidate, batch, complianceDas Feld iban fehlt, ist leer oder kein String; bei einem Stapel enthält der Body kein Array aus IBAN-Strings (ibans, iban_list oder list)
empty_batchbatchDas Array ibans ist leer
batch_too_largebatchMehr als 100 IBANs in einer Stapelanfrage
invalid_bic_formatGET /v1/bic/{code}Der BIC hat nicht 8 oder 11 alphanumerische Zeichen in der Form nach ISO 9362
placeholder_literalGET /v1/bic/{code}, GET /v1/ch/clearing/{iid}Der Platzhalter des OpenAPI-Dokuments wurde wörtlich gesendet statt eines Werts
invalid_iid_formatGET /v1/ch/clearing/{iid}Die IID ist keine Zahl mit 1 bis 5 Ziffern
missing_ibanGET und POST /v1/iban/formatWeder Parameter iban in der Adresse noch Feld iban im Body
invalid_iban_lengthGET und POST /v1/iban/formatWeniger als 15 oder mehr als 34 Zeichen, sobald Leerzeichen und Bindestriche entfernt sind, oder mehr als 64 Zeichen wie gesendet

Beispiel: Fehlerhafte Anfrage

{
  "error": "batch_too_large",
  "message": "Maximum 100 IBANs per batch request"
}

402 Payment Required

Wird zurückgegeben, wenn eine kostenpflichtige Route ohne brauchbaren Zahlungsweg aufgerufen wird: weder Schlüssel noch verbleibendes Gratiskontingent, ein ungültiger Schlüssel oder einer, dessen Kontingent oder Guthaben verbraucht ist, oder eine gesendete und abgelehnte Zahlung. Der Body ist der x402-Zahlungsumschlag; der Header PAYMENT-SIGNATURE (x402 v2) oder X-PAYMENT (v1) begleicht ihn. Wenn ein genauer Grund zutrifft, trägt der Body zusätzlich cause.reason und eine message, die den Ausweg nennt:

cause.reasonWann
trial_exhaustedDie Kostprobe ohne Schlüssel auf POST /v1/iban/validate ist für diese Adresse in dieser Woche verbraucht; sie kommt am Montag um 00:00 UTC zurück (quota.resets nennt den Zeitpunkt)
trial_unavailableDas Kontingent ohne Schlüssel kann gerade nicht gezählt werden, der Aufruf fällt auf die Zahlung zurück
monthly_quota_exhaustedDas Monatskontingent des Schlüssels ist verbraucht
monthly_quota_insufficientEin Stapel braucht mehr Anfragen, als dem Schlüssel bleiben; nichts wurde verbraucht
credits_exhausted, credits_insufficientDieselben zwei Fälle für das Prepaid-Guthaben des Schlüssels: ein aus einem Kauf entstandener Schlüssel, oder ein Schlüssel, dessen Kontingent verbraucht ist und dessen Guthaben den Aufruf nicht mehr deckt. cause.credits.topup und X-Credits-Topup-Url tragen den Link, der genau diesen Schlüssel auflädt
invalid_api_keyEin Schlüssel wurde gesendet, ist aber unbekannt oder widerrufen
key_revoked_burstEin anonymer Schlüssel, der mit einer Welle automatischer Anmeldungen widerrufen wurde; die message sagt, wie man ihn zurückholt
{
  "x402Version": 2,
  "error": "payment_required",
  "resource": { "url": "https://api.ibanforge.com/v1/iban/validate" },
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "amount": "5000",
      "payTo": "0x...",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
    }
  ]
}

Wurde eine Zahlung gesendet und abgelehnt, trägt der Body zusätzlich payment_error mit dem Grund.

Bei einem gültigen Schlüssel trägt der Body außerdem credit_packs.topup_this_key: die Kartenlinks und die USDC-Route, die den vorgelegten Schlüssel aufladen, damit das Guthaben auf ihm landet und sich an Ihrer Integration nichts ändert, und bei einem Schlüssel ohne Abonnement pro: der Link, der Pro auf genau diesen Schlüssel legt. pay_by_card behält seine Bedeutung: ein ohne Schlüssel gekauftes Paket, geliefert als neuer Schlüssel.

Wie Sie damit umgehen, steht unter x402-Zahlungen; den kostenlosen Schlüssel erklärt API-Schlüssel.

404 Not Found

CodeBeschreibung
not_foundDer angefragte Endpunkt existiert nicht. Der Body listet die wichtigsten Routen mit der Form ihrer Anfrage

Ein unbekannter Code ist kein 404: GET /v1/bic/{code} antwortet mit 200 und found: false, und GET /v1/ch/clearing/{iid} antwortet mit 200, found: false und error: "clearing_not_found".

405 Method Not Allowed

method_not_allowed: Der Pfad existiert, die Methode nicht. Das Feld allow listet die Methoden, die der Pfad annimmt. Der häufige Fall ist GET /v1/keys/generate: Ein Schlüssel wird mit einem POST geholt, und ganz ohne Body verlangt er keine E-Mail.

413 Payload Too Large

payload_too_large: Der Body der Anfrage ist grösser als 256 KB. Die Prüfung läuft vor dem Routing und vor der Zahlung, es wird also nichts berechnet. Ein Stapel von 100 IBANs wiegt etwa 5 KB.

429 Too Many Requests

rate_limit_exceeded: mehr als 100 Anfragen in einer Minute von derselben IP-Adresse. Die Antwort trägt einen Header Retry-After und ein Feld retry_after, beide in Sekunden. Jede gezählte Antwort trägt RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset (Sekunden), dazu die älteren Header X-RateLimit-*, deren Reset ein Unix-Zeitstempel ist. /health, /ping, /openapi.json und /v1/demo werden nicht gezählt. Dasselbe Limit ist unter /.well-known/rate-limits.yml veröffentlicht.

Einen Schlüssel holen und beanspruchen haben eigene Tageslimits mit eigenen 429-Codes: siehe API-Schlüssel. Das Monatskontingent eines Schlüssels ist kein 429: Es endet mit dem 402 oben. Jede Antwort auf einen Monatsschlüssel (kostenlos oder beansprucht) trägt X-Quota-Used, X-Quota-Limit und X-Quota-Remaining (GET /v1/keys/usage liefert denselben Stand); ein Schlüssel mit Prepaid-Guthaben trägt X-Credits-Remaining und X-Credits-Total (GET /v1/credits/balance), und ein Schlüssel mit beidem trägt beide Reihen. Jede abgerechnete Antwort auf einen Schlüssel sagt in X-Charged-From, was sie bezahlt hat: allowance, credits oder allowance+credits für einen zwischen beiden aufgeteilten Batch.

500 Internal Server Error

Wenn Sie einen 500-Fehler erhalten, ist auf unserer Seite etwas Unerwartetes passiert. Der Body ist der reine Text Internal Server Error: Ein 500 hat keinen JSON-Umschlag. Bitte melden Sie ihn mit dem Endpunkt und der Uhrzeit des Aufrufs (UTC).

Fehlerbehebung

„Payment Required" bei jeder Anfrage

  • Ohne Schlüssel hat nur POST /v1/iban/validate eine Kostprobe ohne Schlüssel (25 Aufrufe pro Woche und Quelladresse, Rücksetzung am Montag um 00:00 UTC). Jede andere kostenpflichtige Route braucht einen Schlüssel oder eine Zahlung
  • Lesen Sie cause.reason im Body des 402, wenn es dort steht: Es nennt das verbrauchte Kontingent
  • Für x402: Stellen Sie sicher, dass Sie USDC im Base-Netzwerk haben (nicht im Ethereum-Mainnet), dass der private Wallet-Schlüssel, den Ihr Client liest (zum Beispiel WALLET_PRIVATE_KEY), gesetzt ist und dass Sie ein kompatibles x402-Client-SDK verwenden

„Invalid IBAN format", obwohl die IBAN korrekt aussieht

  • Nur die Buchstaben A-Z, die Ziffern 0-9, Leerzeichen und ASCII-Bindestriche werden angenommen; Punkte, Schrägstriche und typografische Striche werden abgelehnt
  • Achten Sie auf weitere Nicht-ASCII-Zeichen (typografische Anführungszeichen, Leerzeichen ohne Breite)
  • Gross- und Kleinschreibung spielen keine Rolle

„Unsupported country" für ein gültiges Land

  • IBANforge unterstützt die 89 IBAN-Länder. Manche Gebiete verwenden die IBAN eines anderen Landes: Prüfen Sie, welches sie ausgibt
  • Prüfen Sie den zweistelligen Ländercode am Anfang der IBAN

„BIC not found", obwohl der Code existiert

  • Das BIC-Verzeichnis enthält über 121 000 Einträge aus öffentlichen Quellen (GLEIF, nationale Register wie die der Bundesbank, von SIX und der NBP, EBA STEP2 SCT sowie eine öffentliche Kopie des SWIFT-Verzeichnisses, eingefroren im Januar 2018), deckt aber nicht unbedingt jede Filiale ab
  • Versuchen Sie die 8-stellige Version (ohne Filialcode), z. B. UBSWCHZH statt UBSWCHZH80A
  • Einige Finanzinstitute verwenden BIC-Codes, die nicht bei SWIFT oder GLEIF registriert sind

Eine Stapelanfrage wird abgelehnt

  • Über 100 Elemente wird der Stapel als Ganzes mit 400 batch_too_large abgelehnt: Teilen Sie die Liste auf
  • Jedes Element muss ein String sein: Eine Zahl oder ein Objekt macht die ganze Anfrage zu 400 invalid_request
  • Das Ergebnis-Array entspricht immer der Reihenfolge und Anzahl des Eingabe-Arrays

Zeitüberschreitung oder keine Antwort

  • Ein Stapel von bis zu 100 IBANs ist eine einzige Anfrage und wird in einem Stück beantwortet
  • Überprüfen Sie Ihre Netzwerkverbindung und Firewall-Regeln
  • Testen Sie den kostenlosen Endpunkt /health, um zu prüfen, ob der Dienst läuft, und die Statusseite für die aktuelle Verfügbarkeit

Support

  • Schreiben Sie an support@ibanforge.com mit dem Endpunkt, der Uhrzeit des Aufrufs (UTC) und Ihrem key_prefix, nie mit dem Schlüssel selbst
  • Öffentliche Fragen und Fehlerberichte: GitHub Issues
  • Von einem Agenten aus: POST /v1/feedback oder das MCP-Tool send_feedback, kostenlos und ohne Schlüssel
  • Aktuelle Verfügbarkeit: die Statusseite. Ein schriftliches SLA gibt es nur für Editor/OEM-Abonnements: SLA