IBAN API documentation
A freemium REST API for IBAN validation, bank lookups and BIC resolution. Integration takes a few minutes: get a key, call an endpoint, read the response.
Introduction
We offer a freemium REST API for IBAN validation using our database. Integration is straightforward and requires just a few steps: sign up for a free API key, then call an endpoint with the IBAN you want to check.
Authentication
API authentication relies on your API key. It can be passed as a URL parameter, a POST form variable, or included in the Authorization header of your request.
Quickstart
The fastest way to see a real response is curl from a terminal. Replace API_KEY with your own key.
curl "https://api.ibanapi.com/v1/validate/EE471000001020145685?api_key=API_KEY"Need it in a specific language instead? Jump to the code snippets page for PHP, Node, Java, Python, C# and Dart.
API endpoints
GET / POST/validate/{IBAN}
Validates the IBAN and attempts to retrieve bank information if available. Deducts 1 basic credit, plus 1 bank lookup credit when bank details are resolved.
GET / POST/validate-basic/{IBAN}
Checks the IBAN and returns a result without bank details. Costs 1 basic credit only.
POST/bulk-validate
Validates IBANs in bulk from a raw JSON body. The default maximum is 200 IBANs per request, and deductions follow the standard per-IBAN rate.
Request example:
{
"iban_list": [
"AL47212110090000000235698741",
"AD1200012030200359100100"
]
}Response example:
[
{
"result": 200,
"message": "Valid IBAN Number",
"validations": [
{ "result": 200, "message": "Valid IBAN length" },
{ "result": 200, "message": "Valid IBAN Checksum" },
{ "result": 200, "message": "Valid IBAN Structure" }
],
"expremental": 0,
"data": {
"iban": "AL47212110090000000235698741",
"country_code": "AL",
"iso_alpha3": "ALB",
"country_name": "Albania",
"currency_code": "ALL",
"sepa_member": "No",
"sepa": {},
"bban": "212110090000000235698741",
"bank_account": "0000000235698741",
"bank": {
"bank_name": "Credins Bank ",
"phone": "",
"address": "Rr. Ismail Qemali, nr. 21",
"bic": "CDISALTR",
"city": "Tirana",
"state": "",
"zip": "1019"
}
}
},
{
"result": 200,
"message": "Valid IBAN Number",
"validations": [
{ "result": 200, "message": "Valid IBAN length" },
{ "result": 200, "message": "Valid IBAN Checksum" },
{ "result": 200, "message": "Valid IBAN Structure" }
],
"expremental": 0,
"data": {
"iban": "AD1200012030200359100100",
"country_code": "AD",
"iso_alpha3": "AND",
"country_name": "Andorra",
"currency_code": "EUR",
"sepa_member": "Yes",
"sepa": {
"sepa_credit_transfer": "Yes",
"sepa_direct_debit": "Yes",
"sepa_sdd_core": "No",
"sepa_b2b": "No",
"sepa_card_clearing": "No"
},
"bban": "00012030200359100100",
"bank_account": "200359100100",
"bank": {
"bank_name": "ANDORRA BANC AGRICOL REIG S.A.",
"phone": "87 33 33",
"address": "MANUEL CERQUEDA ESCALER 6",
"bic": "BACAADAD",
"city": "ESCALDES-ENGORDANY",
"state": "Escaldes-Engordany",
"zip": "AD700"
}
}
}
]POST/bulk-validate-basic
Same as bulk validation, but deductions come from the basic balance and the response excludes bank details.
/heartbeat
A free service-monitoring endpoint. No balance is deducted, but a valid API key is still required to authenticate the request.
/balance
Returns your current balance and plan expiry status. Free to call, no balance deduction.
Response format
Every endpoint above returns JSON shaped like this successful /validate call.
{
"result": 200,
"message": "Valid IBAN Number",
"validations": [
{
"result": 200,
"message": "Valid IBAN length"
},
{
"result": 200,
"message": "Valid IBAN Checksum"
},
{
"result": 200,
"message": "Valid IBAN Structure"
},
{
"result": 200,
"message": "Valid Account Number Checksum"
}
],
"expremental": 0,
"data": {
"country_code": "EE",
"iso_alpha3": "EST",
"country_name": "Estonia",
"currency_code": "EUR",
"sepa_member": "Yes",
"sepa": {
"sepa_credit_transfer": "Yes",
"sepa_credit_transfer_inst": "No",
"sepa_direct_debit": "No",
"sepa_sdd_core": "No",
"sepa_b2b": "No",
"sepa_card_clearing": "No"
},
"bban": "1000001020145685",
"bank_account": "00102014568",
"bank": {
"bank_name": "AS SEB PANK",
"phone": "6 655 100",
"address": "Tornimäe tn 2 FLOOR 10",
"bic": "EEUHEE2X",
"city": "TALLINN",
"state": "",
"zip": "15010"
}
}
}account_checksum=No.The response object always contains four top-level fields:
result: integer,200on success.message: a human-readable string.validations: an object listing each individual check that ran.expremental:0or1, depending on the country's IBAN status.data: an object containing, among other fields, nestedsepaandbankobjects.
The sepa object holds more detail only when the bank is a SEPA member.
Error responses
Errors return an HTTP status matching the result field. Here is an invalid API key, as an example.
{
"result": 401,
"message": "Invalid API Key",
"data": {}
}Client-side integration (JSONP)
For client-side applications, including those built with Angular, Vue or React, JSONP integration lets you call the API directly without cross-origin errors. Here it is with jQuery.
$.ajax({
url: "https://api.ibanapi.com/v1/balance?api_key=API_KEY",
dataType: 'jsonp',
success: function (data) {
console.log(data)
}
});Or use our vanilla JavaScript library with no extra dependency, available from client libraries below, or via CDN:
https://cdn.jsdelivr.net/gh/ibanapi/[email protected]/dist/ibanapi.min.jsClient libraries
Official client libraries and collections for the languages and tools below.
Explore & test
Fork the Postman collection to try every endpoint with your own key, or browse the interactive OpenAPI/Swagger docs.
Postman collection and documentation
NodeJS package
JavaScript JSONP package