Bank Suite API

Part of the Bank Suite service: bank code and account number validation for countries that do not use the IBAN, backed by a bank directory of 195 countries that is updated monthly. One request validates a domestic bank code (routing number, sort code, BLZ, IFSC…) and returns the institution and branch behind it with BIC, LEI, address and SWIFT connectivity; an account number can be checked in the same call against the country’s format and check digit. Two more endpoints find the bank code that belongs to a BIC and describe the bank code and account formats of each country.

Endpoints

Validate a bank code, optionally with an account number:

POSThttps://api.iban.com/clients/api/banksuite/nid/
GEThttps://api.iban.com/clients/api/banksuite/nid/?api_key=YOUR_API_KEY&format=json&country_iso=US&nid=322271627

Find the bank code and record behind a BIC:

POSThttps://api.iban.com/clients/api/banksuite/bic/
GEThttps://api.iban.com/clients/api/banksuite/bic/?api_key=YOUR_API_KEY&format=json&bic=BARCGB22XXX

Bank code and account number formats of a country:

POSThttps://api.iban.com/clients/api/banksuite/structure/
GEThttps://api.iban.com/clients/api/banksuite/structure/?api_key=YOUR_API_KEY&format=json&country_iso=GB
  • HTTPS only. POST bodies are application/x-www-form-urlencoded; GET takes the same parameters in the query string. Both methods return the same response.
  • The HTTP status is 200 for every processed request, whether the bank code or account is valid or not; the outcome is in the body. 400 for a request error (306, 307) and for the structure endpoint’s country errors (802, 400). 403 for an account error (301–305) on the bank code and BIC endpoints, 401 for the same on the structure endpoint. 429 when the rate limit is exceeded (HTML page). 500 with an empty body for a malformed parameter and for a missing bic.
  • Error responses keep the normal structure (JSON and XML); only the bank code endpoint’s request errors and the structure endpoint answer with HTTP 400. Two exceptions return HTTP 200 with an empty body: format in upper case, and the structure endpoint without country_iso.
  • Responses are UTF-8; Content-Type is application/json or application/xml. Directory text is upper case as registered.
  • Typical response time is about 0.1 s for all three endpoints; 0.2 s for 100 records.
  • Submitted bank codes and account numbers and the responses to them are not stored on our servers.
Your first request
  1. Copy your key from API Access.
  2. Run, with the key in place of YOUR_API_KEY:
curl "https://api.iban.com/clients/api/banksuite/nid/" -d api_key=YOUR_API_KEY -d format=json -d country_iso=US -d nid=322271627

The full response to this request is in the Response section; the same request in six more languages is under Example request.

Keeping the key safe
  • Use POST in production. With GET the key is part of the URL and ends up in proxy, load-balancer and web-server access logs; with POST it travels in the request body.
  • Call the API from your server. A key embedded in browser JavaScript or a mobile app can be read from the source or the network traffic.
  • Restrict the key to the IP addresses of your servers under Settings; requests from anywhere else are refused.
  • Keep the key out of source control; load it from an environment variable or a configuration file. A key cannot be regenerated from the client area: if it is exposed, contact support to have it replaced.

Request parameters

All three endpoints take the key and the format; each has its own input. Parameters an endpoint does not know are ignored, and iso is not an alias of country_iso.

ParameterRequiredValueDescription
api_keyyesstringYour personal key, shown under API Access. Missing: result code 306 (HTTP 400); wrong: 301 (HTTP 403 on the bank code and BIC endpoints, HTTP 401 on the structure endpoint).
formatyesjson or xmlResponse format, lower case. Missing: 306 (HTTP 400). JSON or XML in upper case: HTTP 200 with an empty body; check for an empty body before parsing.
Bank code endpoint
ParameterRequiredValueDescription
country_isoyesstring, 2 lettersISO 3166-1 alpha-2 code of the country, upper case: us is refused with 802, as is anything that is not two letters; a two-letter code outside the supported list gives 803. Missing: 306.
nidyesstringThe national bank code (NID): routing number, sort code, BLZ, clearing number, IFSC… in the exact length and form the country uses; the structure endpoint gives the format and an example for every country. The value is not cleaned: spaces, hyphens or missing leading zeros change the length and give 804 (20-04-15, 062-000 and 230 for 00230 all fail). Letters are accepted where the format has them (Indian IFSC, Dutch bank codes) and matched case-insensitively; a letter inside a numeric code is not reported as 801 but ends as 400, not found. Where a country has several code formats, the directory lookup uses the main one: a 3-digit Canadian bank number or a 4-digit Japanese bank code is found, the US CHIPS ID and CHIPS UID pass the length check but are answered with 400. Missing: 306.
accountnostringThe domestic account number, checked against the country’s account format: characters and length as given by the structure endpoint (811 when the length is wrong) and the national check digit where the format has one (813). Send it in the full domestic form: for France the complete 23-character RIB, for Spain the 20-digit CCC, for Germany the 10-digit account with its leading zeros (532013000 is 811, 0532013000 is valid). Not sent: account_valid is an empty string.
limitnointegerNumber of directory records to return when the bank code has several (branches sharing a routing number, for instance). Default 1. A value that is not a positive integer (0, abc) is refused with 307 (HTTP 400), and so is a large one: 100 was accepted and returned 100 records, 1000 was refused. Records beyond the accepted maximum cannot be paged.
BIC endpoint
ParameterRequiredValueDescription
bicyesstring, 8 or 11 charactersThe BIC to look up, in any case. Characters other than letters and digits: 807. Any other length: 808. Not in the directory: result code 400. An 8-character BIC returns its head-office record (XXX). Missing: HTTP 500 with an empty body, not 306.
limitnointegerAccepted but a BIC identifies one record, so one record is returned. A value that is not a positive integer is refused with 806 (HTTP 400) in a reduced body of success and error only.
Structure endpoint
ParameterRequiredValueDescription
country_isoyesstring, 2 lettersISO 3166-1 alpha-2 code, upper or lower case (unlike the bank code endpoint). Not two letters: 802 (HTTP 400). Two letters without an entry: 400 "ISO Country Code not found in registry" (HTTP 400). Missing: HTTP 200 with an empty body.

Example request

Every example validates the same bank code: US routing number 322271627 (JPMorgan Chase, the example from the previous documentation); its response is shown in the next section. Replace YOUR_API_KEY with the key from API Access.

curl "https://api.iban.com/clients/api/banksuite/nid/" \
  -d api_key=YOUR_API_KEY \
  -d format=json \
  -d country_iso=US \
  -d nid=322271627

The other two endpoints take the same form:

curl "https://api.iban.com/clients/api/banksuite/bic/" \
  -d api_key=YOUR_API_KEY \
  -d format=json \
  -d bic=BARCGB22XXX
curl "https://api.iban.com/clients/api/banksuite/structure/" \
  -d api_key=YOUR_API_KEY \
  -d format=json \
  -d country_iso=GB

Response

A bank code response has query, success, account_valid, nid_valid, records_found, records_displayed, directory_results and, when something failed, error. JSON and XML list them in a different order (XML puts the two counts, records_displayed then records_found, before the two flags), so address them by name. The response to the example request:

