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-tete | Valeur | Requis |
|---|---|---|
Content-Type | application/json | Oui |
Authorization | Bearer ifk_... (clé API gratuite) | L'un des deux |
X-PAYMENT | Token de paiement x402 | L'un des deux |
Corps
{
"ibans": [
"CH10 0023 0000 0000 1234 5",
"DE89 3704 0044 0532 0130 00",
"INVALID123"
]
}| Champ | Type | Description |
|---|---|---|
ibans | string[] | 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 :
| Champ | Type | Description |
|---|---|---|
results | array | Tableau des resultats de validation, dans le meme ordre que l'entree |
count | number | Nombre total d'IBAN traites |
valid_count | number | Nombre d'IBAN valides |
cost_usdc | number | Cout total de ce lot |
processing_ms | number | Temps 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
| Statut | Code | Description |
|---|---|---|
| 400 | empty_batch | Le tableau ibans est vide |
| 400 | batch_too_large | Plus de 100 IBAN soumis |
| 400 | invalid_request | Le 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}`);
}
}