Developer docs

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.

Create a free account to get an API key and start making requests.

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
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:

Bulk request
{
  "iban_list": [
      "AL47212110090000000235698741",
      "AD1200012030200359100100"
  ]
}

Response example:

Bulk response
[
  {
      "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.

Success response
{
    "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"
      }
    }
}
The API's default behavior includes validation of the country's national checksum. Disable it by passing account_checksum=No.

The response object always contains four top-level fields:

  • result: integer, 200 on success.
  • message: a human-readable string.
  • validations: an object listing each individual check that ran.
  • expremental: 0 or 1, depending on the country's IBAN status.
  • data: an object containing, among other fields, nested sepa and bank objects.

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.

Error response
{
  "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.

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:

CDN
https://cdn.jsdelivr.net/gh/ibanapi/[email protected]/dist/ibanapi.min.js

Client 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.

Open the OpenAPI/Swagger documentation →