{
   "query": {
      "country_iso": "US",
      "nid": "322271627",
      "account": ""
   },
   "success": true,
   "account_valid": "",
   "nid_valid": true,
   "records_found": 840,
   "records_displayed": 1,
   "directory_results": [
      {
         "office_type": "DB",
         "legal_type": "B",
         "institution_status": "BANK",
         "iso_lei_code": "7H6GLXDRUGQFU57RNE97",
         "bic8": "CHASUS33",
         "branch_bic": "XXX",
         "bic": "CHASUS33XXX",
         "chips_uid": "0002",
         "national_id": "322271627",
         "connected_bic": "CHASUS33XXX",
         "institution_name": "JPMORGAN CHASE BANK, NATIONAL ASSOCIATION",
         "branch_information": "WEST COVINA",
         "pob_number": "",
         "street_address_1": "100 S VINCENT AVE",
         "street_address_2": "",
         "street_address_3": "",
         "street_address_4": "",
         "city": "WEST COVINA",
         "cps": "CA",
         "zip_code": "91790",
         "country_name": "UNITED STATES OF AMERICA",
         "iso_country_code": "US",
         "subtype_indicator": "SUPE",
         "network_connectivity": "CCC",
         "service_codes": "FWRFAC"
      }
   ]
}
FieldTypeDescription
queryobjectcountry_iso, nid and account exactly as received (no case conversion); account is an empty string when it was not sent. All three are empty in the answer to a request or account error.
successbooleantrue when the request was processed, including when the bank code or account failed validation; false for request errors (306, 307) and account errors (301–305). In XML 1 / 0.
account_validboolean or ""true when the account passed the format check and, where the country has one, the check digit; false with a code 811–814 in error; an empty string when no account was sent. It is computed even when the bank code failed (recorded with 400 and 804). In XML empty, 1 or 0.
nid_validboolean or ""true when the bank code has the right form and exists in the directory; false with a code 801–805 or 400; an empty string in the answer to a request error.
records_foundinteger or ""Number of directory records with this bank code (a routing number shared by branches: 840 for 322271627, 462 for 021000021). An empty string when the bank code failed. Compare as a number only when nid_valid is true.
records_displayedinteger or ""Number of records in directory_results: 1 by default, up to limit. An empty string when the bank code failed.
directory_resultsarrayThe records, 25 fields each (next table). Empty when the bank code failed.
errorobjectPresent in JSON only when something failed: code (a string of three digits) and message. A fully valid answer has no error member. In XML the element is always there, empty on success. A failed account check still returns the directory record together with the error.
directory_results

One object per record, 25 fields, all strings; a field without a value is an empty string (an empty element in XML). The values of the coded fields are listed under Field values.

FieldDescription
office_typeType of office: HO head office, DB domestic branch or department, SB sub-domestic branch, FB foreign branch, SF sub-foreign branch, UC unclassified. Recorded: HO, DB.
legal_typeL legal entity, B business entity (branch or department of a legal entity), U unknown.
institution_statusType of institution, four letters: BANK, COOP, CBMA, ASSM, CORP, CRUN, ICSD, INVM, MONX, NPAA, PYMI, SLBH, SUFI, XCHG, OTHR; see Field values.
iso_lei_codeLegal Entity Identifier (ISO 17442, 20 characters) of the institution; empty when it has none.
bic8First eight characters of the BIC: institution, country and location.
branch_bicBranch code of the BIC; XXX for the head office record.
bicThe 11-character BIC of the record.
chips_uidCHIPS Universal Identifier of the institution (US dollar clearing), up to 6 digits with leading zeros; empty when none.
national_idThe bank code of the record, as stored in the directory (322271627, 203253, INGB). Empty for a BIC without a national code.
connected_bicThe BIC through which the record is reached on the SWIFT network: the record’s own BIC when it is connected, otherwise the connected BIC of the institution or of its correspondent.
institution_nameName of the institution as registered, upper case.
branch_informationBranch or department name; often empty.
pob_numberP.O. box number and the related postal code, comma-separated (POB 103352, 40024); empty when none.
street_address_1 … street_address_4Street name, number, building and area; empty when the directory has none.
cityCity.
cpsCounty, province or state (CA, HESSEN, GREATER LONDON).
zip_codePostal code (E14 5HP, 60261); may be empty.
country_nameCountry name, upper case.
iso_country_codeISO 3166-1 alpha-2 code of the country.
subtype_indicatorBusiness type of the entity, four letters (SUPE SWIFT member or sub-member, NSWB non-connected BIC, TRCO treasury counterparty…); see Field values.
network_connectivityThree letters for FIN, InterAct and FileAct: C connected, N not connected. CCC is a fully connected institution, CNN FIN only, NNN not connected.
service_codesThe SWIFT service and market-infrastructure codes of the BIC, concatenated without separators in alphabetical order: EBAERPFINSCOTGT is EBA, ERP, FIN, SCO, TGT; split it every three characters. Empty when none. The codes are listed under Field values.
Bank code with a valid account

UK sort code 200415 with account 38290008 (the Barclays test pair that passes the modulus check). No error member:

{
   "query": {
      "country_iso": "GB",
      "nid": "200415",
      "account": "38290008"
   },
   "success": true,
   "account_valid": true,
   "nid_valid": true,
   "records_found": 1,
   "records_displayed": 1,
   "directory_results": [
      {
         "office_type": "DB",
         "legal_type": "B",
         "institution_status": "BANK",
         "iso_lei_code": "213800UUGANOMFJ9X769",
         "bic8": "BUKBGB22",
         "branch_bic": "XXX",
         "bic": "BUKBGB22XXX",
         "chips_uid": "",
         "national_id": "200415",
         "connected_bic": "BUKBGB22XXX",
         "institution_name": "BARCLAYS BANK UK PLC",
         "branch_information": "BARCLAYBANK B'CARD N'PTON",
         "pob_number": "",
         "street_address_1": "1 CHURCHILL PLACE",
         "street_address_2": "",
         "street_address_3": "",
         "street_address_4": "",
         "city": "LONDON",
         "cps": "GREATER LONDON",
         "zip_code": "E14 5HP",
         "country_name": "UNITED KINGDOM",
         "iso_country_code": "GB",
         "subtype_indicator": "SUPE",
         "network_connectivity": "CCC",
         "service_codes": ""
      }
   ]
}
Bank code with an invalid account

The same sort code with the last digit of the account changed: the bank is still returned, account_valid is false and error explains why:

{
   "query": {
      "country_iso": "GB",
      "nid": "200415",
      "account": "38290009"
   },
   "success": true,
   "account_valid": false,
   "nid_valid": true,
   "records_found": 1,
   "records_displayed": 1,
   "directory_results": [
      {
         "office_type": "DB",
         "legal_type": "B",
         "institution_status": "BANK",
         "iso_lei_code": "213800UUGANOMFJ9X769",
         "bic8": "BUKBGB22",
         "branch_bic": "XXX",
         "bic": "BUKBGB22XXX",
         "chips_uid": "",
         "national_id": "200415",
         "connected_bic": "BUKBGB22XXX",
         "institution_name": "BARCLAYS BANK UK PLC",
         "branch_information": "BARCLAYBANK B'CARD N'PTON",
         "pob_number": "",
         "street_address_1": "1 CHURCHILL PLACE",
         "street_address_2": "",
         "street_address_3": "",
         "street_address_4": "",
         "city": "LONDON",
         "cps": "GREATER LONDON",
         "zip_code": "E14 5HP",
         "country_name": "UNITED KINGDOM",
         "iso_country_code": "GB",
         "subtype_indicator": "SUPE",
         "network_connectivity": "CCC",
         "service_codes": ""
      }
   ],
   "error": {
      "code": "813",
      "message": "Invalid Account Check Digit"
   }
}
Bank code not found

Routing number 322271628 (wrong check digit). Note the empty strings in the count fields:

{
   "query": {
      "country_iso": "US",
      "nid": "322271628",
      "account": ""
   },
   "success": true,
   "account_valid": "",
   "nid_valid": false,
   "records_found": "",
   "records_displayed": "",
   "directory_results": [],
   "error": {
      "code": "400",
      "message": "BankCode(NID) not found in the official directory"
   }
}
Request error

HTTP 400, nid missing; 307 has the same shape:

{
   "query": {
      "country_iso": "",
      "nid": "",
      "account": ""
   },
   "success": false,
   "account_valid": "",
   "nid_valid": "",
   "records_found": "",
   "records_displayed": "",
   "directory_results": [],
   "error": {
      "code": "306",
      "message": "Bad Request. Required minimum parameters: api_key, format, iso, nid"
   }
}
Account error

HTTP 403, result code 301 shown; 302 to 305 have the same shape with the messages from the code table. In XML success and nid_valid are 0:

{
   "query": {
      "country_iso": "",
      "nid": "",
      "account": ""
   },
   "success": false,
   "account_valid": "",
   "nid_valid": "",
   "records_found": "",
   "records_displayed": "",
   "directory_results": [],
   "error": {
      "code": "301",
      "message": "API Key is invalid"
   }
}

BIC lookup

The BIC endpoint answers the reverse question: which bank code and record belong to a BIC. The response has query.bic, success, bic_valid, records_found, records_displayed, directory_results with one record, and error on failure. BARCGB22XXX resolves to sort code 203253:

{
   "query": {
      "bic": "BARCGB22XXX"
   },
   "success": true,
   "bic_valid": true,
   "records_found": 1,
   "records_displayed": 1,
   "directory_results": [
      {
         "office_type": "HO",
         "legal_type": "L",
         "institution_status": "BANK",
         "iso_lei_code": "G5GSEF7VJP5I7OUK5573",
         "bic8": "BARCGB22",
         "branch_bic": "XXX",
         "bic": "BARCGB22XXX",
         "chips_uid": "007668",
         "national_id": "203253",
         "connected_bic": "BARCGB22XXX",
         "institution_name": "BARCLAYS BANK PLC",
         "branch_information": "ALL U.K. OFFICES",
         "pob_number": "",
         "street_address_1": "1 CHURCHILL PLACE",
         "street_address_2": "",
         "street_address_3": "",
         "street_address_4": "",
         "city": "LONDON",
         "cps": "GREATER LONDON",
         "zip_code": "E14 5HP",
         "country_name": "UNITED KINGDOM",
         "iso_country_code": "GB",
         "subtype_indicator": "SUPE",
         "network_connectivity": "CCC",
         "service_codes": "FINSCO"
      }
   ]
}
FieldTypeDescription
query.bicstringThe BIC as received.
successbooleantrue when processed, also when the BIC failed validation; false for an account error.
bic_validboolean or ""true when the BIC has the right form and exists in the directory; false with a code 807, 808 or 400; an empty string in the answer to an account error.
records_found, records_displayedinteger or ""1 and 1 for a BIC that was found; empty strings otherwise.
directory_resultsarrayOne record with the 25 directory fields; national_id carries the bank code the BIC corresponds to (203253 for BARCGB22XXX, 50070010 for DEUTDEFF), empty when the BIC has none.
errorobjectOnly on failure in JSON; always present in XML.
BIC not found
{
   "query": {
      "bic": "ZZZZGB22"
   },
   "success": true,
   "bic_valid": false,
   "records_found": "",
   "records_displayed": "",
   "directory_results": [],
   "error": {
      "code": "400",
      "message": "BIC not found in official directory"
   }
}

This endpoint searches the bank directory, not the SWIFT BIC directory: a BIC that exists but has no bank-directory record (a passive participant such as UNCRITM1, or a branch BIC the directory does not carry) is answered with 400. To validate a BIC as such, use the BIC Validation API.

Country formats

The structure endpoint describes what a country’s bank code and account number look like, so that you can validate the input before calling the bank code endpoint and build the right account value. A country can have several bank code formats (the United States has the routing number, the CHIPS ID and the CHIPS UID; Spain an 8- and a 9-digit form) and several account formats (Sweden three), so both members are arrays. The United Kingdom:

{
   "success": true,
   "national_id_format": [
      {
         "COUNTRY_CODE": "GB",
         "COUNTRY_NAME": "UNITED KINGDOM",
         "NATIONAL_ID_LOCAL_NAME": "Sort Code",
         "NATIONAL_ID_LOCAL_ACRONYM": "SC",
         "CLEARING_SYSTEM": "Payments UK",
         "EXAMPLE": "207305",
         "LETTER_FORMAT": "BBRRRR",
         "REGEX_FORMAT": "[0-9]{2}[0-9]{4}",
         "ELEMENTS": "BANK_CODE,BRANCH_CODE",
         "LENGTH": "6",
         "LENGTH_IN_DB": "6"
      }
   ],
   "account_number_format": [
      {
         "ISO_COUNTRY_CODE": "GB",
         "COUNTRY_NAME": "UNITED KINGDOM",
         "ACCOUNT_NB_TYPE": "Account number - Standard",
         "ACCOUNT_NB_LOCAL_NAME": "Account number",
         "EXAMPLE": "31219065",
         "LETTER_FORMAT": "AAAAAAAA",
         "REGEX_FORMAT": "[0-9]{8}",
         "ELEMENTS": "ACCOUNT",
         "MIN_LENGTH": "8",
         "MAX_LENGTH": "8"
      }
   ]
}
national_id_format
FieldDescription
COUNTRY_CODE, COUNTRY_NAMEThe country.
NATIONAL_ID_LOCAL_NAME, NATIONAL_ID_LOCAL_ACRONYMWhat the code is called locally (Routing Number / ABA, Sort Code / SC, Bankleitzahl); the acronym may be empty.
CLEARING_SYSTEMThe clearing system or body that issues the code.
EXAMPLEA valid example in the right length.
LETTER_FORMATOne letter per position: B bank code, R branch code, I institution code, K check digit, L location code, O other, N transit number, A area code, U unit code, E emirate code. BBBBIIIIK is the US routing number.
REGEX_FORMATA regular expression the code must match ([0-9]{4}[0-9]{4}[0-9]{1}, [A-Z]{4}0[A-Z0-9]{6} for an IFSC). Anchor it yourself.
ELEMENTSThe elements in order, comma-separated: BANK_CODE,INSTITUTION_CODE,CHECKSUM.
LENGTH, LENGTH_IN_DBLength of the code as sent and as stored, as strings.
account_number_format
FieldDescription
ISO_COUNTRY_CODE, COUNTRY_NAMEThe country.
ACCOUNT_NB_TYPE, ACCOUNT_NB_LOCAL_NAMEType and local name of the number (Account number - Standard, Releve d’Identite Bancaire).
EXAMPLEA valid example.
LETTER_FORMATOne letter per position, same letters as above plus A account; BBBBBRRRRRAAAAAAAAAAAKK is the French RIB: bank, branch, account, two-digit key.
REGEX_FORMATRegular expression of the number.
ELEMENTSElements in order, comma-separated. CHECKSUM marks the positions of a check digit in the number; whether the bank code endpoint verifies it is listed under Reading the result.
MIN_LENGTH, MAX_LENGTHAccepted length range, as strings ("8"); Australia alone returns numbers (5, 11), so read the value as a number either way.
Examples and IBAN-style accounts

The EXAMPLE values are illustrative, not guaranteed to be in the directory: of the 274 bank code examples returned for all countries, 200 are found by the bank code endpoint and 74 are not (territories reuse the example of their parent country, and some are outdated). For 22 countries, mostly in West and Central Africa, the domestic account number is the IBAN itself and the account format starts with COUNTRY_CODE,CHECKSUM; send the IBAN as account there. 28 countries have no account format, so account cannot be validated for them.

Several formats, and the XML form

In XML the formats of a country are written one after another inside national_id_format and account_number_format without a wrapping element: a new format starts at every COUNTRY_CODE / ISO_COUNTRY_CODE. Use JSON when a country can have several formats. The United States in XML, three bank code formats:

<?xml version="1.0"?>
<result>
   <success>true</success>
   <national_id_format>
      <COUNTRY_CODE>US</COUNTRY_CODE>
      <COUNTRY_NAME>UNITED STATES OF AMERICA</COUNTRY_NAME>
      <NATIONAL_ID_LOCAL_NAME>Routing Number</NATIONAL_ID_LOCAL_NAME>
      <NATIONAL_ID_LOCAL_ACRONYM>ABA</NATIONAL_ID_LOCAL_ACRONYM>
      <CLEARING_SYSTEM>American Bankers Association (ABA)</CLEARING_SYSTEM>
      <EXAMPLE>211770093</EXAMPLE>
      <LETTER_FORMAT>BBBBIIIIK</LETTER_FORMAT>
      <REGEX_FORMAT>[0-9]{4}[0-9]{4}[0-9]{1}</REGEX_FORMAT>
      <ELEMENTS>BANK_CODE,INSTITUTION_CODE,CHECKSUM</ELEMENTS>
      <LENGTH>9</LENGTH>
      <LENGTH_IN_DB>9</LENGTH_IN_DB>
      <COUNTRY_CODE>US</COUNTRY_CODE>
      <COUNTRY_NAME>UNITED STATES OF AMERICA</COUNTRY_NAME>
      <NATIONAL_ID_LOCAL_NAME>CHIPS ID</NATIONAL_ID_LOCAL_NAME>
      <NATIONAL_ID_LOCAL_ACRONYM>CHIPSID</NATIONAL_ID_LOCAL_ACRONYM>
      <CLEARING_SYSTEM>The Clearing House Payments Company L.L.C</CLEARING_SYSTEM>
      <EXAMPLE>0049</EXAMPLE>
      <LETTER_FORMAT>BBBB</LETTER_FORMAT>
      <REGEX_FORMAT>[0-9]{4}</REGEX_FORMAT>
      <ELEMENTS>BANK_CODE</ELEMENTS>
      <LENGTH>4</LENGTH>
      <LENGTH_IN_DB>4</LENGTH_IN_DB>
      <COUNTRY_CODE>US</COUNTRY_CODE>
      <COUNTRY_NAME>UNITED STATES OF AMERICA</COUNTRY_NAME>
      <NATIONAL_ID_LOCAL_NAME>CHIPS Universal ID</NATIONAL_ID_LOCAL_NAME>
      <NATIONAL_ID_LOCAL_ACRONYM>CHIPSUID</NATIONAL_ID_LOCAL_ACRONYM>
      <CLEARING_SYSTEM>The Clearing House Payments Company L.L.C</CLEARING_SYSTEM>
      <EXAMPLE>004966</EXAMPLE>
      <LETTER_FORMAT>BBBBBB</LETTER_FORMAT>
      <REGEX_FORMAT>[0-9]{6}</REGEX_FORMAT>
      <ELEMENTS>BANK_CODE</ELEMENTS>
      <LENGTH>6</LENGTH>
      <LENGTH_IN_DB>6</LENGTH_IN_DB>
   </national_id_format>
   <account_number_format>
      <ISO_COUNTRY_CODE>US</ISO_COUNTRY_CODE>
      <COUNTRY_NAME>UNITED STATES OF AMERICA</COUNTRY_NAME>
      <ACCOUNT_NB_TYPE>Account number - Standard</ACCOUNT_NB_TYPE>
      <ACCOUNT_NB_LOCAL_NAME>Account number</ACCOUNT_NB_LOCAL_NAME>
      <EXAMPLE>30806988100215886453015978854133029</EXAMPLE>
      <LETTER_FORMAT>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</LETTER_FORMAT>
      <REGEX_FORMAT>[A-Z0-9]{1,35}</REGEX_FORMAT>
      <ELEMENTS>ACCOUNT</ELEMENTS>
      <MIN_LENGTH>1</MIN_LENGTH>
      <MAX_LENGTH>35</MAX_LENGTH>
   </account_number_format>
   <error>
      <code/>
      <message/>
   </error>
</result>
Unknown country

HTTP 400 with the structure of a normal response and empty arrays; 802 has the same shape:

{
   "success": false,
   "national_id_format": [],
   "account_number_format": [],
   "error": {
      "code": "400",
      "message": "ISO Country Code not found in registry"
   }
}

Result codes

A result code is a three-digit string in error.code. On the bank code and BIC endpoints, 8xx codes and 400 come with HTTP 200 and describe the input; 306 and 307 come with HTTP 400; 3xx account errors with HTTP 403. The structure endpoint answers every error with HTTP 400 (401 for account errors).

Bank code endpoint
CodeMessageMeaning
802Country ISO code invalidcountry_iso is not two upper-case letters (USA, us).
803Unsupported country ISO codeTwo letters, but not a country in the directory (XX).
804NID length is not correct for US. Accepted length for US: 9 characters.The bank code has the wrong length for the country (message names the country and length).
805Invalid NID format. Example: 211770093The bank code does not match the country’s format (message gives the country’s example).
801Invalid Characters in NIDListed by the API; not observed: a letter in a numeric code is answered with 400.
400BankCode(NID) not found in the official directoryRight length, but no such code: unknown, wrong check digit (322271628) or a letter in a numeric code.
811Account Number length is not correct for USaccount is outside the country’s length range. The bank code record is still returned.
813Invalid Account Check DigitThe account fails the national check digit (UK modulus, Russian key…). Record still returned.
814Invalid Bank Code/NID Check DigitReturned for a German account that fails its check digit (37040044 / 3901190310), with nid_valid true and account_valid false: treat it like 813.
812Invalid Account format. Example: The account does not match the country’s format (a letter in a German account number). The example in the message can be empty.
809, 810Invalid Characters in account / Country ISO code invalidListed by the API; not observed in testing.
BIC endpoint
CodeMessageMeaning
807Invalid Characters in BICA character other than a letter or digit.
808BIC length is not correct. BIC code must be 8 or 11 characters longLength other than 8 or 11.
400BIC not found in official directoryWell-formed but not in the bank directory (also for BICs that exist in the SWIFT BIC directory but have no bank-directory record, such as passive BICs).
Structure endpoint
CodeHTTPMessageMeaning
802400Country ISO code invalidNot two letters.
400400ISO Country Code not found in registryNo format data for this country code.
Request errors
CodeHTTPMessageMeaning
306400Bad Request. Required minimum parameters: api_key, format, iso, nidA required parameter is missing (api_key, format, country_iso or nid). The message says iso; the parameter is country_iso. Same message on the structure endpoint.
307400Invalid value for 'limit' parameterlimit is not a positive integer or is too large (bank code endpoint).
806400Invalid value for 'limit' parameterThe same error on the BIC endpoint, in a body of success and error only.
Account errors
CodeMessageWhat to do
301API Key is invalidCopy the key exactly as shown under API Access.
302Subscription expiredRenew the Bank Suite service under My Services.
303No queries availableYour query balance is used up; top up under Pricing.
304You have no access to this APIThe Bank Suite service is not active on this account.
305IP Address not allowedThe key is restricted to certain IP addresses; add the calling server's address under Settings.

Handling errors

What each outcome means for your code. Lookups are deterministic for a given input; the directory is refreshed monthly, so if you cache responses, give the cache a limited lifetime.

SituationMeaningWhat to do
HTTP 400, result code 306 or 307A required parameter is missing, or limit is not a positive integer.Fix the request. Do not retry it unchanged.
HTTP 400, result code 802 or 400 (structure endpoint)The country code is malformed or has no entry.Correct the code; two upper-case letters from the supported list.
HTTP 403 (401 on the structure endpoint), result code 301–305The key, the IP address or the subscription is the problem.Stop sending; every request will fail the same way. Check the key under API Access, the balance and expiry under My Services.
HTTP 200, empty bodyformat is not lower-case json or xml (bank code endpoint), or country_iso is missing (structure endpoint).Fix the request; check for an empty body before parsing.
HTTP 429, HTML bodyMore than 20 requests per second. The request was rejected by the web server before reaching the API: not processed, not charged.Wait a moment and resend; lower the sending rate. Safe to retry. There is no Retry-After header.
HTTP 500, empty bodyA parameter was sent in a form the API cannot read (nid[]), or bic is missing on the BIC endpoint.Send plain string parameters; send bic.
HTTP 5xx, timeout, connection errorTemporary problem on the way to the API or on the API itself.Retry with increasing delays (1 s, 2 s, 4 s, then give up and queue). A request that got no response may still have been processed.
HTTP 200, result code 8xx or 400The request was fine; the bank code, account or BIC is not.Do not retry: the same input gives the same result. Show the user the message, log the code. For 811–814 the bank is identified; only the account is wrong.

Reading the result

  • A bank code is valid when nid_valid is true: it has the right form and is in the directory. The first record in directory_results is the bank; when records_found is above 1 the code is shared by several branches and limit lists them.
  • An account is valid when account_valid is true. What that proves depends on the country: the number matches the format (characters and length from the structure endpoint) and, where the format has a CHECKSUM element, the check digit is right. Where there is no check digit (United States, Netherlands, Australia…) a wrong but well-formed number is still reported valid. Verified in testing with a valid number and an altered copy: the check digit is caught for BA, BE, DE, EE, FR, GB, HR, IT, MC, ME, MK, PT, RS, SI, XK (account_valid is computed even when the bank code itself is not in the directory). In Germany the check depends on the bank’s published method; a bank without one accepts any well-formed number. Under review: for CZ, ES, HU and TN valid numbers (the IBAN registry examples) are answered 813/814, for MX an altered CLABE is accepted, and for MA, NO, SE, SK and TL the directory’s own example accounts are rejected; do not rely on account_valid for these ten countries until this note is gone. Everywhere else the format check applies only (AT, CH, IS, IL, LI, NL, PL, US…), including 28 countries whose account format lists a check digit that is not verified (AR, DK, VE…).
  • Decide on nid_valid, account_valid and error.code, never on HTTP status alone, and never on the presence of error in XML (it is always there).
  • records_found, records_displayed and account_valid change type: numbers and booleans on success, empty strings on failure. Test nid_valid first.
  • Send the bank code exactly as the structure endpoint describes it: full length with leading zeros, no separators. Clean the user’s input yourself; the API does not.
  • Use connected_bic for routing a SWIFT payment and bic for identification; they differ when the record’s own BIC is not connected (network_connectivity NNN).
  • Names, addresses and identifiers come from the directory as registered and change with each monthly release; the example records on this page were recorded on 9 October 2026.

