Free REST API for validating IBAN, US routing numbers, and UK sort codes. No authentication required. CORS enabled for browser use.
POST https://bankcheck.dev/api/v1/validate
GET https://bankcheck.dev/api/v1/validate?q={bank_number}
Both methods return the same JSON response. Use POST for programmatic integrations, GET for quick testing.
curl "https://bankcheck.dev/api/v1/validate?q=DE89370400440532013000"curl "https://bankcheck.dev/api/v1/validate?q=021000021"curl -X POST https://bankcheck.dev/api/v1/validate \
-H "Content-Type: application/json" \
-d '{"input": "20-00-00", "format": "uk-sort-code"}'| Field | Type | Description |
|---|---|---|
| input / q | string | The bank number to validate. Use 'input' in POST body, 'q' as GET query param. |
| format | string | Optional format hint: "iban", "us-routing", or "uk-sort-code". If omitted, the format is auto-detected. |
All validation outcomes (valid or invalid) return HTTP 200. The result.valid field indicates the validation result. HTTP 400 is returned only when the request itself is malformed.
{
"apiVersion": "1",
"processingTimeMs": 1,
"result": {
"valid": true,
"format": "iban",
"normalized": "DE89370400440532013000",
"errors": [],
"breakdown": {
"formatName": "IBAN",
"parts": [
{ "label": "Country", "value": "DE", "start": 0, "end": 2 },
{ "label": "Check Digits", "value": "89", "start": 2, "end": 4 },
{ "label": "Bank Code", "value": "37040044", "start": 4, "end": 12 },
{ "label": "Account Number", "value": "0532013000", "start": 12, "end": 22 }
]
},
"bankInfo": {
"bankName": "Commerzbank",
"bic": "COBADEFFXXX",
"country": "Germany",
"countryCode": "DE",
"city": "Frankfurt"
}
}
}| Field | Type | Description |
|---|---|---|
| apiVersion | string | Always "1" |
| processingTimeMs | number | Server-side processing time in milliseconds |
| result.valid | boolean | Whether the bank number passed all validation checks |
| result.format | string | null | Detected format: "iban", "us-routing", "uk-sort-code", or null |
| result.normalized | string | Input with whitespace, hyphens, and dots removed, uppercased |
| result.errors | array | Validation errors, each with code, message, and suggestion fields |
| result.breakdown | object | null | Structure breakdown with labeled parts (country code, check digits, etc.) |
| result.bankInfo | object | null | Bank lookup result with bankName, bic, country, countryCode, city |
Unlike the web interface which validates entirely client-side, API requests are processed on the server. BankCheck does not log or store input data, but if you have strict privacy requirements, use the client-side web tool instead.