IBAN Validation API Documentation
The IBAN-Test REST API validates IBAN structure and check digits, returns available bank and BIC data, validates BICs and German bank accounts, and generates IBANs from bank details. Authenticate with an API token from your dashboard and integrate the JSON responses into forms, payment workflows and backend systems.
Try the online IBAN checker · Use the IBAN generator · Connect the MCP server
The complete technical reference with parameters, response schemas and test functionality is available in the OpenAPI view.
Open OpenAPI documentationAuthentication
Use the API token from your API overview as a Bearer token in the HTTP header:
Authorization: Bearer YOUR_API_TOKEN
You can find the token after logging in under API overview. If you do not have an account yet, create an API key.
Base URL
https://www.iban-test.eu/api
Endpoints
GET /v2/iban/validate?iban=...– validate an IBANGET /v2/iban/validate/{iban}– validate an IBAN as a path parameterPOST /v2/iban/validate– validate an IBAN using the request bodyGET /v2/bic/validate/{bic}– validate a BICGET /v2/bank-account/validate?bankcode=...&accountnumber=...– validate a German bank accountGET /v2/iban/generate?countrycode=...&bankcode=...&accountnumber=...– generate an IBAN
What IBAN validation checks
- Country code, character sequence and country-specific IBAN length
- IBAN check digits using the international MOD-97 checksum
- Available bank directory data such as bank name, city and BIC
A valid response confirms formal plausibility. It does not prove that an account exists, belongs to a specific person, is active or can receive payments.
Request examples
Validate an IBAN
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://www.iban-test.eu/api/v2/iban/validate?iban=DE89%203704%200044%200532%200130%2000"
Spaces in IBANs are allowed and are removed automatically before validation.
Validate a BIC
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://www.iban-test.eu/api/v2/bic/validate/COBADEFFXXX"
Validate a bank account
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://www.iban-test.eu/api/v2/bank-account/validate?bankcode=37040044&accountnumber=532013000"
Generate an IBAN
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://www.iban-test.eu/api/v2/iban/generate?countrycode=DE&bankcode=37040044&accountnumber=532013000"
Response format and error handling
All endpoints return JSON. Evaluate the HTTP response and the fields error, code, message and optional details before accepting or storing bank data.
{
"error": false,
"code": 2100,
"message": "IBAN is valid",
"details": {}
}
Use the OpenAPI reference for the current parameter and response schemas. Do not treat a checksum-valid IBAN as confirmation of account ownership.
Result codes and error handling
Check both the HTTP status and the JSON response. HTTP 200 responses can still contain errors or negative validation results. error: false alone does not confirm valid bank details. Evaluate code; the localizable message text is for display only.
For a single IBAN check, 2100 means a valid IBAN; 2200 means successful generation and 2500 means a valid BIC format. For German bank account checks, 2300 only means the check was performed: also evaluate bank.valid and konto.valid.
| JSON code | Meaning and action |
|---|---|
3100 | Invalid IBAN. Ask for corrected input; do not automatically retry the same data. |
3101 | Invalid bank code. Check and correct the bank details. |
3102 | Invalid account number. Check and correct the account details. |
3500 | Invalid BIC format. Ask for a corrected BIC. |
4002 | Missing or invalid authentication. Check the Bearer token and Authorization header. |
4003 | API quota reached. Pause further checks until quota is available again; do not start a retry loop. |
4004 | User or API access deactivated. Check the account status or contact support. |
4100 | Missing IBAN. Supply the iban parameter. |
4110 | Missing BIC. Supply a BIC. |
4201 / 4210 | Missing bank code. Supply bankcode; generation uses 4201, while bank account validation uses 4210. |
4212 / 4213 | Bank code too long (4212) or too short (4213). Check the country-specific length. |
4220 / 4222 / 4223 | Account number missing (4220), too long (4222) or too short (4223). Correct accountnumber. |
4230 / 4231 | Country code missing (4230) or invalid (4231). Check countrycode. |
4233 | IBAN could not be generated. Check the combination of country, bank code and account number. |
5001 | Internal processing error. Retry later with increasing delays and a limited number of attempts; contact support if the error persists. |
For HTTP 401, correct the authentication. For HTTP 429, respect Retry-After if present. For HTTP 5xx or network failures, use bounded retries with increasing delays. An HTML error page or a missing JSON response is not a validation result.
SEPA: direct debits, credit transfers and instant payments
IBAN validation also returns the bank’s participation in four SEPA schemes, checked against the EPC participant registers.
details.sepa.sddCore– SEPA Direct Debit Coredetails.sepa.sddB2b– SEPA Direct Debit B2Bdetails.sepa.sct– SEPA Credit Transfer (SCT)details.sepa.sctInst– SEPA Instant Credit Transfer (SCT Inst)
All four schemes are checked independently. confirmed means there is an unambiguous, current register match. unknown means participation could not be confirmed; it does not mean the bank does not support the scheme.
Each scheme returns only status and reason. The SEPA status does not change the IBAN validation result.
Example: excerpt from an IBAN validation response
{
"details": {
"sepa": {
"sddCore": {
"status": "confirmed",
"reason": "matched"
},
"sddB2b": {
"status": "confirmed",
"reason": "matched"
},
"sct": {
"status": "confirmed",
"reason": "matched"
},
"sctInst": {
"status": "confirmed",
"reason": "matched"
}
}
}
}
Meaning of reason
matched– Participation confirmedno_data– No register data availablemissing_bic– No BIC availableambiguous_bank– Ambiguous bank mappingno_match– No matching register entryambiguous_participant– Multiple matching register entriesnot_current– Participation is not currently effectivestale_data– Register data is outdatedlookup_error– Register lookup failed
Available for REST IBAN validation and the MCP tools validate_iban and validate_iban_batch. IBAN generation includes these fields when bank details are returned. The separate BIC and German bank-code/account-number checks do not return these fields.
This checks bank participation. It does not confirm account existence or eligibility, a mandate, or the success of a payment. SCT Inst confirms scheme participation, not live reachability through RT1/TIPS or guaranteed instant execution for a particular account.
Data source: European Payments Council (EPC).
MCP for AI clients
In addition to the REST API, IBAN-Test provides a Model Context Protocol server for IBAN validation. MCP exposes the same bank data functions as structured tools for compatible AI clients and agents.
Connect an MCP-capable client to this endpoint and authenticate with your API token.
https://www.iban-test.eu/mcp
Authorization: Bearer YOUR_API_TOKEN
Available MCP tools
validate_iban– validates a single IBANvalidate_iban_batch– validates multiple IBANs; each IBAN counts as one API requestgenerate_test_iban– generates an IBAN from country code, bank code and account numberibantest_bank_account_validate– validates a German bank code and account numberibantest_bic_validate– validates a BIC and returns available bank detailsget_usage_info– Shows API usage without consuming a validation request.
Functional MCP tools count against the IBAN-Test API quota just like REST requests.
Notes
- The REST API and MCP use Bearer tokens.
- The previous API using an auth code is not covered in this documentation.
- Functional requests count against the current API quota.
Frequently asked questions about the IBAN-Test API
Answers about Bearer tokens, requests, JSON responses, quotas and integrations are available in the IBAN-Test FAQ.
