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.
Validate a bank code, optionally with an account number:
https://api.iban.com/clients/api/banksuite/nid/https://api.iban.com/clients/api/banksuite/nid/?api_key=YOUR_API_KEY&format=json&country_iso=US&nid=322271627Find the bank code and record behind a BIC:
https://api.iban.com/clients/api/banksuite/bic/https://api.iban.com/clients/api/banksuite/bic/?api_key=YOUR_API_KEY&format=json&bic=BARCGB22XXXBank code and account number formats of a country:
https://api.iban.com/clients/api/banksuite/structure/https://api.iban.com/clients/api/banksuite/structure/?api_key=YOUR_API_KEY&format=json&country_iso=GBapplication/x-www-form-urlencoded; GET takes the same parameters in the query string. Both methods return the same response.bic.format in upper case, and the structure endpoint without country_iso.Content-Type is application/json or application/xml. Directory text is upper case as registered.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=322271627The full response to this request is in the Response section; the same request in six more languages is under Example request.
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.
| Parameter | Required | Value | Description |
|---|---|---|---|
api_key | yes | string | Your 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). |
format | yes | json or xml | Response 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. |
| Parameter | Required | Value | Description |
|---|---|---|---|
country_iso | yes | string, 2 letters | ISO 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. |
nid | yes | string | The 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. |
account | no | string | The 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. |
limit | no | integer | Number 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. |
| Parameter | Required | Value | Description |
|---|---|---|---|
bic | yes | string, 8 or 11 characters | The 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. |
limit | no | integer | Accepted 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. |
| Parameter | Required | Value | Description |
|---|---|---|---|
country_iso | yes | string, 2 letters | ISO 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. |
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=322271627The 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=BARCGB22XXXcurl "https://api.iban.com/clients/api/banksuite/structure/" \
-d api_key=YOUR_API_KEY \
-d format=json \
-d country_iso=GBA 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"
}
]
}| Field | Type | Description |
|---|---|---|
query | object | country_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. |
success | boolean | true 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_valid | boolean 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_valid | boolean 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_found | integer 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_displayed | integer or "" | Number of records in directory_results: 1 by default, up to limit. An empty string when the bank code failed. |
directory_results | array | The records, 25 fields each (next table). Empty when the bank code failed. |
error | object | Present 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. |
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.
| Field | Description |
|---|---|
office_type | Type 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_type | L legal entity, B business entity (branch or department of a legal entity), U unknown. |
institution_status | Type of institution, four letters: BANK, COOP, CBMA, ASSM, CORP, CRUN, ICSD, INVM, MONX, NPAA, PYMI, SLBH, SUFI, XCHG, OTHR; see Field values. |
iso_lei_code | Legal Entity Identifier (ISO 17442, 20 characters) of the institution; empty when it has none. |
bic8 | First eight characters of the BIC: institution, country and location. |
branch_bic | Branch code of the BIC; XXX for the head office record. |
bic | The 11-character BIC of the record. |
chips_uid | CHIPS Universal Identifier of the institution (US dollar clearing), up to 6 digits with leading zeros; empty when none. |
national_id | The bank code of the record, as stored in the directory (322271627, 203253, INGB). Empty for a BIC without a national code. |
connected_bic | The 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_name | Name of the institution as registered, upper case. |
branch_information | Branch or department name; often empty. |
pob_number | P.O. box number and the related postal code, comma-separated (POB 103352, 40024); empty when none. |
street_address_1 … street_address_4 | Street name, number, building and area; empty when the directory has none. |
city | City. |
cps | County, province or state (CA, HESSEN, GREATER LONDON). |
zip_code | Postal code (E14 5HP, 60261); may be empty. |
country_name | Country name, upper case. |
iso_country_code | ISO 3166-1 alpha-2 code of the country. |
subtype_indicator | Business type of the entity, four letters (SUPE SWIFT member or sub-member, NSWB non-connected BIC, TRCO treasury counterparty…); see Field values. |
network_connectivity | Three letters for FIN, InterAct and FileAct: C connected, N not connected. CCC is a fully connected institution, CNN FIN only, NNN not connected. |
service_codes | The 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. |
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": ""
}
]
}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"
}
}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"
}
}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"
}
}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"
}
}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"
}
]
}| Field | Type | Description |
|---|---|---|
query.bic | string | The BIC as received. |
success | boolean | true when processed, also when the BIC failed validation; false for an account error. |
bic_valid | boolean 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_displayed | integer or "" | 1 and 1 for a BIC that was found; empty strings otherwise. |
directory_results | array | One 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. |
error | object | Only on failure in JSON; always present in XML. |
{
"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.
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"
}
]
}| Field | Description |
|---|---|
COUNTRY_CODE, COUNTRY_NAME | The country. |
NATIONAL_ID_LOCAL_NAME, NATIONAL_ID_LOCAL_ACRONYM | What the code is called locally (Routing Number / ABA, Sort Code / SC, Bankleitzahl); the acronym may be empty. |
CLEARING_SYSTEM | The clearing system or body that issues the code. |
EXAMPLE | A valid example in the right length. |
LETTER_FORMAT | One 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_FORMAT | A 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. |
ELEMENTS | The elements in order, comma-separated: BANK_CODE,INSTITUTION_CODE,CHECKSUM. |
LENGTH, LENGTH_IN_DB | Length of the code as sent and as stored, as strings. |
| Field | Description |
|---|---|
ISO_COUNTRY_CODE, COUNTRY_NAME | The country. |
ACCOUNT_NB_TYPE, ACCOUNT_NB_LOCAL_NAME | Type and local name of the number (Account number - Standard, Releve d’Identite Bancaire). |
EXAMPLE | A valid example. |
LETTER_FORMAT | One letter per position, same letters as above plus A account; BBBBBRRRRRAAAAAAAAAAAKK is the French RIB: bank, branch, account, two-digit key. |
REGEX_FORMAT | Regular expression of the number. |
ELEMENTS | Elements 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_LENGTH | Accepted length range, as strings ("8"); Australia alone returns numbers (5, 11), so read the value as a number either way. |
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.
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>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"
}
}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).
| Code | Message | Meaning |
|---|---|---|
| 802 | Country ISO code invalid | country_iso is not two upper-case letters (USA, us). |
| 803 | Unsupported country ISO code | Two letters, but not a country in the directory (XX). |
| 804 | NID 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). |
| 805 | Invalid NID format. Example: 211770093 | The bank code does not match the country’s format (message gives the country’s example). |
| 801 | Invalid Characters in NID | Listed by the API; not observed: a letter in a numeric code is answered with 400. |
| 400 | BankCode(NID) not found in the official directory | Right length, but no such code: unknown, wrong check digit (322271628) or a letter in a numeric code. |
| 811 | Account Number length is not correct for US | account is outside the country’s length range. The bank code record is still returned. |
| 813 | Invalid Account Check Digit | The account fails the national check digit (UK modulus, Russian key…). Record still returned. |
| 814 | Invalid Bank Code/NID Check Digit | Returned for a German account that fails its check digit (37040044 / 3901190310), with nid_valid true and account_valid false: treat it like 813. |
| 812 | Invalid 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, 810 | Invalid Characters in account / Country ISO code invalid | Listed by the API; not observed in testing. |
| Code | Message | Meaning |
|---|---|---|
| 807 | Invalid Characters in BIC | A character other than a letter or digit. |
| 808 | BIC length is not correct. BIC code must be 8 or 11 characters long | Length other than 8 or 11. |
| 400 | BIC not found in official directory | Well-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). |
| Code | HTTP | Message | Meaning |
|---|---|---|---|
| 802 | 400 | Country ISO code invalid | Not two letters. |
| 400 | 400 | ISO Country Code not found in registry | No format data for this country code. |
| Code | HTTP | Message | Meaning |
|---|---|---|---|
| 306 | 400 | Bad Request. Required minimum parameters: api_key, format, iso, nid | A 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. |
| 307 | 400 | Invalid value for 'limit' parameter | limit is not a positive integer or is too large (bank code endpoint). |
| 806 | 400 | Invalid value for 'limit' parameter | The same error on the BIC endpoint, in a body of success and error only. |
| Code | Message | What to do |
|---|---|---|
| 301 | API Key is invalid | Copy the key exactly as shown under API Access. |
| 302 | Subscription expired | Renew the Bank Suite service under My Services. |
| 303 | No queries available | Your query balance is used up; top up under Pricing. |
| 304 | You have no access to this API | The Bank Suite service is not active on this account. |
| 305 | IP Address not allowed | The key is restricted to certain IP addresses; add the calling server's address under Settings. |
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.
| Situation | Meaning | What to do |
|---|---|---|
| HTTP 400, result code 306 or 307 | A 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–305 | The 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 body | format 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 body | More 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 body | A 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 error | Temporary 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 400 | The 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. |
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.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…).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.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).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).
| ISO | Country | Bank code | Length | Account check digit |
|---|---|---|---|---|
AD | Andorra | Codi banc, codi oficina | 8 | format only |
AE | United Arab Emirates | Routing Number | 9, 3, 11 | format only |
AF | Afghanistan | Bank Branch Code | 4 | format only |
AG | Antigua and Barbuda | Bank Branch Transit Code | 8 | format only |
AI | Anguilla | Bank Branch Transit Code | 8 | format only |
AL | Albania | Albania Routing Code | 8 | format only |
AM | Armenia | բանկի կոդը | 5 | format only |
AO | Angola | Bank Branch Code | 8, 4 | format only |
AR | Argentina | Codigo de Entidad/Codigo de Plaza | 7, 5, 3 | format only |
AS | American Samoa | Routing Number | 9 | no account format |
AT | Austria | Bankleitzahl | 5 | format only |
AU | Australia | Bank State Branch | 6 | format only |
AW | Aruba | – | 9 | format only |
AZ | Azerbaijan | Bank Branch Code | 12, 6 | format only |
BA | Bosnia and Herzegovina | Sifra Banke | 3, 6 | yes |
BD | Bangladesh | Routing Number | 9 | format only |
BE | Belgium | Code Bancaire,Bank/branch code | 3 | yes |
BF | Burkina Faso | Clearing Code | 5, 10 | format only |
BG | Bulgaria | Идентификатор на банка | 8 | no account format |
BH | Bahrain | Bank Code | 4 | format only |
BJ | Benin | Clearing Code | 5, 10 | format only |
BM | Bermuda | – | 2 | format only |
BN | Brunei Darussalam | Bank Branch Code | 6 | format only |
BO | Bolivia, Plurinational State Of | Bolivian Codigo de Banco | 5 | format only |
BR | Brazil | Identificador do Sistema de Pagamentos Brasileiro | 8, 7 | format only |
BS | Bahamas | Bank Branch Code | 8 | format only |
BT | Bhutan | Bhutan Routing/Bank Identification Code | 9 | format only |
BW | Botswana | Sort Code | 6 | format only |
BY | Belarus | Belarus Interbank Settlement Centre | 8, 11 | format only |
BZ | Belize | Bank Code | 8 | format only |
CA | Canada | Routing number | 9, 3 | format only |
CF | Central African Republic | CEMAC Bank/Branch Code | 10 | format only |
CG | Congo | CEMAC Bank/Branch Code | 10 | format only |
CH | Switzerland | Bankenclearing Nummer | 5, 6 | format only |
CI | Cote D'Ivoire | Clearing Code | 5, 10 | format only |
CK | Cook Islands | Bank State Branch | 6 | format only |
CL | Chile | CLRN Bank/Branch Code | 3 | format only |
CM | Cameroon | CEMAC Bank/Branch Code | 10 | format only |
CN | China | China National Advanced Payment System code | 12 | format only |
CO | Colombia | CÓDIGO DE COMPENSACION ELECTRONIC | 2, 5, 4, 3 | format only |
CR | Costa Rica | Código de Entidad | 4 | no account format |
CV | Cabo Verde | Número de Identificação | 8 | format only |
CY | Cyprus | Kodikos Trapezas | 8 | format only |
CZ | Czechia | bankovní kód | 4 | under review |
DE | Germany | Bankleitzahl | 8 | yes |
DK | Denmark | Registreringsnummer | 4 | format only |
DM | Dominica | Bank Branch Transit Code | 8 | format only |
DO | Dominican Republic | Bank Code | 4 | format only |
DZ | Algeria | Bank Code | 3, 8 | format only |
EC | Ecuador | Código Compensación | 8, 2 | format only |
EE | Estonia | Pangakood | 2 | yes |
EG | Egypt | – | 8 | format only |
ES | Spain | código bancario | 9, 8 | under review |
FI | Finland | Rahalaitostunnus | 3 | no account format |
FJ | Fiji | Bank State Branch | 6 | format only |
FO | Faroe Islands | Registreringsnummer | 4 | format only |
FR | France | Code Banque/Guichet | 10 | yes |
GA | Gabon | CEMAC Bank/Branch Code | 10 | format only |
GB | United Kingdom | Sort Code | 6 | yes |
GD | Grenada | Bank Branch Transit Code | 8 | format only |
GE | Georgia | ბანკის კოდი | 2, 8 | no account format |
GF | French Guiana | Code Banque/Guichet | 10 | no account format |
GG | Guernsey | Sort Code | 6 | format only |
GH | Ghana | Sort code | 6 | format only |
GI | Gibraltar | Sort Code | 6 | format only |
GL | Greenland | Registreringsnummer | 4 | format only |
GM | Gambia | – | 6 | format only |
GN | Guinea | – | 6 | format only |
GP | Guadeloupe | Code Banque/Guichet | 10 | no account format |
GQ | Equatorial Guinea | CEMAC Bank/Branch Code | 10 | format only |
GR | Greece | Kodikos Trapezas/Katastimatos | 7 | format only |
GT | Guatemala | Código Bancario | 2, 3, 8 | format only |
GU | Guam | Routing Number | 9 | format only |
GW | Guinea-Bissau | Clearing Code | 5, 10 | format only |
GY | Guyana | Routing Code | 8 | format only |
HK | Hong Kong | Clearing Code | 6, 3 | format only |
HN | Honduras | Código de Entidad | 6, 8, 3 | format only |
HR | Croatia | Vodeći broj banke | 7 | yes |
HT | Haiti | – | 9 | format only |
HU | Hungary | Bankfiók-kód | 8 | under review |
ID | Indonesia | Clearing Code | 7, 8, 3 | format only |
IE | Ireland | Irish Payment Services Organisation | 6 | format only |
IL | Israel | Routing Code | 6 | format only |
IM | Isle of Man | Sort Code | 6 | no account format |
IN | India | Indian Financial System Code | 11, 9, 4 | format only |
IQ | Iraq | – | 11, 8, 4 | format only |
IS | Iceland | Bankanumer | 4 | format only |
IT | Italy | Associazione Bancaria Italiana Codice Avviamento Bancario | 10 | yes |
JE | Jersey | Sort Code | 6 | format only |
JM | Jamaica | Bank Transit Code | 8, 9 | format only |
JO | Jordan | Bank Branch Code | 2 | format only |
JP | Japan | Zengin Code | 7, 4 | format only |
KE | Kenya | Sort code | 5 | format only |
KG | Kyrgyzstan | Kyrgyz BIK | 6 | format only |
KH | Cambodia | Cambodian Clearing Code | 6 | format only |
KM | Comoros | Bank Code | 5 | format only |
KN | Saint Kitts and Nevis | Bank Branch Transit Code | 8 | format only |
KR | Korea, Republic Of | Bank Code | 7, 3, 4 | format only |
KW | Kuwait | Bank Code | 4 | format only |
KZ | Kazakhstan | Bank Identifier Code | 3 | no account format |
LB | Lebanon | – | 4 | no account format |
LC | Saint Lucia | Bank Branch Transit Code | 8 | format only |
LI | Liechtenstein | Bankenclearing Nummer | 5, 6 | format only |
LK | Sri Lanka | Bank Branch Code | 7 | format only |
LS | Lesotho | Bank Branch Code | 6 | format only |
LT | Lithuania | Banko kodas | 5 | no account format |
LU | Luxembourg | Bank Code | 3 | no account format |
LV | Latvia | Bankas Kods | 4 | no account format |
MA | Morocco | Guichet Bancaire Code | 10, 6 | under review |
MC | Monaco | Code Banque/Guichet | 10 | yes |
MD | Moldova, Republic Of | Moldova Bank Identifier Code | 11 | format only |
ME | Montenegro | Bank Identifying Number | 3 | yes |
MG | Madagascar | – | 10, 8 | format only |
MK | North Macedonia | Bank Code | 3, 11 | yes |
ML | Mali | Clearing Code | 5, 10 | format only |
MN | Mongolia | банкны код | 6, 8 | format only |
MO | Macao | – | 3 | format only |
MP | Northern Mariana Islands | Routing Number | 9 | no account format |
MQ | Martinique | Code Banque/Guichet | 10 | no account format |
MR | Mauritania | Code Agence | 10 | no account format |
MS | Montserrat | Bank Branch Transit Code | 8 | format only |
MT | Malta | Sort Code | 5 | format only |
MU | Mauritius | Bank Code | 4, 6 | no account format |
MW | Malawi | MWKSORT Code | 6 | format only |
MX | Mexico | Clave Bancaria Estandarizada | 6, 3 | under review |
MY | Malaysia | Bank Branch Code | 9, 4 | format only |
MZ | Mozambique | – | 2, 8, 4 | format only |
NA | Namibia | Bank Branch Code | 6 | format only |
NC | New Caledonia | Code Banque/Guichet | 10 | no account format |
NE | Niger | Clearing Code | 5, 10 | format only |
NG | Nigeria | Sort Code | 9, 3, 6 | format only |
NI | Nicaragua | Check Clearing Code | 2 | format only |
NL | Netherlands | Bank Code | 4 | format only |
NO | Norway | Registernummer | 4 | under review |
NP | Nepal | Bank Code | 8, 4 | format only |
NZ | New Zealand | Bank Code | 6 | format only |
PA | Panama | – | 3, 9 | format only |
PE | Peru | Codigo Bancario | 3, 6 | format only |
PF | French Polynesia | Code Banque/Guichet | 10 | no account format |
PG | Papua New Guinea | Bank State Branch | 6 | format only |
PH | Philippines | BRSTN | 9, 6, 11 | format only |
PK | Pakistan | Bank Branch Code | 7, 6, 12, 3 | format only |
PL | Poland | Numer Rozliczeniowy Oddzialu-banku | 8 | format only |
PM | Saint Pierre and Miquelon | Code Banque/Guichet | 10 | no account format |
PR | Puerto Rico | Routing Number | 9 | format only |
PS | Palestine, State Of | Bank Branch Code | 5, 2 | no account format |
PT | Portugal | Código de Banco/Balcão | 8 | yes |
PY | Paraguay | – | 4, 7 | format only |
QA | Qatar | – | 2 | format only |
RE | Reunion | Code Banque/Guichet | 10 | no account format |
RO | Romania | cod bancar | 4 | no account format |
RS | Serbia | банковни код | 3 | yes |
RU | Russian Federation | Bank Identification Code | 9 | format only |
RW | Rwanda | Code Institution | 3 | format only |
SA | Saudi Arabia | Saudi Arabia Routing Number | 2 | format only |
SB | Solomon Islands | Bank State Branch | 6 | format only |
SC | Seychelles | Bank Code | 6 | format only |
SE | Sweden | clearingnummer | 4, 5 | under review |
SG | Singapore | National Clearing Code | 7 | format only |
SI | Slovenia | bančna koda | 5 | yes |
SK | Slovakia | číslo banky | 4 | under review |
SL | Sierra Leone | – | 6 | format only |
SM | San Marino | Associazione Bancaria Italiana Codice Avviamento Bancario | 10 | format only |
SN | Senegal | Clearing Code | 5, 10 | format only |
ST | Sao Tome and Principe | – | 8, 4 | no account format |
SV | El Salvador | Bank Code | 2, 4 | format only |
SZ | Eswatini | Bank Branch Code | 6 | format only |
TD | Chad | CEMAC Bank/Branch Code | 10 | format only |
TG | Togo | Clearing Code | 5, 10 | format only |
TH | Thailand | Bank Code | 7, 3 | format only |
TJ | Tajikistan | Bank Identification Code | 9 | format only |
TL | Timor-Leste | Bank Number | 4, 8 | under review |
TN | Tunisia | Code Agence | 5 | under review |
TO | Tonga | Bank State Branch | 6 | format only |
TR | Turkiye | Banda Kodu | 9, 12 | format only |
TW | Taiwan | Bank Code | 7, 3 | format only |
TZ | Tanzania, United Republic Of | Sort Code | 6 | format only |
UA | Ukraine | MFO code | 6 | format only |
UG | Uganda | Sort Code | 6 | format only |
US | United States of America | Routing Number | 9, 4, 6 | format only |
UY | Uruguay | Código de Banco Uruguayo | 3 | format only |
UZ | Uzbekistan | MFO code | 5 | format only |
VA | Holy See | codice identificativo | 3 | no account format |
VC | Saint Vincent and the Grenadines | Bank Branch Transit Code | 8 | format only |
VE | Venezuela (Bolivarian Republic Of) | Código de Banco | 4 | format only |
VI | Virgin Islands (U.S.) | Routing Number | 9 | no account format |
VN | Viet Nam | – | 8, 6 | format only |
VU | Vanuatu | Bank State Branch | 6 | format only |
WF | Wallis and Futuna | Code Banque/Guichet | 10 | no account format |
WS | Samoa | Bank State Branch | 6 | format only |
XK | Kosovo, Republic Of | – | 4 | yes |
YT | Mayotte | Code Banque/Guichet | 10 | no account format |
ZA | South Africa | National Clearing Code | 6 | format only |
ZM | Zambia | Sort Code | 6 | format only |
ZW | Zimbabwe | Sort Code | 5 | format only |
| Value | Meaning |
|---|---|
BANK | Universal bank |
COOP | Cooperative bank |
CBMA | Central bank / monetary authority |
ASSM | Asset manager |
CORP | Corporate |
CRUN | Credit union |
ICSD | International central securities depository |
INVM | Investment bank |
MONX | Money exchange |
NPAA | National payment association |
PYMI | Payment institution |
SLBH | Saving-lending bank, housing |
SUFI | Supervised financial institution |
XCHG | Exchange |
OTHR | Other |
| Value | Meaning |
|---|---|
SUPE | SWIFT 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 |
MCFI | Financial institution in a MA-CUG |
NOSU | Electronic trade confirmation provider, securities proxy voting agency, travellers’ cheque issuer; treasury ETC service provider |
NSWB | Non-connected BIC |
PSPA | Payment system participant |
SSPA | Securities system participant |
SWIF | Undefined institution |
CRES | CREST participant |
DOMS | SWIFT internal subtype for domestic customers (AU-NPP, JV India) |
PASO | Partner |
PRFI | Non-SWIFT user |
BEID | Business entity identifier (corporate) |
COOP | Cooperation agreement with SWIFT for the use of messaging services (corporate) |
CORP | Corporate |
MCCO | Non-financial institution participant in a MA-CUG |
SMDP | Securities market data provider |
TRCO | Treasury counterparty |
The three-character codes that can appear concatenated in service_codes: SWIFT services and EU-wide infrastructures first, then national market infrastructures by country.
| Code | Service | Country |
|---|---|---|
ABE | EBA CLEARING - EURO1/STEP1 (EBA) | network / EU |
EB+ | EBA CLEARING - EURO1/STEP1 REACHABLE INSTITUTIONS | network / EU |
EBA | EBA CLEARING - EURO1 | network / EU |
ERP | EBA CLEARING - STEP1 | network / EU |
FIN | MANY-TO-MANY FIN PAYMENT SERVICE | network / EU |
MAC | Financial institution restricted to a Member-Administered Closed User Group (MA-CUG) | network / EU |
SCO | SCORE FIN | network / EU |
TG+ | TARGET2 INDIRECT PARTICIPANTS and addressable BICs | network / EU |
TGT | TARGET2 DIRECT PARTICIPANTS | network / EU |
RPD | RAPID-FINCOPY RPD (LIVE) | AE United Arab Emirates |
AIP | ALBANIAN INTERBANK PAYMENT SYSTEM | AL Albania |
PTR | SISTEMA DE LIQUIDACO POR BRUTO | AO Angola |
CCE | CCP.CEE | AT Austria |
CSA | BULK PAYMENTS BYCLEARING SERVICE AUSTRIA | AT Austria |
OEK | OEK CSD | AT Austria |
ACL | AUSTRACLEAR CLOSED USER GROUP | AU Australia |
PDS | PAYMENT DELIVERY SYSTEM/RITS-RTGS | AU Australia |
AZM | AZIPS - AZERBAIJAN INTERBANK PAYMENT SYSTEM | AZ Azerbaijan |
BAP | BOSNIA I HERCEGOVINA RTGS | BA Bosnia And Herzegovina |
BDS | CBRTGS - CENTRAL REAL TIME GROSS SETTLEMENT SYSTEM | BB Barbados |
BHR | BAHRAIN RTGS | BH Bahrain |
CBS | BAHRAIN SSS (SECURITIES SETTLEMENT SYSTEM) | BH Bahrain |
BPS | BURUNDI RTGS SYSTEM FOR EAPS | BI Burundi |
BHS | BAHAMAS RTGS | BS Bahamas |
BIS | BOTSWANA INTERBANK SETTLEMENT SYSTEM | BW Botswana |
CAD | LVTS - LARGE VALUE TRANSFER SYSTEM | CA Canada |
CDS | MT566 - CORPORATE ACTION CONFIRMATION DELIVERY SERVICE | CA Canada |
BCG | CSD SERVICE OF DRC | CD Congo, The Democratic Republic Of The |
CBC | RTGS OF CENTRAL BANK OF CONGO | CD Congo, The Democratic Republic Of The |
PCH | SWISS INTERBANK CLEARING (SIC) | CH Switzerland |
UTP | UBS THIRD PARTY FIN MT971 | CH Switzerland |
SCP | SISTEMA CHILENO DE PAGOS INTERBANCARIOS | CL Chile |
SYG | SYGMA | CM Cameroon |
CCC | COMPENSACION DE DIVISAS DE COLOMBIA | CO Colombia |
UNI | CSD PRAGUE FIN-CUG | CZ Czechia |
EP+ | EPM-ECB | DE Germany |
DD+ | KRONOS - DANISH KRONE RTGS | DK Denmark |
DDK | KRONOS - DANISH KRONE RTGS | DK Denmark |
DKD | DANMARKS NATIONAL BANK | DK Denmark |
VPD | VP SECURITIES A/S CUG | DK Denmark |
SDD | SIPARD LBTR | DO Dominican Republic |
ALG | BANK OF ALGERIA - GROSS PAYMENT SYSTEM | DZ Algeria |
MCS | MCDR_FIN_CUG | EG Egypt |
PEG | PAYMENT SYSTEM IN EGYPT | EG Egypt |
CAM | SPI | ES Spain |
RTC | REGIS-TR CORPORATE STATUS | ES Spain |
FBN | RTGS FIJI | FJ Fiji |
AIM | BLOOMBERG ASSET AND INVESTMENT MANAGER | GB United Kingdom |
BFI | BLACKROCK | GB United Kingdom |
BMF | BLOOMBERG MONEY MARKET FUNDS | GB United Kingdom |
CCS | BROADRIDGE MATCHING | GB United Kingdom |
FXG | BLOOMBERG FX SETTLEMENT SERVICE | GB United Kingdom |
GSS | SWIFTNET BULK PAYMENTS BY VOCALINK | GB United Kingdom |
GST | GSTP GLOBAL STRAIGHT THROUGH PROCESSING | GB United Kingdom |
SSE | BLOOMBERG SELL SIDE EXECUTION AND ORDER MANAGEMENT SOLUTIONS | GB United Kingdom |
STG | CHAPS STERLING (RTGS) | GB United Kingdom |
STP | BLOOMBERG STRAIGHT THROUGH PROCESSING | GB United Kingdom |
TLF | LCH - TRADE LEG FEED | GB United Kingdom |
TOM | BLOOMBERG SELL SIDE TRADE ORDER MANAGEMENT SOLUTIONS | GB United Kingdom |
TRM | BLOOMBERG CORPORATE TREASURY MANAGEMENT | GB United Kingdom |
GIS | GHANA INTERBANK SETTLEMENT SYSTEM (GISS) | GH Ghana |
CBG | GAMBIA RTGS | GM Gambia |
GNR | REPUBLIQUE DE GUINEE RTGS SERVICE | GN Guinea |
HKL | HONG KONG RTGS SERVICE | HK Hong Kong |
SPH | LBTR HONDURAS - FIN COPY (LIVE) | HN Honduras |
HRK | HSVP - HRVATSKI SUSTAV VELIKIH PLACANJA | HR Croatia |
HUF | VIBER - VALOS IDEJU BRUTTO ELSZAMOLASI RENDSZER | HU Hungary |
KLR | CLOSED USER GROUP FOR HUNGARIAN SECURITIES MARKET | HU Hungary |
CBI | IRIS | IE Ireland |
BIR | ISRAELI RTGS | IL Israel |
TAC | ISRAEL: TAC - TACH CUG (LIVE) | IL Israel |
XBC | XBOMINBB_CUG | IN India |
ISG | ICELAND RTGS SERVICE | IS Iceland |
JOD | RTGS-JO | JO Jordan |
JOE | JORDAN CROSS BORDER REPORTING | JO Jordan |
JOF | JORDAN CROSS BORDER REPORTING | JO Jordan |
KPS | KENYA ELECTRONIC PAYMENT SETTLEMENT SYSTEM (KEPSS) | KE Kenya |
CBE | EASTERN CARIBBEAN PAYMENTS SYSTEM | KN Saint Kitts And Nevis |
LKB | LANKASETTLE | LK Sri Lanka |
LRR | LIBERIA RTGS SERVICE | LR Liberia |
LSW | LESOTHO WIRE | LS Lesotho |
LA+ | LATVIA'S ACCESS TO TARGET | LV Latvia |
LVL | STARPBANKU AUTOMATIZETA MAKSAJUMU SISTEMA | LV Latvia |
MUP | MACSS - MAURITIUS AUTOMATED CLEARING AND SETTLEMENT SYSTEM | MU Mauritius |
RBM | MALAWI: RTGS SERVICE - MITASS | MW Malawi |
RTS | MALAYSIA: BANK NEGARA MALAYSIA - RENTAS | MY Malaysia |
NAM | NAMIBIAN INTERBANK SETTLEMENT SYSTEM (NISS) | NA Namibia |
INC | INTERPAY CUG | NL The Netherlands |
MCF | MCF - EMCF CUG | NL The Netherlands |
NBO | NORGES BANK RTGS SERVICE | NO Norway |
NOC | NICS - NORWEGIAN INTERBANK CLEARING SYSTEM | NO Norway |
OSC | OSC EQUITY CLEARING | NO Norway |
AVP | AVP - ASSURED VALUE PAYMENTS | NZ New Zealand |
AVT | RESERVE BANK OF NEW ZEALAND - AVT | NZ New Zealand |
NSI | NZClear Interface | NZ New Zealand |
BSP | PPS - PHILIPPINES PAYMENT SYSTEM | PH Philippines |
KDP | POLAND: KDPW_FIN_CSD | PL Poland |
PLN | POLAND: SORBNET2 - POLAND RTGS | PL Poland |
PMA | PMA RTGS | PS Palestine, State Of |
PPY | SISTEMA DE PAGOS DEL PARAGUAY | PY Paraguay |
DEC | CSDA_FIN_CUG | RO Romania |
ROB | ROMANIAN GSRS (NEW) | RO Romania |
ROL | REPORT - ROMANIAN ELECTRONIC PAYMENT OPERATIONS IN REAL-TIME | RO Romania |
RON | NEW REGIS SERVICE - RON | RO Romania |
ROS | ROMANIAN GSRS | RO Romania |
RWS | RWANDAN RTGS SYSTEM FOR EAPS | RW Rwanda |
SAR | SARIE - SAUDI ARABIAN RIYAL INTERBANK EXPRESS | SA Saudi Arabia |
BCC | BGC CLEARING CUG | SE Sweden |
SE+ | RIX | SE Sweden |
SEC | RX | SE Sweden |
SSK | RIX - REAL-TIME GROSS SETTLEMENT IN SEK | SE Sweden |
MEP | MEPS+ : SINGAPORE RTGS SYSTEM | SG Singapore |
MEQ | TEST SINGAPORE RTGS SYSTEM | SG Singapore |
MEU | TEST SERVICE FOR MEPS (INTERNAL TESTING) | SG Singapore |
SLF | SIERRA LEONE RTGS SERVICE | SL Sierra Leone |
SLR | SIERRA LEONE RTGS SERVICE SLISS | SL Sierra Leone |
BCA | STAR - UEMO A MI-CUG | SN Senegal |
IPS | SWAZILAND INTERBANK PAYMENTS AND SETTLEMENTS SYSTEM | SZ Swaziland |
ERS | ECOBANK RAPID TRADE (USD) | TG Togo |
ERU | ECOBANK RAPID TRADE (EUR) | TG Togo |
THB | BAHTBNET/2 - THAILAND PAYMENT SYSTEM | TH Thailand |
DVP | TAKASBANK DVP SETTLEMENT SYSTEM | TR Turkey |
TTD | SAFE-TT | TT Trinidad And Tobago |
TWI | TAIWAN FOREIGN CURRENCY DIRECT DEBIT SERVICE | TW Taiwan |
TWP | FOREIGN CURRENCY RTGS SERVICE | TW Taiwan |
TIS | TANZANIA INTERBANK SETTLEMENT SYSTEM (TISS) | TZ Tanzania, United Republic Of |
UIS | UGANDA NATIONAL INTER-BANK SETTLEMENT (UNIS) SYSTEM | UG Uganda |
BTC | FUNDPLICITY SERVICE | US United States Of America |
CLN | CLN - CLSNET FINCOPY SIT/PERF | US United States Of America |
COT | LOAN/SERV CLEAR FIN | US United States Of America |
FAC | FedACH | US United States Of America |
FWR | FedWIRE | US United States Of America |
OMG | Omgeo (INTELLIGENT TRADE MANAGEMENT SOLUTIONS) | US United States Of America |
PEF | PERES OPERATIONS (LIVE) | US United States Of America |
CUY | FIN COPY FOR THE CENTRAL BANK OF URUGUAY | UY Uruguay |
PVE | PVE - PAYMENTS SYSTEM VENEZUELA | VE Venezuela (Bolivarian Republic Of) |
YVE | LBTR VENEZUELA | VE Venezuela (Bolivarian Republic Of) |
MOS | SAMOS - SOUTH AFRICAN MULTIPLE OPTION SETTLEMENT | ZA South Africa |
RCH | BANKSERVAFRICA RCH | ZA South Africa |
SRS | SIRESS FIN COPY SERVICE | ZA South Africa |
ZAS | STRATE - SHARE TRANSACTIONS TOTALLY ELECTRONIC | ZA South Africa |
ZCL | SOUTH AFRICA FX FIN COPY | ZA South Africa |
ZDS | SOUTH AFRICA DS FIN COPY | ZA South Africa |
ZVA | SOUTH AFRICAN VALUE ADDED PAYMENTS SYSTEM | ZA South Africa |
ZIS | ZAMBIA INTERBANK PAYMENT & SETTLEMENT SYSTEM (ZIPSS) | ZM Zambia |
CCH | COMESA REPSS PAYMENT SYSTEM | ZW Zimbabwe |
ZET | ZETSS - ZIMBABWE ELECTRONIC TRANSFER AND SETTLEMENT SYSTEM | ZW Zimbabwe |
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.
<?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><?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><?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>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.
https://api.iban.com/clients/api/v4/services/?api_key=YOUR_API_KEY&format=jsonhttps://api.iban.com/clients/api/v4/services/?api_key=YOUR_API_KEY&format=xmlThe 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.
| Field | Type | Description |
|---|---|---|
service_name | string | Name of the service as shown under My Services. The Bank Suite entry is named BankSuite. |
credits | number or string | Remaining queries. Services without a quota return the string Unlimited instead of a number, so test the type before comparing. |
expiry_date | string | Expiry date of the service, YYYY-MM-DD. Requests after this date are refused as expired. |
service_expired | 0 or 1 | 1 when the service has expired. |
| Term | Meaning |
|---|---|
| NID | National 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 directory | The 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. |
| BIC | Business Identifier Code (ISO 9362), 8 or 11 characters. bic8 is the institution part, branch_bic the branch part. |
| Connected BIC | The 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. |
| LEI | Legal Entity Identifier (ISO 17442), the 20-character code of a legal entity. |
| CHIPS UID | Universal Identifier in CHIPS, the US dollar clearing house. |
| Check digit | A 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 code | Three-character code of a SWIFT service or a market infrastructure the BIC participates in, concatenated in service_codes. |