API to Validate Routing Number 026009593

API to Validate Routing Number 026009593

You need to verify whether ABA routing number 026009593 is valid, active, and suitable for ACH before releasing a US bank transfer. By the end of this guide you’ll know how to validate this specific routing number via a single POST request, parse the response in Python, and integrate the check into your ACH payment or onboarding flow with proper error handling and caching.

What you’re validating when you check routing number 026009593

Routing numbers (ABA numbers) are nine-digit identifiers used by US banks to route payments. They’re used on ACH and wire transfers, and on checks. A validation step typically covers:

Illustration: API to Validate Routing Number 026009593
  • Format and checksum: the nine-digit pattern with a mod-10 weighted checksum.
  • Directory lookup: find the bank name, address, office type, and contact info.
  • Status and suitability: confirm whether the routing number is active and permitted for the selected payment rail (ACH vs wire).

For 026009593, you’ll want to confirm the bank record, ensure it’s active for ACH, and surface any metadata you may show to the end-user or log for compliance review.

Endpoint and request model

Use a single JSON POST to validate a routing number. The API returns a normalized record containing the identified bank, location, office type, phone, and status, plus the payment type you requested validation for. Authentication uses an X-API-Key header.

Endpoint:

  • POST https://www.bankdatastack.com/api/v1/routing/validate

Headers:

  • X-API-Key: YOUR_API_KEY
  • Content-Type: application/json

Body fields you’ll use for this validation:

  • routing_number: the 9-digit ABA routing number (e.g., 026009593)
  • payment_type: ach or wire depending on your transfer rail

Full API reference is available in the Documentation. To get an API key, start with the 7-day trial on the Starter plan ($49.99/mo) via Register.

Validate 026009593 via cURL

Copy-paste the following request to validate routing number 026009593 for ACH. This is the canonical call and uses the exact endpoint and fields.

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":"026009593","payment_type":"ach"}'

Sample JSON response and what it means

The following is a representative success response for this routing number. Use it to wire up your parser and field mapping. Do not hardcode values in production—always call the API—this is to show shape and semantics.

{
    "status": "success",
    "data": {
        "routingNumber": "026009593",
        "paymentType": "ach",
        "name": "Bank Of America N.a.",
        "addressFull": "Richmond, VA",
        "street": "P.O. BOX 27025",
        "city": "Richmond",
        "state": "VA",
        "zip": "23261-7025",
        "type": "Main Office",
        "phone": "800-446-0135",
        "active": true,
        "lastUpdated": "2026-10-17",
        "address": "P.O. BOX 27025"
    }
}

Key fields you’ll actually use in your flow:

  • status: success indicates the routing number was found and parsed.
  • data.routingNumber: echoes the number you validated (026009593).
  • data.paymentType: the rail you asked to validate, here ach.
  • data.name: the identified bank (Bank Of America N.a.). Display it so users can confirm the destination institution.
  • data.addressFull, street, city, state, zip: service address metadata for the routing entry. Useful for support or compliance logs.
  • data.type: office type (e.g., Main Office). Some banks have separate routing numbers for wires vs ACH; office and rail help disambiguate.
  • data.phone: bank directory contact.
  • data.active: boolean indicator that the routing entry is active; reject or flag if false.
  • data.lastUpdated: last directory update date (UTC date string). Use for cache TTL decisions.

Python example: validate then gate an ACH transfer

This Python snippet validates 026009593 for ACH before allowing a payout. It demonstrates request construction, basic error handling, and how to read the fields you need for a confirmation screen and compliance log.

import json
import os
import sys
import time
import urllib.request

API_KEY = os.environ.get("BANKDATASTACK_API_KEY", "YOUR_API_KEY")
URL = "https://www.bankdatastack.com/api/v1/routing/validate"

payload = {
"routing_number": "026009593",
"payment_type": "ach"
}
data = json.dumps(payload).encode("utf-8")

req = urllib.request.Request(
URL,
data=data,
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json"
},
method="POST"
)

try:
with urllib.request.urlopen(req, timeout=10) as resp:
body = resp.read().decode("utf-8")
j = json.loads(body)
except Exception as e:
print(f"Network or HTTP error validating routing number: {e}", file=sys.stderr)
sys.exit(1)

if j.get("status") != "success" or "data" not in j:
print("Routing validation failed or returned unexpected shape.", file=sys.stderr)
sys.exit(1)

data = j["data"]

# Hard gating rules
if not data.get("active", False):
print("Routing number is not active. Rejecting transfer.", file=sys.stderr)
sys.exit(1)

if data.get("paymentType") != "ach":
print("Routing number not validated for ACH as requested.", file=sys.stderr)
sys.exit(1)

# Display confirmation line to the operator or end-user
bank_name = data.get("name", "Unknown Bank")
city = data.get("city", "")
state = data.get("state", "")
print(f"Validated ACH routing 026009593: {bank_name} ({city}, {state})")

# Example: build a compliance log record
log_record = {
"ts": int(time.time()),
"routingNumber": data.get("routingNumber"),
"bankName": bank_name,
"officeType": data.get("type"),
"active": data.get("active"),
"lastUpdated": data.get("lastUpdated"),
"phone": data.get("phone"),
}

print(json.dumps(log_record, indent=2))

How to use these fields in ACH payment and onboarding flows