Supported countries

195 countries, recorded from the structure endpoint on 9 October 2026: the local name of the bank code, its length (several lengths where the country has more than one form; 59 countries have more than one form, 57 of them with different lengths), and what account_valid proves there: yes – the check digit is verified (tested with a valid number and an altered copy); format only – characters and length are checked, a wrong but well-formed number passes; under review – see Reading the result; no account format – the directory has no account format for the country. Egypt and Iraq answer the structure endpoint although they are not on the service’s published list (Cuba has an account format but no bank code format and is left out).

Show all 195 countries
ISOCountryBank codeLengthAccount check digit
ADAndorraCodi banc, codi oficina8format only
AEUnited Arab EmiratesRouting Number9, 3, 11format only
AFAfghanistanBank Branch Code4format only
AGAntigua and BarbudaBank Branch Transit Code8format only
AIAnguillaBank Branch Transit Code8format only
ALAlbaniaAlbania Routing Code8format only
AMArmeniaբանկի կոդը5format only
AOAngolaBank Branch Code8, 4format only
ARArgentinaCodigo de Entidad/Codigo de Plaza7, 5, 3format only
ASAmerican SamoaRouting Number9no account format
ATAustriaBankleitzahl5format only
AUAustraliaBank State Branch6format only
AWAruba–9format only
AZAzerbaijanBank Branch Code12, 6format only
BABosnia and HerzegovinaSifra Banke3, 6yes
BDBangladeshRouting Number9format only
BEBelgiumCode Bancaire,Bank/branch code3yes
BFBurkina FasoClearing Code5, 10format only
BGBulgariaИдентификатор на банка8no account format
BHBahrainBank Code4format only
BJBeninClearing Code5, 10format only
BMBermuda–2format only
BNBrunei DarussalamBank Branch Code6format only
BOBolivia, Plurinational State OfBolivian Codigo de Banco5format only
BRBrazilIdentificador do Sistema de Pagamentos Brasileiro8, 7format only
BSBahamasBank Branch Code8format only
BTBhutanBhutan Routing/Bank Identification Code9format only
BWBotswanaSort Code6format only
BYBelarusBelarus Interbank Settlement Centre8, 11format only
BZBelizeBank Code8format only
CACanadaRouting number9, 3format only
CFCentral African RepublicCEMAC Bank/Branch Code10format only
CGCongoCEMAC Bank/Branch Code10format only
CHSwitzerlandBankenclearing Nummer5, 6format only
CICote D'IvoireClearing Code5, 10format only
CKCook IslandsBank State Branch6format only
CLChileCLRN Bank/Branch Code3format only
CMCameroonCEMAC Bank/Branch Code10format only
CNChinaChina National Advanced Payment System code12format only
COColombiaCÓDIGO DE COMPENSACION ELECTRONIC2, 5, 4, 3format only
CRCosta RicaCódigo de Entidad4no account format
CVCabo VerdeNúmero de Identificação8format only
CYCyprusKodikos Trapezas8format only
CZCzechiabankovní kód4under review
DEGermanyBankleitzahl8yes
DKDenmarkRegistreringsnummer4format only
DMDominicaBank Branch Transit Code8format only
DODominican RepublicBank Code4format only
DZAlgeriaBank Code3, 8format only
ECEcuadorCódigo Compensación8, 2format only
EEEstoniaPangakood2yes
EGEgypt–8format only
ESSpaincódigo bancario9, 8under review
FIFinlandRahalaitostunnus3no account format
FJFijiBank State Branch6format only
FOFaroe IslandsRegistreringsnummer4format only
FRFranceCode Banque/Guichet10yes
GAGabonCEMAC Bank/Branch Code10format only
GBUnited KingdomSort Code6yes
GDGrenadaBank Branch Transit Code8format only
GEGeorgiaბანკის კოდი2, 8no account format
GFFrench GuianaCode Banque/Guichet10no account format
GGGuernseySort Code6format only
GHGhanaSort code6format only
GIGibraltarSort Code6format only
GLGreenlandRegistreringsnummer4format only
GMGambia–6format only
GNGuinea–6format only
GPGuadeloupeCode Banque/Guichet10no account format
GQEquatorial GuineaCEMAC Bank/Branch Code10format only
GRGreeceKodikos Trapezas/Katastimatos7format only
GTGuatemalaCódigo Bancario2, 3, 8format only
GUGuamRouting Number9format only
GWGuinea-BissauClearing Code5, 10format only
GYGuyanaRouting Code8format only
HKHong KongClearing Code6, 3format only
HNHondurasCódigo de Entidad6, 8, 3format only
HRCroatiaVodeći broj banke7yes
HTHaiti–9format only
HUHungaryBankfiók-kód8under review
IDIndonesiaClearing Code7, 8, 3format only
IEIrelandIrish Payment Services Organisation6format only
ILIsraelRouting Code6format only
IMIsle of ManSort Code6no account format
INIndiaIndian Financial System Code11, 9, 4format only
IQIraq–11, 8, 4format only
ISIcelandBankanumer4format only
ITItalyAssociazione Bancaria Italiana Codice Avviamento Bancario10yes
JEJerseySort Code6format only
JMJamaicaBank Transit Code8, 9format only
JOJordanBank Branch Code2format only
JPJapanZengin Code7, 4format only
KEKenyaSort code5format only
KGKyrgyzstanKyrgyz BIK6format only
KHCambodiaCambodian Clearing Code6format only
KMComorosBank Code5format only
KNSaint Kitts and NevisBank Branch Transit Code8format only
KRKorea, Republic OfBank Code7, 3, 4format only
KWKuwaitBank Code4format only
KZKazakhstanBank Identifier Code3no account format
LBLebanon–4no account format
LCSaint LuciaBank Branch Transit Code8format only
LILiechtensteinBankenclearing Nummer5, 6format only
LKSri LankaBank Branch Code7format only
LSLesothoBank Branch Code6format only
LTLithuaniaBanko kodas5no account format
LULuxembourgBank Code3no account format
LVLatviaBankas Kods4no account format
MAMoroccoGuichet Bancaire Code10, 6under review
MCMonacoCode Banque/Guichet10yes
MDMoldova, Republic OfMoldova Bank Identifier Code11format only
MEMontenegroBank Identifying Number3yes
MGMadagascar–10, 8format only
MKNorth MacedoniaBank Code3, 11yes
MLMaliClearing Code5, 10format only
MNMongoliaбанкны код6, 8format only
MOMacao–3format only
MPNorthern Mariana IslandsRouting Number9no account format
MQMartiniqueCode Banque/Guichet10no account format
MRMauritaniaCode Agence10no account format
MSMontserratBank Branch Transit Code8format only
MTMaltaSort Code5format only
MUMauritiusBank Code4, 6no account format
MWMalawiMWKSORT Code6format only
MXMexicoClave Bancaria Estandarizada6, 3under review
MYMalaysiaBank Branch Code9, 4format only
MZMozambique–2, 8, 4format only
NANamibiaBank Branch Code6format only
NCNew CaledoniaCode Banque/Guichet10no account format
NENigerClearing Code5, 10format only
NGNigeriaSort Code9, 3, 6format only
NINicaraguaCheck Clearing Code2format only
NLNetherlandsBank Code4format only
NONorwayRegisternummer4under review
NPNepalBank Code8, 4format only
NZNew ZealandBank Code6format only
PAPanama–3, 9format only
PEPeruCodigo Bancario3, 6format only
PFFrench PolynesiaCode Banque/Guichet10no account format
PGPapua New GuineaBank State Branch6format only
PHPhilippinesBRSTN9, 6, 11format only
PKPakistanBank Branch Code7, 6, 12, 3format only
PLPolandNumer Rozliczeniowy Oddzialu-banku 8format only
PMSaint Pierre and MiquelonCode Banque/Guichet10no account format
PRPuerto RicoRouting Number9format only
PSPalestine, State OfBank Branch Code5, 2no account format
PTPortugalCódigo de Banco/Balcão8yes
PYParaguay–4, 7format only
QAQatar–2format only
REReunionCode Banque/Guichet10no account format
RORomaniacod bancar4no account format
RSSerbiaбанковни код3yes
RURussian FederationBank Identification Code9format only
RWRwandaCode Institution3format only
SASaudi ArabiaSaudi Arabia Routing Number2format only
SBSolomon IslandsBank State Branch6format only
SCSeychellesBank Code6format only
SESwedenclearingnummer4, 5under review
SGSingaporeNational Clearing Code7format only
SISloveniabančna koda5yes
SKSlovakiačíslo banky4under review
SLSierra Leone–6format only
SMSan MarinoAssociazione Bancaria Italiana Codice Avviamento Bancario10format only
SNSenegalClearing Code5, 10format only
STSao Tome and Principe–8, 4no account format
SVEl SalvadorBank Code2, 4format only
SZEswatiniBank Branch Code6format only
TDChadCEMAC Bank/Branch Code10format only
TGTogoClearing Code5, 10format only
THThailandBank Code7, 3format only
TJTajikistanBank Identification Code9format only
TLTimor-LesteBank Number4, 8under review
TNTunisiaCode Agence5under review
TOTongaBank State Branch6format only
TRTurkiyeBanda Kodu9, 12format only
TWTaiwanBank Code7, 3format only
TZTanzania, United Republic OfSort Code6format only
UAUkraineMFO code6format only
UGUgandaSort Code6format only
USUnited States of AmericaRouting Number9, 4, 6format only
UYUruguayCódigo de Banco Uruguayo3format only
UZUzbekistanMFO code5format only
VAHoly Seecodice identificativo3no account format
VCSaint Vincent and the GrenadinesBank Branch Transit Code8format only
VEVenezuela (Bolivarian Republic Of)Código de Banco4format only
VIVirgin Islands (U.S.)Routing Number9no account format
VNViet Nam–8, 6format only
VUVanuatuBank State Branch6format only
WFWallis and FutunaCode Banque/Guichet10no account format
WSSamoaBank State Branch6format only
XKKosovo, Republic Of–4yes
YTMayotteCode Banque/Guichet10no account format
ZASouth AfricaNational Clearing Code6format only
ZMZambiaSort Code6format only
ZWZimbabweSort Code5format only

