An ACH vs wire routing number API is the same ABA lookup with an explicit rails flag. On BankDataStack, POST https://www.bankdatastack.com/api/v1/routing/validate with header X-API-Key and JSON routing_number plus optional payment_type: ach or wire. Omit the type to auto-detect the first available rail. Official example: 021000021 (JPMorgan Chase).
Starter is $49.99/mo (1,000 calls, then $0.002) with a 7-day trial. This H1 is ACH vs wire on one number — not IBAN, BIN, or SWIFT. Docs: bankdatastack.com (Routing). MCP worker host did not resolve at last probe — do not assume MCP is live.
Use cases
- Payout form. If the user picked ACH, send
payment_type: "ach"so you store Tampa — not the wire desk in New York. - Same-day wire. Same body with
"wire"; readfundsTransferEligiblebefore you release. - Unknown rail. Omit
payment_typeand inspect the returnedpaymentType.
Request: ACH then wire
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: official ACH sample
{
"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: official wire sample
{
"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"
}
}
Same nine-digit number; ACH city is Tampa, wire city is New York. Invalid payment_type must be ach or wire.
Go live
1. Register — 7-day trial.
2. Copy X-API-Key.
3. POST /api/v1/routing/validate twice — ach and wire.
4. Persist data.city with the rail you actually send.




