Routing Number API: Validate ABA Numbers Over REST

Routing Number API: Validate ABA Numbers Over REST

A routing number API validates a 9-digit ABA routing transit number (RTN) and returns the institution behind it. BankDataStack exposes that as POST https://www.bankdatastack.com/api/v1/routing/validate with header X-API-Key and JSON {"routing_number":"021000021"}. Optional payment_type is ach or wire — ACH and Fedwire often resolve the same RTN to different addresses.

The docs example 021000021 is JPMorgan Chase. ACH comes back as “Jpmorgan Chase Bank, Na” in Tampa, FL; wire as “JPMORGAN CHASE BANK” in New York, NY, with funds-transfer eligibility. Coverage is ~19,000 US institutions. Starter is $49.99/mo (1,000 requests, then $0.002; 60 req/min) with a 7-day trial on every plan. Docs: bankdatastack.com/docs.

Request: validate an ABA routing number

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"}'

Auto-detects payment type. To force a rail:

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"}'

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": "wire"}'

Response (ACH): 021000021

Official docs sample (lastUpdated 2025-11-12):

{
  "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"
  }
}

Response (Wire): same RTN, different record

Official docs sample (lastUpdated 2025-11-10). Note the name casing, city, and wire-only fields:

{
  "status": "success",
  "data": {
    "routingNumber": "021000021",
    "paymentType": "wire",
    "name": "JPMORGAN CHASE BANK",
    "addressFull": "NEW YORK, NY",
    "city": "NEW YORK",
    "state": "NY",
    "telegraphicName": "JPMORGAN",
    "fundsTransferEligible": "Eligible",
    "bookEntrySecuritiesTransferEligible": "Eligible",
    "lastUpdated": "2025-11-10"
  }
}

If you only store ACH and a customer pastes a wire RTN (or the reverse), the city/phone you show in the UI will be wrong. Always send payment_type when you know the rail.

Where routing validation shows up in a product

  • Payouts / marketplace withdrawals. Reject inactive RTNs (data.active) before you submit an ACH file. For wires, also check fundsTransferEligible.
  • Onboarding forms. Show the returned bank name + city so the user confirms “yes, that’s my bank” — Tampa vs New York on 021000021 is the reason you pass payment_type.
  • Support tools. Lookup by RTN beats asking the customer to spell the legal entity. BIN is a different endpoint on the same key if the form is a card, not an account number.

Go live

1. Register and start the 7-day trial.

2. Copy X-API-Key from the dashboard (not Bearer, not a query param).

3. POST https://www.bankdatastack.com/api/v1/routing/validate with {"routing_number":"021000021","payment_type":"ach"}

4. Gate checkout on data.active and, for wires, fundsTransferEligible. Cache by RTN + payment type.

FAQ: routing number API

What is an ABA routing number?

A 9-digit routing transit number assigned by the American Bankers Association. It identifies a US bank for ACH and Fedwire. BankDataStack looks it up — it does not invent checksum math in this endpoint; it returns the institution record.

Why does 021000021 show Tampa on ACH and New York on wire?

Because ACH and wire directories are different files. The same RTN can have a processing site (Tampa) and a wire desk (New York). Send payment_type.

Should I publish one blog post per routing number?

No. Rank for “routing number API” / “validate ABA”, and use well-known RTNs (like 021000021) as examples. A page per number does not help users and fragments the product.

Is there a BIN endpoint too?

Yes — POST /api/v1/bin/validate on the same key. Routing is the ABA path; BIN is cards. See the docs.

Start the 7-day trial and validate 021000021 →

Ready to get started?

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

Get API Key