Field values

institution_status
ValueMeaning
BANKUniversal bank
COOPCooperative bank
CBMACentral bank / monetary authority
ASSMAsset manager
CORPCorporate
CRUNCredit union
ICSDInternational central securities depository
INVMInvestment bank
MONXMoney exchange
NPAANational payment association
PYMIPayment institution
SLBHSaving-lending bank, housing
SUFISupervised financial institution
XCHGExchange
OTHROther
subtype_indicator
ValueMeaning
SUPESWIFT member or sub-member, broker-dealer, co-operative agreement with SWIFT, central depository, clearing house, fiduciary service company, fund administrator, investment management institution, money broker, non-shareholding financial institution, recognised exchange, registrar or transfer agent, trading institution or trustee, custodian or nominee service provider
MCFIFinancial institution in a MA-CUG
NOSUElectronic trade confirmation provider, securities proxy voting agency, travellers’ cheque issuer; treasury ETC service provider
NSWBNon-connected BIC
PSPAPayment system participant
SSPASecurities system participant
SWIFUndefined institution
CRESCREST participant
DOMSSWIFT internal subtype for domestic customers (AU-NPP, JV India)
PASOPartner
PRFINon-SWIFT user
BEIDBusiness entity identifier (corporate)
COOPCooperation agreement with SWIFT for the use of messaging services (corporate)
CORPCorporate
MCCONon-financial institution participant in a MA-CUG
SMDPSecurities market data provider
TRCOTreasury counterparty
service_codes

The three-character codes that can appear concatenated in service_codes: SWIFT services and EU-wide infrastructures first, then national market infrastructures by country.

