API Documentation

Complete reference for BankData APIs - Routing Number, BIN Checker, and SWIFT/IBAN Validator

Introduction

Welcome to the BankData API documentation. Our comprehensive API platform provides complete banking data validation and search services:

Routing Number APIs

  • Validation with ACH/wire support
  • Search by bank, state, city, ZIP
  • Smart pagination for large datasets
  • Advanced multi-filter search

SWIFT & BIC APIs

  • SWIFT code validation & lookup
  • Search by bank, city, country
  • BIC code validation
  • Pagination support

BIN Checker API

  • Card brand identification
  • Card type detection
  • Issuer information
  • Fraud prevention

IBAN Validator API

  • ISO 13616 compliance
  • Checksum validation
  • Format verification
  • International coverage

Base URL: https://www.bankdatastack.com/api/v1

Data Coverage

US Routing Numbers

19,000+

US banks and credit unions with complete address, phone, and contact information

SWIFT/BIC Codes

3,000+

International banks across 200+ countries with branch details and code breakdowns

Card BINs

Worldwide

Credit and debit card issuers across 150+ countries with brand and type identification

IBAN Coverage

89+ Countries

All 36 SEPA zone countries plus Middle East, Caribbean, and Asia-Pacific regions

Authentication

All API requests require authentication using an API key. Include your API key in the X-API-Key header:

curl -H "X-API-Key: YOUR_API_KEY" \
  https://www.bankdatastack.com/api/v1/routing/validate

Get your API key by signing up.

Routing Number APIs

Comprehensive routing number validation, lookup, and search capabilities for US banks and credit unions. Validate routing numbers for ACH and wire transfers, and search by location or institution name.

Routing Number Validation

Verify the authenticity of U.S. bank routing numbers and retrieve comprehensive bank details. Supports both ACH and wire transfer validation for accurate and secure financial transactions.

What is a Routing Number?

A routing number (also called ABA routing number or routing transit number) is a 9-digit code used to identify financial institutions in the United States. It's used for processing checks, ACH transfers, direct deposits, wire transfers, and electronic payments.

Format: 9 digits (e.g., 026002532) assigned by the American Bankers Association (ABA)

Key Features

  • Routing number validation to verify authenticity and prevent errors
  • Bank information retrieval including name, address, city, state, zip code, and phone
  • Payment method support - determine if bank supports ACH or wire transfers
  • 18,000+ institutions covered - all U.S. banks and credit unions
  • Federal Reserve data - regularly updated from official sources
  • Real-time validation with instant response times

Use Cases

  • Payment Processing: Validate routing numbers before processing ACH or wire transfers
  • Direct Deposit Setup: Verify employee bank account details for payroll
  • Customer Onboarding: Confirm bank account legitimacy during signup
  • Check Processing: Validate routing numbers on paper and electronic checks
  • Account Verification: Ensure bank details are correct before fund transfers
  • Fraud Prevention: Detect invalid or inactive routing numbers

Payment Types Supported

ACH Transfers

Automated Clearing House transactions for direct deposits, bill payments, and electronic fund transfers between banks

Wire Transfers

Real-time electronic money transfers for same-day domestic and international transactions

Endpoint

POST /v1/routing/validate

Request Parameters

Parameter Type Required Description
routing_number string Yes 9-digit routing number

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/validate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing_number": "021000021", "payment_type": "ach"}'

Response Fields

Field Type Description
routingNumber string The validated 9-digit routing number
paymentType string Payment type: "ach" or "wire"
name string Full bank name
addressFull string Full address (city, state)
city string Bank city
state string Bank state (2-letter code)
type string Office type (e.g., "Main Office")
phone string Bank phone number
active boolean Whether the routing number is active
lastUpdated string Date of last data update (YYYY-MM-DD)

Example Response

{
  "status": "success",
  "data": {
    "routingNumber": "021000021",
    "paymentType": "ach",
    "name": "Jpmorgan Chase Bank, Na",
    "addressFull": "Tampa, FL",
    "city": "Tampa",
    "state": "FL",
    "type": "Main Office",
    "phone": "813-432-3700",
    "active": true,
    "lastUpdated": "2025-11-12"
  }
}

Example Error Responses

422 - Format Validation Failed

{
  "status": "error",
  "message": "Validation failed",
  "errors": {
    "routing_number": [
      "Routing number must be exactly 9 numeric digits. Example: \"021000021\"."
    ]
  }
}

400 - Checksum Validation Failed

