A failed SEPA transfer is expensive in every way that matters: the bank charges you an R-transaction fee, the supplier chases you for a payment you thought you sent, and someone on your team spends an afternoon reconciling it. Almost every one of these failures starts the same way — a typo in an IBAN that nobody caught at the point of entry.
This API catches it in one GET request. Send an IBAN to /validate and you get back a full verdict: MOD-97 checksum, country-specific length, and the national BBAN structure for 77 countries from the official SWIFT registry. If it's valid, the response breaks the IBAN into the parts your payment flow actually needs — country, check digits, bank code, branch/sort code, account number, and the BIC/SWIFT code where it can be derived. If it's invalid, you get human-readable reasons (checksum failed, wrong length for DE), not just false.
Common uses:
- Validate IBANs on checkout, invoicing, and payroll forms before submission
- Auto-fill bank name and BIC from the IBAN to cut form friction
- Bulk-clean supplier and customer master data with
/validate-batch - Show country-specific format hints and sample IBANs via
/country/{code}
Pure computation on bundled data — no third-party calls, so bank details never leave the request.
- Subscribe (free tier available) on RapidAPI and copy your
X-RapidAPI-Key. - Call the API — here's the primary endpoint in every major language.
Base URL:
https://iban-validator-bank-account-checker.p.rapidapi.com
curl --request GET \
--url 'https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: iban-validator-bank-account-checker.p.rapidapi.com'import requests
url = "https://iban-validator-bank-account-checker.p.rapidapi.com/validate"
querystring = {"iban": "DE89370400440532013000"}
headers = {
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
"X-RapidAPI-Host": "iban-validator-bank-account-checker.p.rapidapi.com",
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())const url = 'https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000';
const options = {
method: 'GET',
headers: {
'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY',
'X-RapidAPI-Host': 'iban-validator-bank-account-checker.p.rapidapi.com',
},
};
const response = await fetch(url, options);
console.log(await response.json());import axios from 'axios';
const options = {
method: 'GET',
url: 'https://iban-validator-bank-account-checker.p.rapidapi.com/validate',
params: {iban: 'DE89370400440532013000'},
headers: {
'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY',
'X-RapidAPI-Host': 'iban-validator-bank-account-checker.p.rapidapi.com',
},
};
const { data } = await axios.request(options);
console.log(data);const url = 'https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000';
const response = await fetch(url, {
method: 'GET',
headers: {
'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY',
'X-RapidAPI-Host': 'iban-validator-bank-account-checker.p.rapidapi.com',
} as Record<string, string>,
});
const data: unknown = await response.json();
console.log(data);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-RapidAPI-Key: YOUR_RAPIDAPI_KEY",
"X-RapidAPI-Host: iban-validator-bank-account-checker.p.rapidapi.com",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;require 'uri'
require 'net/http'
url = URI("https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-RapidAPI-Key"] = 'YOUR_RAPIDAPI_KEY'
request["X-RapidAPI-Host"] = 'iban-validator-bank-account-checker.p.rapidapi.com'
response = http.request(request)
puts response.read_bodyOkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000")
.get()
.addHeader("X-RapidAPI-Key", "YOUR_RAPIDAPI_KEY")
.addHeader("X-RapidAPI-Host", "iban-validator-bank-account-checker.p.rapidapi.com")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());using var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000"),
Headers =
{
{ "X-RapidAPI-Key", "YOUR_RAPIDAPI_KEY" },
{ "X-RapidAPI-Host", "iban-validator-bank-account-checker.p.rapidapi.com" },
},
};
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000", nil)
req.Header.Add("X-RapidAPI-Key", "YOUR_RAPIDAPI_KEY")
req.Header.Add("X-RapidAPI-Host", "iban-validator-bank-account-checker.p.rapidapi.com")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}use reqwest::header::{HeaderMap, HeaderValue};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut headers = HeaderMap::new();
headers.insert("X-RapidAPI-Key", HeaderValue::from_static("YOUR_RAPIDAPI_KEY"));
headers.insert("X-RapidAPI-Host", HeaderValue::from_static("iban-validator-bank-account-checker.p.rapidapi.com"));
let client = reqwest::Client::new();
let res = client.get("https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000").headers(headers).send().await?;
println!("{}", res.text().await?);
Ok(())
}import Foundation
var request = URLRequest(url: URL(string: "https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000")!)
request.httpMethod = "GET"
request.setValue("YOUR_RAPIDAPI_KEY", forHTTPHeaderField: "X-RapidAPI-Key")
request.setValue("iban-validator-bank-account-checker.p.rapidapi.com", forHTTPHeaderField: "X-RapidAPI-Host")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)val client = OkHttpClient()
val request = Request.Builder()
.url("https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000")
.get()
.addHeader("X-RapidAPI-Key", "YOUR_RAPIDAPI_KEY")
.addHeader("X-RapidAPI-Host", "iban-validator-bank-account-checker.p.rapidapi.com")
.build()
val response = client.newCall(request).execute()
println(response.body?.string())wget -qO- \
--header='X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header='X-RapidAPI-Host: iban-validator-bank-account-checker.p.rapidapi.com' \
'https://iban-validator-bank-account-checker.p.rapidapi.com/validate?iban=DE89370400440532013000'| Method | Path | Description |
|---|---|---|
GET |
/validate |
Validate an IBAN and extract country, bank code, branch and BIC |
POST |
/validate-batch |
Validate up to 100 IBANs in one request |
GET |
/countries |
List all 77 supported countries and their IBAN lengths |
GET |
/country/{code} |
IBAN format details and a sample IBAN for one country |
GET |
/bic |
Look up a BIC/SWIFT code from an IBAN or a national bank code |
Read the full guide: How to validate IBANs in your checkout or payroll form (and stop failed SEPA transfers)
⭐ Powered by the IBAN Validator & Bank Account Checker API on RapidAPI.