Show all 147 service codes
CodeServiceCountry
ABEEBA CLEARING - EURO1/STEP1 (EBA)network / EU
EB+EBA CLEARING - EURO1/STEP1 REACHABLE INSTITUTIONSnetwork / EU
EBAEBA CLEARING - EURO1network / EU
ERPEBA CLEARING - STEP1network / EU
FINMANY-TO-MANY FIN PAYMENT SERVICEnetwork / EU
MACFinancial institution restricted to a Member-Administered Closed User Group (MA-CUG)network / EU
SCOSCORE FINnetwork / EU
TG+TARGET2 INDIRECT PARTICIPANTS and addressable BICsnetwork / EU
TGTTARGET2 DIRECT PARTICIPANTSnetwork / EU
RPDRAPID-FINCOPY RPD (LIVE)AE United Arab Emirates
AIPALBANIAN INTERBANK PAYMENT SYSTEMAL Albania
PTRSISTEMA DE LIQUIDACO POR BRUTOAO Angola
CCECCP.CEEAT Austria
CSABULK PAYMENTS BYCLEARING SERVICE AUSTRIAAT Austria
OEKOEK CSDAT Austria
ACLAUSTRACLEAR CLOSED USER GROUPAU Australia
PDSPAYMENT DELIVERY SYSTEM/RITS-RTGSAU Australia
AZMAZIPS - AZERBAIJAN INTERBANK PAYMENT SYSTEMAZ Azerbaijan
BAPBOSNIA I HERCEGOVINA RTGSBA Bosnia And Herzegovina
BDSCBRTGS - CENTRAL REAL TIME GROSS SETTLEMENT SYSTEMBB Barbados
BHRBAHRAIN RTGSBH Bahrain
CBSBAHRAIN SSS (SECURITIES SETTLEMENT SYSTEM)BH Bahrain
BPSBURUNDI RTGS SYSTEM FOR EAPSBI Burundi
BHSBAHAMAS RTGSBS Bahamas
BISBOTSWANA INTERBANK SETTLEMENT SYSTEMBW Botswana
CADLVTS - LARGE VALUE TRANSFER SYSTEMCA Canada
CDSMT566 - CORPORATE ACTION CONFIRMATION DELIVERY SERVICECA Canada
BCGCSD SERVICE OF DRCCD Congo, The Democratic Republic Of The
CBCRTGS OF CENTRAL BANK OF CONGOCD Congo, The Democratic Republic Of The
PCHSWISS INTERBANK CLEARING (SIC)CH Switzerland
UTPUBS THIRD PARTY FIN MT971CH Switzerland
SCPSISTEMA CHILENO DE PAGOS INTERBANCARIOSCL Chile
SYGSYGMACM Cameroon
CCCCOMPENSACION DE DIVISAS DE COLOMBIACO Colombia
UNICSD PRAGUE FIN-CUGCZ Czechia
EP+EPM-ECBDE Germany
DD+KRONOS - DANISH KRONE RTGSDK Denmark
DDKKRONOS - DANISH KRONE RTGSDK Denmark
DKDDANMARKS NATIONAL BANKDK Denmark
VPDVP SECURITIES A/S CUGDK Denmark
SDDSIPARD LBTRDO Dominican Republic
ALGBANK OF ALGERIA - GROSS PAYMENT SYSTEMDZ Algeria
MCSMCDR_FIN_CUGEG Egypt
PEGPAYMENT SYSTEM IN EGYPTEG Egypt
CAMSPIES Spain
RTCREGIS-TR CORPORATE STATUSES Spain
FBNRTGS FIJIFJ Fiji
AIMBLOOMBERG ASSET AND INVESTMENT MANAGERGB United Kingdom
BFIBLACKROCKGB United Kingdom
BMFBLOOMBERG MONEY MARKET FUNDSGB United Kingdom
CCSBROADRIDGE MATCHINGGB United Kingdom
FXGBLOOMBERG FX SETTLEMENT SERVICEGB United Kingdom
GSSSWIFTNET BULK PAYMENTS BY VOCALINKGB United Kingdom
GSTGSTP GLOBAL STRAIGHT THROUGH PROCESSINGGB United Kingdom
SSEBLOOMBERG SELL SIDE EXECUTION AND ORDER MANAGEMENT SOLUTIONSGB United Kingdom
STGCHAPS STERLING (RTGS)GB United Kingdom
STPBLOOMBERG STRAIGHT THROUGH PROCESSINGGB United Kingdom
TLFLCH - TRADE LEG FEEDGB United Kingdom
TOMBLOOMBERG SELL SIDE TRADE ORDER MANAGEMENT SOLUTIONSGB United Kingdom
TRMBLOOMBERG CORPORATE TREASURY MANAGEMENTGB United Kingdom
GISGHANA INTERBANK SETTLEMENT SYSTEM (GISS)GH Ghana
CBGGAMBIA RTGSGM Gambia
GNRREPUBLIQUE DE GUINEE RTGS SERVICEGN Guinea
HKLHONG KONG RTGS SERVICEHK Hong Kong
SPHLBTR HONDURAS - FIN COPY (LIVE)HN Honduras
HRKHSVP - HRVATSKI SUSTAV VELIKIH PLACANJAHR Croatia
HUFVIBER - VALOS IDEJU BRUTTO ELSZAMOLASI RENDSZERHU Hungary
KLRCLOSED USER GROUP FOR HUNGARIAN SECURITIES MARKETHU Hungary
CBIIRISIE Ireland
BIRISRAELI RTGSIL Israel
TACISRAEL: TAC - TACH CUG (LIVE)IL Israel
XBCXBOMINBB_CUGIN India
ISGICELAND RTGS SERVICEIS Iceland
JODRTGS-JOJO Jordan
JOEJORDAN CROSS BORDER REPORTINGJO Jordan
JOFJORDAN CROSS BORDER REPORTINGJO Jordan
KPSKENYA ELECTRONIC PAYMENT SETTLEMENT SYSTEM (KEPSS)KE Kenya
CBEEASTERN CARIBBEAN PAYMENTS SYSTEMKN Saint Kitts And Nevis
LKBLANKASETTLELK Sri Lanka
LRRLIBERIA RTGS SERVICELR Liberia
LSWLESOTHO WIRELS Lesotho
LA+LATVIA'S ACCESS TO TARGETLV Latvia
LVLSTARPBANKU AUTOMATIZETA MAKSAJUMU SISTEMALV Latvia
MUPMACSS - MAURITIUS AUTOMATED CLEARING AND SETTLEMENT SYSTEMMU Mauritius
RBMMALAWI: RTGS SERVICE - MITASSMW Malawi
RTSMALAYSIA: BANK NEGARA MALAYSIA - RENTASMY Malaysia
NAMNAMIBIAN INTERBANK SETTLEMENT SYSTEM (NISS)NA Namibia
INCINTERPAY CUGNL The Netherlands
MCFMCF - EMCF CUGNL The Netherlands
NBONORGES BANK RTGS SERVICENO Norway
NOCNICS - NORWEGIAN INTERBANK CLEARING SYSTEMNO Norway
OSCOSC EQUITY CLEARINGNO Norway
AVPAVP - ASSURED VALUE PAYMENTSNZ New Zealand
AVTRESERVE BANK OF NEW ZEALAND - AVTNZ New Zealand
NSINZClear InterfaceNZ New Zealand
BSPPPS - PHILIPPINES PAYMENT SYSTEMPH Philippines
KDPPOLAND: KDPW_FIN_CSDPL Poland
PLNPOLAND: SORBNET2 - POLAND RTGSPL Poland
PMAPMA RTGSPS Palestine, State Of
PPYSISTEMA DE PAGOS DEL PARAGUAYPY Paraguay
DECCSDA_FIN_CUGRO Romania
ROBROMANIAN GSRS (NEW)RO Romania
ROLREPORT - ROMANIAN ELECTRONIC PAYMENT OPERATIONS IN REAL-TIMERO Romania
RONNEW REGIS SERVICE - RONRO Romania
ROSROMANIAN GSRSRO Romania
RWSRWANDAN RTGS SYSTEM FOR EAPSRW Rwanda
SARSARIE - SAUDI ARABIAN RIYAL INTERBANK EXPRESSSA Saudi Arabia
BCCBGC CLEARING CUGSE Sweden
SE+RIXSE Sweden
SECRXSE Sweden
SSKRIX - REAL-TIME GROSS SETTLEMENT IN SEKSE Sweden
MEPMEPS+ : SINGAPORE RTGS SYSTEMSG Singapore
MEQTEST SINGAPORE RTGS SYSTEMSG Singapore
MEUTEST SERVICE FOR MEPS (INTERNAL TESTING)SG Singapore
SLFSIERRA LEONE RTGS SERVICESL Sierra Leone
SLRSIERRA LEONE RTGS SERVICE SLISSSL Sierra Leone
BCASTAR - UEMO A MI-CUGSN Senegal
IPSSWAZILAND INTERBANK PAYMENTS AND SETTLEMENTS SYSTEMSZ Swaziland
ERSECOBANK RAPID TRADE (USD)TG Togo
ERUECOBANK RAPID TRADE (EUR)TG Togo
THBBAHTBNET/2 - THAILAND PAYMENT SYSTEMTH Thailand
DVPTAKASBANK DVP SETTLEMENT SYSTEMTR Turkey
TTDSAFE-TTTT Trinidad And Tobago
TWITAIWAN FOREIGN CURRENCY DIRECT DEBIT SERVICETW Taiwan
TWPFOREIGN CURRENCY RTGS SERVICETW Taiwan
TISTANZANIA INTERBANK SETTLEMENT SYSTEM (TISS)TZ Tanzania, United Republic Of
UISUGANDA NATIONAL INTER-BANK SETTLEMENT (UNIS) SYSTEMUG Uganda
BTCFUNDPLICITY SERVICEUS United States Of America
CLNCLN - CLSNET FINCOPY SIT/PERFUS United States Of America
COTLOAN/SERV CLEAR FINUS United States Of America
FACFedACHUS United States Of America
FWRFedWIREUS United States Of America
OMGOmgeo (INTELLIGENT TRADE MANAGEMENT SOLUTIONS)US United States Of America
PEFPERES OPERATIONS (LIVE)US United States Of America
CUYFIN COPY FOR THE CENTRAL BANK OF URUGUAYUY Uruguay
PVEPVE - PAYMENTS SYSTEM VENEZUELAVE Venezuela (Bolivarian Republic Of)
YVELBTR VENEZUELAVE Venezuela (Bolivarian Republic Of)
MOSSAMOS - SOUTH AFRICAN MULTIPLE OPTION SETTLEMENTZA South Africa
RCHBANKSERVAFRICA RCHZA South Africa
SRSSIRESS FIN COPY SERVICEZA South Africa
ZASSTRATE - SHARE TRANSACTIONS TOTALLY ELECTRONICZA South Africa
ZCLSOUTH AFRICA FX FIN COPYZA South Africa
ZDSSOUTH AFRICA DS FIN COPYZA South Africa
ZVASOUTH AFRICAN VALUE ADDED PAYMENTS SYSTEMZA South Africa
ZISZAMBIA INTERBANK PAYMENT & SETTLEMENT SYSTEM (ZIPSS)ZM Zambia
CCHCOMESA REPSS PAYMENT SYSTEMZW Zimbabwe
ZETZETSS - ZIMBABWE ELECTRONIC TRANSFER AND SETTLEMENT SYSTEMZW Zimbabwe

XML schemas

One schema per endpoint, matching the responses as the API sends them: every leaf is a string that may be empty, directory_results holds zero or more row elements, and the structure endpoint’s formats repeat without a wrapper.

banksuite-nid.xsd

Show banksuite-nid.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!-- Bank Suite API, /banksuite/nid/ response. Every leaf is a string and may be empty: codes keep their leading zeros,
       flags are 1/0, counts are empty on an error. -->
  <xs:complexType name="record">
    <xs:sequence>
      <xs:element name="office_type" type="xs:string"/>
      <xs:element name="legal_type" type="xs:string"/>
      <xs:element name="institution_status" type="xs:string"/>
      <xs:element name="iso_lei_code" type="xs:string"/>
      <xs:element name="bic8" type="xs:string"/>
      <xs:element name="branch_bic" type="xs:string"/>
      <xs:element name="bic" type="xs:string"/>
      <xs:element name="chips_uid" type="xs:string"/>
      <xs:element name="national_id" type="xs:string"/>
      <xs:element name="connected_bic" type="xs:string"/>
      <xs:element name="institution_name" type="xs:string"/>
      <xs:element name="branch_information" type="xs:string"/>
      <xs:element name="pob_number" type="xs:string"/>
      <xs:element name="street_address_1" type="xs:string"/>
      <xs:element name="street_address_2" type="xs:string"/>
      <xs:element name="street_address_3" type="xs:string"/>
      <xs:element name="street_address_4" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="cps" type="xs:string"/>
      <xs:element name="zip_code" type="xs:string"/>
      <xs:element name="country_name" type="xs:string"/>
      <xs:element name="iso_country_code" type="xs:string"/>
      <xs:element name="subtype_indicator" type="xs:string"/>
      <xs:element name="network_connectivity" type="xs:string"/>
      <xs:element name="service_codes" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="error">
    <xs:sequence>
      <xs:element name="code" type="xs:string"/>
      <xs:element name="message" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="result">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="query">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="country_iso" type="xs:string"/>
              <xs:element name="nid" type="xs:string"/>
              <xs:element name="account" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="success" type="xs:string"/>
        <xs:element name="records_displayed" type="xs:string"/>
        <xs:element name="records_found" type="xs:string"/>
        <xs:element name="account_valid" type="xs:string"/>
        <xs:element name="nid_valid" type="xs:string"/>
        <xs:element name="directory_results">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="row" type="record" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="error" type="error"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