{
  "status": "error",
  "message": "Routing number 123456789 failed checksum validation. Please verify the routing number is correct."
}

404 - Not Found

{
  "status": "error",
  "message": "021000099 is not a valid bank routing number!",
  "routing_number": "021000099",
  "payment_type": null
}

Search our comprehensive database of US banks and credit unions. Find institutions by name, location, state, or ZIP code with lightning-fast responses. Supports pagination for efficient handling of large result sets.

Endpoint: /api/v1/routing/database/lookup

Look up a single routing number from our comprehensive database with optional real-time refresh.

Request Parameters

Parameter Type Required Description
routing_number string Yes 9-digit routing number
refresh boolean No Force real-time data update (default: false)

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/lookup \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing_number": "113110984"}'

Success Response

{
  "status": "success",
  "message": "Routing number 113110984 found",
  "source": "database",
  "data": {
    "routingNumber": "113110984",
    "bank": "CITIZENS NATIONAL BANK",
    "address": "1320 LOOP 304 EAST",
    "city": "CROCKETT",
    "state": "TX",
    "zip": "75835",
    "phone": "(936) 544-9661",
    "dateOfRevision": "042104",
    "newRoutingNumber": "",
    "active": true
  }
}

Endpoint: /api/v1/routing/database/state

Find all banks in a specific US state with smart pagination.

Request Parameters

Parameter Type Required Description
state string Yes State code (TX, CA, NY) or full name (Texas, California). Note: ACH records often reflect the payment processing center, not HQ — e.g. Chase may appear under FL rather than NY.
limit integer No Results per page (1-10, default: 10)
page integer No Page number (default: 1)

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/state \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state": "TX", "limit": 10, "page": 1}'

Success Response

{
  "status": "success",
  "message": "Found 10 routing number(s) for state: TX on page 1",
  "state": "TX",
  "data": [
    {
      "routingNumber": "113110984",
      "bank": "CITIZENS NATIONAL BANK",
      "city": "CROCKETT",
      "state": "TX",
      "zip": "75835",
      "phone": "(936) 544-9661",
      "active": true
    }
  ],
  "pagination": {
    "current_page": 1,
    "per_page": 10,
    "total": 458,
    "total_pages": 46,
    "has_more": true
  }
}

Endpoint: /api/v1/routing/database/bank

Search routing numbers by bank name (partial matching supported).

Request Parameters

Parameter Type Required Description
bank string Yes Bank name or partial name (e.g., "CHASE", "CITIZENS")
limit integer No Results per page (1-10, default: 10)
page integer No Page number (default: 1)

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/bank \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bank": "CHASE", "limit": 10}'

Endpoint: /api/v1/routing/database/city

Find banks in a specific city with optional state filter.

Request Parameters

Parameter Type Required Description
city string Yes City name (e.g., "New York", "Los Angeles")
state string No State code to narrow results (e.g., "NY", "CA")
limit integer No Results per page (1-10, default: 10)
page integer No Page number (default: 1)

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/city \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"city": "New York", "state": "NY", "limit": 10}'

Endpoint: /api/v1/routing/database/zip

Find banks in a specific ZIP code area.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/zip \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zip": "10005", "limit": 10}'

Endpoint: /api/v1/routing/database/search

Advanced multi-filter search combining bank name, city, state, and ZIP code.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/routing/database/search \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bank": "CHASE", "city": "New York", "state": "NY"}'

BIN Checker API

Validate credit card information instantly by analyzing the Bank Identification Number (BIN). The BIN (first 6-8 digits of a card) provides real-time information about the issuing institution, card type, brand, and country of origin.

What is a BIN?

The Bank Identification Number (BIN) is the first 6 to 8 digits on a payment card. It identifies which institution issued the card and helps prevent fraudulent transactions by verifying card details during payment processing.

Key Features

  • Real-time validation of credit and debit card BINs
  • Card brand identification (Visa, Mastercard, American Express, Discover, etc.)
  • Card type detection (credit, debit, prepaid)
  • Issuer information including bank name and country
  • Fraud prevention integration for e-commerce platforms
  • Easy integration with existing payment systems

Use Cases

  • Fraud Prevention: Verify card legitimacy during e-commerce transactions
  • Payment Routing: Route transactions to appropriate payment processors
  • Card Verification: Validate card details in subscription services
  • Security Enhancement: Add extra validation layer in payment gateways
  • Compliance: Meet regulatory requirements for card validation

Global Coverage

Our BIN Checker API supports worldwide card issuers across 150+ countries, covering all major card brands including Visa, Mastercard, American Express, Discover, and more.

