Aller au contenu
IBANforge
API REST · JSON · MCP

API de validation IBAN

Un seul POST contrôle un IBAN comme un paiement en a besoin : la clé de contrôle et la structure du pays, puis la banque qui se trouve derrière, lue dans le registre national avec sa source et sa date.

  • 89 pays IBAN
  • Banque et BIC avec leur source
  • Premiers appels sans clé
Essayer dans le bac à sable
Lire la documentation

Ce qu'un appel vérifie

POST /v1/iban/validate répond par un seul objet JSON. Chaque contrôle a son propre champ : votre code lit exactement ce qui a été vérifié, et ce qui ne l'a pas été.

Clé de contrôle

checks.iban_checksum

Le contrôle modulo 97 de la norme ISO 13616 sur les deux chiffres qui suivent le code pays. Un seul caractère mal saisi le fait échouer.

Structure par pays

checks.iban_structure

La longueur et le découpage de la partie compte, pour chacun des 89 pays du registre IBAN. Un IBAN invalide n'est pas une erreur HTTP : la réponse est un 200 avec valid: false et la raison.

Clés nationales

checks.national_check_digits

Là où un pays place sa propre clé dans le numéro de compte : France et Monaco (clé RIB), Belgique, Italie et Saint-Marin (CIN), Espagne (DC) et Royaume-Uni (modulus check). Une clé fausse apparaît dans ce champ et ne rend jamais valid faux. En Pologne, le chiffre de contrôle du numéro de règlement accompagne le code banque, dans bank_code_check.check_digit.

La banque et son BIC

bank_code_check · bic.source · as_of

Le code banque est cherché dans le registre national là où nous le lisons en entier : Allemagne, Autriche, Belgique, Slovaquie, République tchèque, Bulgarie, Suisse et Liechtenstein. Là, un code que le registre ne contient pas revient not_allocated. Ailleurs, un registre partiel ou une table composite nomme la banque, et la réponse précise qu'elle ne peut pas exclure un code. Le registre et la date de son édition accompagnent la réponse.

SEPA et vérification du bénéficiaire

sepa · risk_indicators.vop_coverage

Les schémas SEPA qui atteignent la banque (virement, virement instantané, prélèvement), tirés des registres de l'EPC quand ils la listent et du pays sinon, avec la base indiquée. Et si le registre EPC de la vérification du bénéficiaire (VoP) liste la banque comme prête.

Criblage de la banque, sur demande

POST /v1/iban/compliance

Un appel séparé confronte la banque du bénéficiaire (BIC8) aux listes OFAC, UE et ONU, contrôle le pays auprès du GAFI et d'une liste fixe de juridictions sanctionnées, et rend un score de risque de 0 à 100. Il est indicatif et ne crible jamais le nom du bénéficiaire.

Ce qu'elle ne vous dit pas

  • Si le compte existe ou s'il est ouvert. Aucun registre ne le publie : seule la banque du bénéficiaire le sait.
  • Au nom de qui est le compte. Ce contrôle, c'est la vérification du bénéficiaire, faite par sa banque ; l'API dit seulement si cette banque est listée comme prête.
  • Si le bénéficiaire est sanctionné. Le criblage optionnel porte sur la banque et le pays, pas sur la personne ou l'entreprise que vous payez.
  • Les méthodes allemandes de contrôle du numéro de compte et les clés nationales des pays qui ne sont pas cités plus haut : elles ne sont pas encore contrôlées.
Chaque registre, sa licence et la date de l'édition que nous lisons

Votre premier appel

Copiez l'un de ces blocs tel quel. L'IBAN est l'exemple du bac à sable : un IBAN suisse valide qui mène à une vraie banque.

L'essai sans clé sert 25 validations par semaine sur POST /v1/iban/validate, comptées pour l'adresse d'où vient l'appel, semaine ISO en UTC, remise à zéro le lundi à 00:00 UTC.

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

La réponse, telle que l'API l'a rendue