banksuite-bic.xsd

Show banksuite-bic.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!-- Bank Suite API, /banksuite/bic/ response. Every leaf is a string and may be empty. -->
  <xs:complexType name="record">
    <xs:sequence>
      <xs:element name="office_type" type="xs:string"/>
      <xs:element name="legal_type" type="xs:string"/>
      <xs:element name="institution_status" type="xs:string"/>
      <xs:element name="iso_lei_code" type="xs:string"/>
      <xs:element name="bic8" type="xs:string"/>
      <xs:element name="branch_bic" type="xs:string"/>
      <xs:element name="bic" type="xs:string"/>
      <xs:element name="chips_uid" type="xs:string"/>
      <xs:element name="national_id" type="xs:string"/>
      <xs:element name="connected_bic" type="xs:string"/>
      <xs:element name="institution_name" type="xs:string"/>
      <xs:element name="branch_information" type="xs:string"/>
      <xs:element name="pob_number" type="xs:string"/>
      <xs:element name="street_address_1" type="xs:string"/>
      <xs:element name="street_address_2" type="xs:string"/>
      <xs:element name="street_address_3" type="xs:string"/>
      <xs:element name="street_address_4" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="cps" type="xs:string"/>
      <xs:element name="zip_code" type="xs:string"/>
      <xs:element name="country_name" type="xs:string"/>
      <xs:element name="iso_country_code" type="xs:string"/>
      <xs:element name="subtype_indicator" type="xs:string"/>
      <xs:element name="network_connectivity" type="xs:string"/>
      <xs:element name="service_codes" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="result">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="query">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="bic" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="success" type="xs:string"/>
        <xs:element name="records_displayed" type="xs:string"/>
        <xs:element name="records_found" type="xs:string"/>
        <xs:element name="directory_results">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="row" type="record" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="error">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="code" type="xs:string"/>
              <xs:element name="message" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

banksuite-structure.xsd

Show banksuite-structure.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!-- Bank Suite API, /banksuite/structure/ response. A country can have several bank code formats and several account
       formats; in XML they follow each other inside one element without a wrapper, so the group of elements repeats
       (a new format starts at every COUNTRY_CODE / ISO_COUNTRY_CODE). -->
  <xs:element name="result">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="success" type="xs:string"/>
        <xs:element name="national_id_format">
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
              <xs:element name="COUNTRY_CODE" type="xs:string"/>
              <xs:element name="COUNTRY_NAME" type="xs:string"/>
              <xs:element name="NATIONAL_ID_LOCAL_NAME" type="xs:string"/>
              <xs:element name="NATIONAL_ID_LOCAL_ACRONYM" type="xs:string"/>
              <xs:element name="CLEARING_SYSTEM" type="xs:string"/>
              <xs:element name="EXAMPLE" type="xs:string"/>
              <xs:element name="LETTER_FORMAT" type="xs:string"/>
              <xs:element name="REGEX_FORMAT" type="xs:string"/>
              <xs:element name="ELEMENTS" type="xs:string"/>
              <xs:element name="LENGTH" type="xs:string"/>
              <xs:element name="LENGTH_IN_DB" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="account_number_format">
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
              <xs:element name="ISO_COUNTRY_CODE" type="xs:string"/>
              <xs:element name="COUNTRY_NAME" type="xs:string"/>
              <xs:element name="ACCOUNT_NB_TYPE" type="xs:string"/>
              <xs:element name="ACCOUNT_NB_LOCAL_NAME" type="xs:string"/>
              <xs:element name="EXAMPLE" type="xs:string"/>
              <xs:element name="LETTER_FORMAT" type="xs:string"/>
              <xs:element name="REGEX_FORMAT" type="xs:string"/>
              <xs:element name="ELEMENTS" type="xs:string"/>
              <xs:element name="MIN_LENGTH" type="xs:string"/>
              <xs:element name="MAX_LENGTH" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="error">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="code" type="xs:string"/>
              <xs:element name="message" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Checking your balance

The services endpoint returns every service on your account with its remaining queries and expiry date, the same information as My Services. Poll it from your monitoring to catch a low balance before the API starts answering 303. It takes your api_key and a format (json or xml) and does not use a query.

GEThttps://api.iban.com/clients/api/v4/services/?api_key=YOUR_API_KEY&format=json
GEThttps://api.iban.com/clients/api/v4/services/?api_key=YOUR_API_KEY&format=xml

The response, shortened to the entry of this service (the endpoint lists every service on your account, one object each):

{
   "services": [
      {
         "service_name": "BankSuite",
         "credits": 99009,
         "expiry_date": "2027-09-29",
         "service_expired": 0
      }
   ],
   "errors": []
}

The HTTP status is 200 in every case. With a wrong key, services is empty and errors carries code 301 ({"services":[],"errors":[{"code":"301","message":"API Key is invalid"}]}); without format the body is empty.

FieldTypeDescription
service_namestringName of the service as shown under My Services. The Bank Suite entry is named BankSuite.
creditsnumber or stringRemaining queries. Services without a quota return the string Unlimited instead of a number, so test the type before comparing.
expiry_datestringExpiry date of the service, YYYY-MM-DD. Requests after this date are refused as expired.
service_expired0 or 11 when the service has expired.

Rate limits and queries

  • The shared API accepts up to 20 requests per second. A short burst of a few dozen requests above that rate is absorbed; beyond it every request is rejected with HTTP 429 Too Many Requests and a small HTML body. A rejected request never reaches the API: it is not processed and not charged. Acceptance resumes as soon as your rate drops below the limit, so wait a moment and resend; keep the sending rate at or below 20 per second with a queue or a token bucket. If several processes send requests, apply the limit to their total.
  • Each bank code validation, BIC lookup or structure request uses one query from your Bank Suite balance; requests refused with a request or account error (HTTP 400, 401, 403, 429) do not. Your balance and expiry date are shown under My Services and by the services endpoint.
  • Need more throughput? A dedicated API server is available for your account with no per-second limit, on its own hostname. Contact support with your expected volume.

Glossary

TermMeaning
NIDNational identifier: the domestic bank code of a country, by whatever local name (routing number, sort code, BLZ, clearing number, BSB, IFSC, CNAPS). The bank code endpoint takes it as nid.
Bank directoryThe directory behind the Bank Suite: bank codes, BICs, LEIs, CHIPS identifiers, addresses and network data for institutions and branches in 195 countries (the published list says 193; Egypt and Iraq answer as well), licensed from SWIFTRef (Bank Directory Plus) and updated monthly.
BICBusiness Identifier Code (ISO 9362), 8 or 11 characters. bic8 is the institution part, branch_bic the branch part.
Connected BICThe BIC an institution is reached through on the SWIFT network. For a record whose own BIC is not connected, the directory points to the institution’s connected BIC or to its correspondent’s.
LEILegal Entity Identifier (ISO 17442), the 20-character code of a legal entity.
CHIPS UIDUniversal Identifier in CHIPS, the US dollar clearing house.
Check digitA digit computed from the other digits of a code so that a typing error can be detected. US routing numbers, German, UK and Russian account numbers, French RIB keys and Spanish CCC digits have one; the countries whose account check digit the bank code endpoint verifies are listed under Reading the result.
Service codeThree-character code of a SWIFT service or a market infrastructure the BIC participates in, concatenated in service_codes.