Note: For specific country coverage details, please contact [email protected].

Endpoint

POST /v1/bin/lookup

Request Parameters

Parameter Type Required Description
bin string Yes First 6-8 digits of card

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/bin/validate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bin": "424242"}'

Response Fields

Field Type Description
bin string The validated BIN/IIN (first 6-8 digits)
valid boolean Whether the BIN is valid
cardBrand string Card brand (VISA, MASTERCARD, AMEX, DISCOVER, etc.)
cardType string Card type (CREDIT, DEBIT, PREPAID)
cardLevel string|null Card level (Classic, Gold, Platinum, Black, etc.) - optional
cardCategory string|null Card category (Consumer, Commercial, Corporate, Government) - optional
issuerName string|null Issuing bank name - optional
issuerWebsite string|null Issuer website URL - optional
issuerPhone string|null Issuer phone number - optional
countryName string Country name where card was issued
countryCode string ISO 3166-1 alpha-2 country code

Example Response

{
  "status": "success",
  "data": {
    "bin": "424242",
    "valid": true,
    "cardBrand": "VISA",
    "cardType": "CREDIT",
    "countryName": "UNITED KINGDOM",
    "countryCode": "GB"
  }
}

Example Error Responses

422 - Format Validation Failed

{
  "status": "error",
  "message": "Validation failed",
  "errors": {
    "bin": [
      "The bin must be at least 6 characters.",
      "The bin must not be greater than 8 characters."
    ]
  }
}

400 - Invalid BIN

{
  "status": "error",
  "message": "BIN validation failed. The provided BIN may be invalid or the service is temporarily unavailable.",
  "bin": "999999"
}

IBAN Validator API

Validate International Bank Account Numbers (IBAN) with ISO 13616 compliance. Access critical banking information to verify account details, reduce errors, and ensure efficient processing of international payments.

What is an IBAN?

The International Bank Account Number (IBAN) is a standardized alphanumeric code (up to 34 characters) following the ISO 13616 standard. It uniquely identifies bank accounts across national borders, facilitating efficient and error-reduced international transactions.

Structure: Country Code (2 letters) + Check Digits (2 digits) + BBAN (up to 30 characters with account number, bank code, and branch identifier)

Key Features

  • ISO 13616 compliance for IBAN validation standards
  • Checksum validation with mathematical error detection
  • Format verification against strict international banking rules
  • 89+ countries supported including all SEPA zones
  • Real-time validation before transaction processing

Endpoint

POST /api/v1/iban/validate

Request Parameters

Parameter Type Required Description
iban string Yes International bank account number

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/iban/validate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"iban": "GB82WEST12345698765432"}'

Response Fields

Field Type Description
iban string The validated IBAN (normalized to uppercase, no spaces)
valid boolean Whether the IBAN passed MOD-97 checksum validation
countryCode string ISO 3166-1 alpha-2 country code (first 2 characters of IBAN)
checkDigits string IBAN check digits (characters 3-4)
bban string Basic Bank Account Number (characters 5 onwards)

Example Response

{
  "status": "success",
  "data": {
    "iban": "GB82WEST12345698765432",
    "valid": true,
    "countryCode": "GB",
    "checkDigits": "82",
    "bban": "WEST12345698765432"
  }
}

Example Error Responses

422 - Format Validation Failed

{
  "status": "error",
  "message": "Validation failed",
  "errors": {
    "iban": [
      "The iban must be at least 15 characters.",
      "The iban must not be greater than 34 characters."
    ]
  }
}

400 - Checksum Validation Failed

{
  "status": "error",
  "message": "IBAN checksum validation failed. The IBAN is mathematically invalid."
}

Country Coverage

Our IBAN Validator supports 89+ countries using the IBAN numbering system, including:

  • All 36 SEPA zone countries (European Union + EEA)
  • Middle East countries (UAE, Saudi Arabia, Kuwait, etc.)
  • Caribbean nations
  • Asia-Pacific markets
  • Major global banking markets

Note: For a complete list of supported countries, please contact [email protected].

SWIFT & BIC Code APIs

Comprehensive SWIFT/BIC code validation, lookup, and search capabilities. Verify codes instantly and search by bank, city, or country with pagination support.

What is a SWIFT Code?

SWIFT (Society for Worldwide Interbank Financial Telecommunication) codes, also known as BIC (Bank Identifier Code), are unique identifiers used in international transactions. They consist of 8-11 characters identifying the bank, country, location, and optionally the branch.

