Validate a European IBAN and enrich it with bank, compliance and routing data
Validate a European IBAN and enrich it with bank, compliance and routing data. Use whenever the user mentions an IBAN, a bank account, a SEPA payment or asks who the bank is. Returns: valid, country, BIC/SWIFT, bank name, EMI/vIBAN flag, SEPA + VoP reachability, risk score, Swiss bc_nummer for CH/LI. Production · server processing <5ms (network excluded — measure your own round trip on GET /ping) · 121,000+ BICs (39,000+ LEI via GLEIF) + 1,100+ SIX · v1.5.0.
5000 (raw units)
price
2
calls / 30d
1
unique payers
2026-09-06
updated
Provider
api.ibanforge.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xD13bD0A4120BA301125290e5cc0c7EFD4CB40a55",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "5000",
"maxTimeoutSeconds": 60
}
]Output schema
{
"bazaar": {
"bodyType": "json",
"discoverable": true,
"info": {
"input": {
"body": {
"iban": "CH1000230000000012345"
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"schema": {
"properties": {
"iban": {
"description": "IBAN to validate (spaces and lowercase accepted).",
"maxLength": 34,
"minLength": 15,
"type": "string"
}
},
"required": [
"iban"
],
"type": "object"
},
"type": "http"
},
"output": {
"example": {
"_example_notice": "ILLUSTRATIVE SAMPLE — these are demo values for a fixed record, NOT the data for the resource you requested. Do not report them to a user. Authenticate (Authorization: Bearer ifk_...) or pay via x402 to get the real response.",
"bank_code_check": {
"as_of": "2026-07",
"authoritative": true,
"match": "register",
"register": "SIX BankMaster (Swiss IID / BC-Nummer register)",
"status": "verified",
"value": "00230"
},
"bban": {
"account_number": "000000012345",
"bank_code": "00230"
},
"bic": {
"bank_name": "UBS Switzerland AG",
"city": "Zürich",
"code": "UBSWCHZH"
},
"check_digits": "10",
"clearing": {
"eurosic": true,
"iid": "00230",
"instant_payments_chf": true,
"name": "UBS Switzerland AG",
"qr_iid": null,
"sic": true,
"town": "Zürich",
"type": "bank"
},
"cost_usdc": 0.005,
"country": {
"code": "CH",
"name": "Switzerland"
},
"formatted": "CH10 0023 0000 0000 1234 5",
"iban": "CH1000230000000012345",
"issuer": {
"classification": "default",
"name": "UBS Switzerland AG",
"type": "bank"
},
"risk_indicators": {
"country_risk": "standard",
"issuer_type": "bank",
"sepa_reachable": true,
"sepa_reachable_scope": "country",
"test_bic": false,
"vop_coverage": false
},
"sepa": {
"member": true,
"schemes": [
"SCT",
"SDD"
],
"vop_required": false
},
"valid": true
},
"type": "json"
}
},
"inputSchema": {
"properties": {
"iban": {
"description": "IBAN to validate. Spaces and lowercase accepted. Example: CH1000230000000012345",
"maxLength": 34,
"minLength": 15,
"type": "string"
}
},
"required": [
"iban"
],
"type": "object"
},
"schema": {
"properties": {
"input": {
"properties": {
"method": {
"enum": [
"POST"
],
"type": "string"
}
},
"required": [
"method"
]
}
}
}
}
}Use it
curl
curl "https://api.ibanforge.com/v1/iban/validate" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://api.ibanforge.com/v1/iban/validate");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://api.ibanforge.com/v1/iban/validate")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/13801.json, and this resource appears in /discovery/resources and /discovery/search.