IBANforge

Validation par lot

Validez jusqu'a 100 IBAN en un seul appel API. Chaque IBAN est traite independamment — un IBAN invalide n'affecte pas les autres. 60 % moins cher que les appels individuels.

Endpoint

POST https://api.ibanforge.com/v1/iban/batch

Cout : $0.002 USDC par IBAN via x402 (ex. : 10 IBAN = $0.020, 100 IBAN = $0.200). Avec une cle API, un lot debite 1 requete / 1 credit prepaye par IBAN — offre gratuite et packs de credits inclus. Si le lot depasse votre solde restant, l'API le refuse en tout-ou-rien avec un 402 qui nomme le manque (en-tetes X-Credits-Required / X-Quota-Required) ; rien n'est consomme.

Requete

En-tetes

En-teteValeurRequis
Content-Typeapplication/jsonOui
AuthorizationBearer ifk_... (clé API gratuite)L'un des deux
X-PAYMENTToken de paiement x402L'un des deux

Corps

{
  "ibans": [
    "CH10 0023 0000 0000 1234 5",
    "DE89 3704 0044 0532 0130 00",
    "INVALID123"
  ]
}
ChampTypeDescription
ibansstring[]Tableau d'IBAN a valider. De 1 a 100 elements.

Reponse

Succes (200)

{
  "results": [
    {
      "iban": "CH1000230000000012345",
      "valid": true,
      "country": { "code": "CH", "name": "Switzerland" },
      "check_digits": "10",
      "bban": { "bank_code": "00230", "account_number": "000000012345" },
      "bic": { "code": "UBSWCHZH", "bank_name": "UBS Switzerland AG", "city": "Zürich" },
      "sepa": { "member": true, "schemes": ["SCT", "SDD"], "vop_required": false },
      "issuer": { "type": "bank", "name": "UBS Switzerland AG" },
      "risk_indicators": {
        "issuer_type": "bank",
        "country_risk": "standard",
        "test_bic": false,
        "sepa_reachable": true,
        "vop_coverage": false
      },
      "clearing": {
        "iid": "00230",
        "name": "UBS Switzerland AG",
        "type": "bank",
        "town": "Zürich",
        "sic": true,
        "instant_payments_chf": true,
        "eurosic": true,
        "qr_iid": null
      },
      "formatted": "CH10 0023 0000 0000 1234 5",
      "cost_usdc": 0.002
    },
    {
      "iban": "DE89370400440532013000",
      "valid": true,
      "country": { "code": "DE", "name": "Germany" },
      "check_digits": "89",
      "bban": { "bank_code": "37040044", "account_number": "0532013000" },
      "bic": { "code": "COBADEFFXXX", "bank_name": "Commerzbank", "city": "Köln" },
      "sepa": { "member": true, "schemes": ["SCT", "SDD", "SCT_INST"], "vop_required": true },
      "issuer": { "type": "bank", "name": "Commerzbank" },
      "risk_indicators": {
        "issuer_type": "bank",
        "country_risk": "standard",
        "test_bic": false,
        "sepa_reachable": true,
        "vop_coverage": true
      },
      "formatted": "DE89 3704 0044 0532 0130 00",
      "cost_usdc": 0.002
    },
    {
      "iban": "INVALID123",
      "valid": false,
      "error": "unsupported_country",
      "error_detail": "Country code 'IN' is not a recognized IBAN country.",
      "cost_usdc": 0.002
    }
  ],
  "count": 3,
  "valid_count": 2,
  "cost_usdc": 0.006,
  "processing_ms": 1.05
}

Champs de la reponse

Premier niveau :

ChampTypeDescription
resultsarrayTableau des resultats de validation, dans le meme ordre que l'entree
countnumberNombre total d'IBAN traites
valid_countnumberNombre d'IBAN valides
cost_usdcnumberCout total de ce lot
processing_msnumberTemps total de traitement

Chaque element de results possede la meme structure que la reponse de validation unitaire, incluant sepa, issuer et risk_indicators pour les IBAN valides.

Erreurs

StatutCodeDescription
400empty_batchLe tableau ibans est vide
400batch_too_largePlus de 100 IBAN soumis
400invalid_requestLe corps de la requete n'est pas un JSON valide ou le champ ibans est manquant

Exemples de code

cURL

curl -X POST https://api.ibanforge.com/v1/iban/batch \
  -H "Content-Type: application/json" \
  -d '{
    "ibans": [
      "CH1000230000000012345",
      "DE89370400440532013000",
      "FR7630006000011234567890189"
    ]
  }'

Python

import requests
 
response = requests.post(
    "https://api.ibanforge.com/v1/iban/batch",
    json={
        "ibans": [
            "CH1000230000000012345",
            "DE89370400440532013000",
            "FR7630006000011234567890189",
        ]
    },
)
 
data = response.json()
print(f"Valid: {data['valid_count']}/{data['count']}")
 
for result in data["results"]:
    if result["valid"]:
        risk = result["risk_indicators"]["country_risk"]
        issuer = result["issuer"]["type"]
        print(f"  {result['iban']}{result['country']['name']} ({issuer}, risk: {risk})")
    else:
        print(f"  INVALID — {result['error_detail']}")

TypeScript

const response = await fetch(
  "https://api.ibanforge.com/v1/iban/batch",
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      ibans: [
        "CH1000230000000012345",
        "DE89370400440532013000",
        "FR7630006000011234567890189",
      ],
    }),
  }
);
 
const data = await response.json();
console.log(`Valid: ${data.valid_count}/${data.count}`);
 
for (const result of data.results) {
  if (result.valid) {
    console.log(`  ${result.iban} — ${result.issuer.type}, risk: ${result.risk_indicators.country_risk}`);
  } else {
    console.log(`  INVALID — ${result.error_detail}`);
  }
}