Structure: Bank Code (4 letters) + Country Code (2 letters) + Location Code (2 alphanumeric) + Branch Code (3 alphanumeric, optional)

Example: CHASUS33 - CHAS (JPMorgan Chase Bank) + US (United States) + 33 (New York location)

Endpoint: /api/v1/swift/lookup

Look up a single SWIFT code from our database.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/lookup \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"swift": "CHASUS33"}'

Multi-criteria search with pagination (bank, city, country).

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/search \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bank": "CHASE", "country_code": "US", "limit": 10, "page": 1}'

Endpoint: /api/v1/swift/bank

Find all SWIFT codes for a specific bank with pagination.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/bank \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bank": "SILICON VALLEY BANK"}'

Endpoint: /api/v1/swift/country

Get all SWIFT codes in a specific country with pagination.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/country \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country_code": "SG", "limit": 10}'

Endpoint: /api/v1/swift/city

Find all SWIFT codes in a specific city with pagination.

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/city \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"city": "LONDON", "country_code": "GB"}'

BIC Validation

BIC (Bank Identifier Code) and SWIFT codes are identical. Validate BIC codes and get comprehensive bank information.

Endpoint: /api/v1/bic/validate

Validate a BIC code (same as SWIFT validation).

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/bic/validate \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bic": "CHASUS33"}'

SWIFT Code Validation

Verify SWIFT/BIC codes and get comprehensive bank information. Provides detailed bank data including institution name, location, branch details, and code breakdown to ensure accurate international transfers.

Endpoint

POST /api/v1/swift/validate

Request Parameters

Parameter Type Required Description
swift string Yes SWIFT/BIC code (8-11 alphanumeric characters). Example: "CHASUS33" or "ADTVBRDF"

Example Request

curl -X POST https://www.bankdatastack.com/api/v1/swift/validate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"swift": "CHASUS33"}'

Example Response

{
  "status": "success",
  "message": "SWIFT code CHASUS33 is valid",
  "data": {
    "swiftCode": "CHASUS33",
    "bank": "JPMORGAN CHASE BANK, N.A.",
    "city": "NEW YORK",
    "branch": "",
    "address": "383 MADISON AVENUE",
    "postCode": "10179",
    "country": "United States",
    "countryCode": "US",
    "breakdown": {
      "swiftCode": "CHASUS33 or CHASUS33XXX",
      "bankCode": "CHAS - code assigned to JPMORGAN CHASE BANK, N.A.",
      "countryCode": "US - code belongs to United States",
      "locationCode": "33 - represents location, second digit '3' means active code",
      "codeStatus": "Active",
      "branchCode": "XXX or not assigned, indicating this is a head office"
    }
  }
}

Response Fields

Field Type Description
swiftCode string The validated SWIFT/BIC code
bank string Full name of the bank or financial institution
city string City where the bank is located
country string Full country name
countryCode string ISO 3166-1 alpha-2 country code
breakdown object Detailed breakdown of the SWIFT code components

Example Error Responses

422 - Format Validation Failed

{
  "status": "error",
  "message": "Validation failed",
  "errors": {
    "swift": [
      "The swift must be at least 8 characters.",
      "The swift must not be greater than 11 characters."
    ]
  }
}

400 - Invalid SWIFT Code

{
  "status": "error",
  "message": "SWIFT code validation failed. The provided SWIFT code may be invalid or the service is temporarily unavailable.",
  "swift": "INVALID12"
}

💡 Pro Tip

SWIFT codes are case-insensitive. The API automatically converts input to uppercase. Codes can be 8 characters (head office) or 11 characters (specific branch). If a branch code is not provided, the API returns the head office information.

Error Handling

BankData uses conventional HTTP response codes to indicate success or failure. All error responses follow a consistent format with a status field set to "error" and a descriptive message.

HTTP Status Codes