Extrait de la réponse de l'API pour cet IBAN, le 25 septembre 2026 : les champs qui disent ce qui a été contrôlé, et dans quel registre. La réponse complète porte aussi l'émetteur, les données de clearing suisses, les indicateurs de risque et l'étape suivante conseillée. Appelée sans clé, elle porte aussi un bloc trial qui indique combien d'appels restent cette semaine et quand le compteur repart.

json
{
  "iban": "CH1000230000000012345",
  "valid": true,
  "checks": {
    "iban_structure": "pass",
    "iban_checksum": "pass",
    "bank_code": "pass",
    "bic": "pass",
    "national_check_digits": "not_checked",
    "account_exists": "not_checked",
    "payee_name": "not_checked",
    "institution_sanctions": "not_checked",
    "country_sanctions": "not_checked",
    "payee_sanctions": "not_checked"
  },
  "country": {
    "code": "CH",
    "name": "Switzerland"
  },
  "bic": {
    "code": "UBSWCHZH80A",
    "bank_name": "UBS Switzerland AG",
    "city": "Zürich",
    "source": "SIX BankMaster (Swiss IID / BC-Nummer register)",
    "as_of": "2026-09",
    "basis": "national_register",
    "authoritative": true
  },
  "bank_code_check": {
    "value": "00230",
    "status": "verified",
    "register": "SIX BankMaster (Swiss IID / BC-Nummer register)",
    "authoritative": true,
    "as_of": "2026-09"
  },
  "sepa": {
    "member": true,
    "schemes": [
      "SCT",
      "SDD"
    ],
    "vop_required": false
  }
}

Au-delà de l'essai sans clé, envoyez la même requête avec l'en-tête Authorization: Bearer ifk_… et votre clé.

Pourquoi le modulo 97 ne suffit pas

L'exemple suisse officiel du registre IBAN, CH93 0076 2011 6238 5295 7, a une clé de contrôle juste. Son code banque n'est attribué à personne dans le SIX BankMaster, et l'API le dit :

json
{
  "iban": "CH9300762011623852957",
  "valid": true,
  "bank_code_check": {
    "value": "00762",
    "status": "not_in_register",
    "reason": "not_allocated",
    "match": null,
    "register": "SIX BankMaster (Swiss IID / BC-Nummer register)",
    "authoritative": true,
    "as_of": "2026-09"
  }
}

Réponse de l'API pour cet IBAN, exportée le 29 septembre 2026.

Commencer gratuitement, puis payer à l'usage

Trois entrées gratuites, chacune avec son propre quota. Aucune ne demande de carte.

Sans clé

L'essai sans clé

25 validations par semaine sur POST /v1/iban/validate, pour l'adresse d'où vient l'appel, à titre d'essai. Remise à zéro le lundi à 00:00 UTC.

Clé, sans e-mail

Une clé en un clic

25 requêtes par mois, sur tous les endpoints. Un POST vide vers /v1/keys/generate, ou le bouton ci-dessous : sans e-mail, sans carte.

Clé, avec une adresse

200 requêtes par mois

Réclamez la même clé avec un code à six chiffres envoyé à une adresse que vous lisez, ou donnez l'adresse en la créant. Même clé, même préfixe, sans carte.

Quand il en faut davantage

  • Pro : 29 $ par mois pour 10 000 requêtes, remise à zéro le 1er, résiliable à tout moment.
  • Packs de crédits qui n'expirent jamais, par carte ou en USDC : 1 000 crédits pour 4 $, 5 000 pour 20 $, 25 000 pour 80 $.
  • x402 : paiement à l'appel en USDC sur Base, sans aucun compte, 0,005 $ par validation et 0,002 $ par IBAN dans un lot.
Tous les tarifs et le calculateur de coût

Tout ce qui entoure l'API

Essayez-la sur vos propres IBAN

Le bac à sable appelle la vraie API. Quand vous êtes prêt, prenez une clé : sans e-mail, sans carte.

Essayer dans le bac à sable