In a payment initiation form, request the customer’s routing number and account number. Before attempting the ACH transfer:

  • Call the routing/validate endpoint with payment_type=ach.
  • If active is false or status is not success, block submission and ask the user to re-check details.
  • Display the resolved bank name (e.g., “Bank Of America N.a.”) so the payer can visually confirm they picked the right bank.
  • Log the bank metadata and lastUpdated date with your payout record for auditability.

For onboarding (e.g., vendor or employee setup):

  • Validate the routing number before you store the payout method.
  • If your flow supports wires as well, run a separate validation pass with payment_type=wire to confirm that rail before enabling it.
  • Depending on your risk posture, you may do reference checks again immediately before first payout if lastUpdated is older than your cache TTL.

Format and checksum basics for ABA routing numbers

ABA routing numbers are nine digits. The last digit is a checksum calculated with a weighted sum of the first eight digits, then mod 10. Invalid checksums should be rejected early to avoid unnecessary API calls. However, checksum-validation alone cannot confirm that a number is assigned, active, or appropriate for ACH vs wire—that requires a directory lookup (as performed by the API).

Common issues you’ll catch with validation:

  • Transposed digits yielding a failing checksum or mismatched bank.
  • Numbers that once existed but are not active anymore (active=false).
  • Rail mismatches where a routing number is valid for wire but not ACH, or vice versa.

Handling “not found,” inactive, and mismatched rails

When status is not success or data is missing, treat the routing number as not found. This typically means the number fails format checks, does not exist in the current directory, or has been retired. Recommended handling:

  • Block the transfer and prompt the user to re-enter the routing number.
  • Do not auto-switch rails; if you requested ach and got a mismatch in paymentType, re-validate explicitly for wire instead of assuming suitability.
  • Log the failure reason for support triage.

If active is false, the record exists but is not currently active. Reject the transfer and instruct the user to contact their bank for an updated routing number.

Caching strategy and update cadence

The response includes lastUpdated, which you can use to inform your caching logic. Practical guidance:

  • Short-term cache: cache positive validations for a few hours to a day. Re-validate just-in-time before executing the first payout if the cached record is older than your threshold.
  • Negative results: cache briefly (e.g., 15–60 minutes) in case of temporary directory refresh windows.
  • Per-rail caching: cache distinct entries by routing number + payment_type since suitability can differ between ACH and wire.

Security and compliance notes

  • Never store full card numbers in your systems. If you validate BINs elsewhere in your stack, persist only the BIN (first digits) and necessary metadata. The routing validation in this article does not require card data.
  • Protect API keys: keep YOUR_API_KEY in server-side secrets and never expose it in client-side code.
  • Log only what you need: the bank name and routing number are generally sufficient for audit trails. Avoid storing sensitive PII alongside reference data unnecessarily.

Comparing bank identifiers at a glance

Many fintech stacks validate multiple identifier types during onboarding or payouts. The USA does not use IBAN for domestic transfers. Here’s a quick comparison to anchor terminology while keeping this article focused on routing 026009593.

Identifier Scope Example Primary Use Notes
Routing (ABA) United States 026009593 ACH and wire routing Nine digits; rail-specific suitability should be validated.
Routing (ABA) United States 021000021 ACH and/or wire routing Official fixture you can use in tests.
SWIFT/BIC International CHASUS33 Cross-border wires Identifies bank and country; not used for ACH.
IBAN International (not US) GB82WEST12345698765432 Cross-border and domestic in IBAN countries The USA does not use IBAN for domestic payments.
Card BIN Global 424242 Card issuer identification Store BINs only; never store full card PANs.

Testing, environments, and rollout tips

  • Use a sandbox environment internally by gating requests behind feature flags and pointing to your production keys only in secure server-side contexts.
  • Program defensively: handle timeouts and parse errors, and keep retry logic idempotent. Avoid retry storms on payments—fail fast when the directory says not found or active=false.
  • Instrument metrics: track validation success rate per rail and average latency. Alert if success rate drops—this can catch input regressions early (e.g., stripping leading zeroes).

Pricing and getting access

The Starter plan is $49.99 per month with a 7-day trial so you can validate routing numbers like 026009593 and wire the results directly into your onboarding and payout flows. Create your API key here: Register. For complete parameter and response-field details, visit the Documentation.

FAQ

Does validating a routing number confirm the customer’s bank account exists?
No. Routing validation confirms the bank directory details and status of the routing number itself, not whether a specific account number is open or has funds. Combine routing validation with account verification methods appropriate for your use case.

What does “active: true” guarantee?
It indicates the routing entry is active in the directory. It does not guarantee ACH acceptance for every transaction. Always submit payment_type to ensure rail suitability and handle declines from the downstream network.

How should I handle different rails (ACH vs wire)?
Validate per rail by setting payment_type accordingly. Some institutions use distinct routing numbers or configurations for ACH and wire. Cache results separately for each rail.

Can I cache validations for 026009593?
Yes. Cache positive results for a short period and re-validate if lastUpdated is older than your TTL or before a first payout. Cache negative results briefly to avoid UI thrash while allowing for directory refreshes.

Does the USA use IBAN?
No. The USA does not use IBAN for domestic payments. Use ABA routing numbers for ACH and wires, and SWIFT/BIC for cross-border wires.

Ready to validate routing number 026009593 in your flow? Create your API key and start your 7-day trial on the Starter plan: Register. For implementation details and field-by-field definitions, see the Documentation.

Ready to get started?

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

Get API Key