Code Type Description Billed
200 Success Request completed successfully ✓ Yes
400 Bad Request Checksum validation failed (routing number doesn't pass ABA algorithm, IBAN checksum invalid) or invalid data format. The request was processed but validation failed. ✓ Yes
422 Unprocessable Entity Format validation failed (e.g., routing number not 9 digits, IBAN format incorrect, missing required fields). The request format is invalid. ✓ Yes
401 Unauthorized Missing or invalid API key ✗ No
403 Forbidden Account does not have an active plan (subscription or trial required) ✗ No
404 Not Found Valid format but number/code doesn't exist in our database or doesn't support the requested payment type (e.g., routing number not found, SWIFT code invalid) ✗ No
429 Too Many Requests Rate limit exceeded (per-minute limit) or API quota exhausted ✗ No
500 Internal Server Error Unexpected server error occurred ✗ No
503 Service Unavailable External validation service temporarily unavailable ✗ No

Error Code Guidelines

  • 422 Unprocessable Entity: Used when request format is invalid (wrong number of digits, missing required fields, invalid characters). The request was well-formed but semantically incorrect.
  • 400 Bad Request: Used when the format is correct but the data fails validation algorithms (checksum validation, mathematical validation). Also used for malformed JSON or invalid parameter types.
  • 404 Not Found: Used when the format and validation pass, but the number/code doesn't exist in our database or doesn't support the requested operation.

Example Error Responses

401 - Unauthorized

{
  "status": 401,
  "success": false,
  "message": "Invalid or expired API key."
}

403 - Forbidden

{
  "status": 403,
  "success": false,
  "message": "Please subscribe to a plan to use the API."
}

429 - Rate Limit Exceeded

{
  "status": 429,
  "success": false,
  "message": "Rate limit exceeded. Maximum 60 requests per minute.",
  "rate_limit": 60,
  "retry_after": 45
}

Response Headers

Every API response includes usage and rate limit information in the response headers. These headers help you monitor your API usage and implement proper rate limiting in your application.

Header Type Description
X-RateLimit-Limit integer Maximum number of requests allowed per minute based on your plan
X-RateLimit-Remaining integer Number of requests remaining in the current minute window
X-RateLimit-Reset timestamp Unix timestamp when the rate limit window resets
X-Quota-Limit integer Monthly request quota for your plan
X-Quota-Remaining integer Remaining requests in the current monthly quota
X-Quota-Reset ISO8601 When the monthly quota resets (start of next month)
Retry-After integer Number of seconds to wait before retrying (only present on 429 responses)

Example Response Headers

HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1735689600
X-Quota-Limit: 10000
X-Quota-Remaining: 9847
X-Quota-Reset: 2025-12-01T00:00:00+00:00

💡 Pro Tip

Monitor these headers to implement intelligent rate limiting in your application. When X-RateLimit-Remaining approaches 0, implement exponential backoff or queue requests to avoid hitting rate limits. You can also monitor your usage in real-time through the dashboard.

Rate Limits

Starter Plan

60

requests per minute

Pro Plan

120

requests per minute

Business Plan

240

requests per minute

Enterprise Plan

500

requests per minute

Usage & Billing

We believe in fair and transparent billing. You are only charged for API calls that provide value to your application.

How We Count API Calls

Billable Requests (Counted Towards Quota)

Status Code Type Description
200 OK Success Valid request with successful response
400 Bad Request Client Error Malformed request or invalid parameters
422 Unprocessable Validation Error Data format is invalid (e.g., wrong IBAN format)

Non-Billable Requests (NOT Counted)

Status Code Type Why Not Charged
401 Unauthorized Auth Error Authentication issue - no processing done
403 Forbidden Auth Error Authorization failure
404 Not Found Routing Error Wrong endpoint - you haven't reached the API
429 Too Many Rate Limit Quota already exceeded
500/503 Server Error Our infrastructure problem, not your cost

Why This Approach?

  • ✓ Client errors count because we processed and validated your request
  • ✗ Server errors don't count because that's our infrastructure problem
  • ✗ Auth failures don't count because you never reached the API
  • ✗ 404s don't count because it's a routing confusion

Example Scenarios

Scenario 1: Successful Validation

Request: POST /v1/iban/validate with valid IBAN

Response: 200 OK with bank details

Counted: YES - Successful API call

Scenario 2: Invalid Format

Request: POST /v1/iban/validate with poorly formatted IBAN

Response: 422 Unprocessable Entity

Counted: YES - We validated and detected the error

Scenario 3: Wrong Endpoint

Request: POST /v1/wrong-endpoint

Response: 404 Not Found

Counted: NO - Routing error, API not reached

Scenario 4: Server Error

Request: POST /v1/iban/validate during service disruption

Response: 500 Internal Server Error

Counted: NO - Our infrastructure problem

Important Notes

  • • All requests are logged for analytics, regardless of billing status
  • • Successful validations (200 OK) count even if the data doesn't exist
  • • Monitor your usage in real-time via the dashboard
  • • Enable Soft Limits to continue making requests beyond your quota at 2x the rate

Ready to get started?

Get your API key and start validating bank data in minutes.

Get API Key