You need to verify whether the routing number 231381116 is valid and belongs to the bank you expect before you send an ACH or wire. By the end of this guide, you’ll know exactly what 231381116 corresponds to, how U.S. routing numbers work, and how to programmatically validate this number using the BankDataStack Routing Number API in your onboarding or payment initiation flows.
What routing number 231381116 corresponds to
Routing number 231381116 belongs to People’s United Bank, located in Bridgeport, Connecticut (CT), United States. If you see this routing number on an account to be credited or debited, you should expect it to identify People’s United Bank as the financial institution of record for domestic U.S. transfers.
In practice, this means that when you prepare an ACH debit or credit, or a domestic wire transfer within the U.S., you can use 231381116 to identify the bank. As a best practice, you should also verify the routing number through an authoritative reference source before initiating any transaction. That’s where the BankDataStack Routing Number API helps: it lets you confirm the issuing bank, relevant location data (city, state, country), and branch metadata in real time.
How U.S. routing numbers work
U.S. routing numbers (also called ABA routing numbers) are 9-digit identifiers used to route domestic payments between banks. They are used across ACH, checks, and domestic wires. The structure includes a check digit that helps detect common transcription or data-entry errors.
- Length and format: exactly 9 numeric digits. No letters or symbols.
- Checksum: the 9th digit is calculated using a weighted sum of the first 8 digits (weights 3, 7, 1 repeated). If the checksum fails, the number is not a valid ABA routing number.
- Usage: required for ACH debits/credits and domestic wire transfers inside the U.S. They are not used for international SWIFT messages or IBAN-based transfers.
Because routing numbers can be retired, merged, or reassigned in the context of bank reorganizations, it’s essential to validate both format (checksum) and existence (current issuer data) before executing a payment.
Why validation matters in ACH and wire flows
A mistyped routing number can lead to failed ACH batches, delayed wires, or misrouted checks. In production flows, catching these issues at the edge—when a user or partner inputs payment details—prevents downstream reconciliation work and customer support tickets.
- Onboarding: validate the routing number before you attempt micro-deposits or link an external bank account.
- Payments: verify the bank and location to detect inconsistencies in the counterparty’s details before sending an ACH or wire.
- Fraud and compliance: use a registry-backed reference API to catch invalid or unknown numbers and reduce manual reviews.
Using the BankDataStack Routing Number API
The BankDataStack API provides reference data lookups for routing numbers, returning the issuing bank and location metadata as JSON over REST. You can learn more and request access at https://www.bankdatastack.com. With an API key, you can validate routing numbers in real time, inline with your KYC/KYB or payout workflows.
Below is an example lookup for routing number 231381116 (People’s United Bank, Bridgeport, CT). The request and fields shown are illustrative of the API’s routing number lookup endpoint and response structure.
curl example
curl -s https://www.bankdatastack.com/api/v1/routing/231381116 \
-H "Authorization: Bearer YOUR_API_KEY"
Python example
import os
import requests
API_KEY = os.getenv("BANKDATASTACK_API_KEY", "YOUR_API_KEY")
ROUTING = "231381116"
resp = requests.get(
f"https://www.bankdatastack.com/api/v1/routing/{ROUTING}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=10,
)
if resp.status_code == 200:
data = resp.json()
# Use these fields for validation and display
print("Routing number:", data.get("routing_number"))
print("Bank:", data.get("bank"))
print("Branch:", data.get("branch"))
print("City:", data.get("city"))
print("State:", data.get("state"))
print("Country:", data.get("country"))
elif resp.status_code == 404:
print("Routing number not found or inactive. Please re-verify.")
else:
print("Lookup error:", resp.status_code, resp.text)
Sample JSON response
The following JSON illustrates the kind of reference data you can expect for a successful lookup of 231381116. Field names are representative of the routing number reference data returned by the API.
{
"routing_number": "231381116",
"bank": "People's United Bank",
"branch": null,
"city": "Bridgeport",
"state": "CT",
"country": "US"
}
Field usage in flows:
- routing_number: Confirm exact 9-digit input before attempting any transaction.
- bank: Display back to the user (e.g., “We found People’s United Bank”). Store as part of your counterparty profile for reconciliation.
- branch: Use when present; often null or “Main Office” for institution-level routing numbers.
- city/state/country: Use as a sanity check (e.g., if the counterparty claims a different bank location, prompt for review).
Integrating validation into ACH and wire workflows
Routing number validation should happen as early as possible, ideally during data entry. Below is a pragmatic step-by-step outline you can implement in web or back-office systems.
Onboarding and account linking
- Capture routing number and account number from the user in separate fields.
- Validate routing number format locally first: 9 digits and checksum passes.
- If format is valid, call the BankDataStack Routing Number API to resolve the bank and location details.
- Display the resolved bank back to the user, and ask them to confirm it matches their institution.
- Proceed with micro-deposits or instant verification only if the API returns a positive match.
Payment initiation (ACH and wire)
- At payment creation time, re-validate the routing number via API (or cache, see below) to ensure it still resolves to the same bank.
- Match the counterparty’s bank name and location against the API result; flag mismatches for manual review.
- For ACH batches, ensure all routing numbers in the file are validated to avoid batch-level rejections.
- Log the reference data used for validation to support post-incident audits and customer support tickets.
Error handling, caching, and operational considerations
Production systems benefit from clear error handling and thoughtful caching to limit latency and unnecessary lookups while keeping data fresh.
- Not found behavior: If the API returns a not found response for 231381116, treat it as either an invalid routing number, an inactive number, or a number not present in the current reference set. Prompt the user to re-check their details or provide supporting documentation.
- Checksum failures: If the local checksum fails, skip the API call and immediately prompt the user to correct the input.
- Caching recommendations: Cache positive validations for a reasonable period (for example, 7–30 days) keyed by routing number. Invalidate or refresh the cache when you detect edits to the counterparty’s bank information, or on a scheduled basis for active payees. Keep a short TTL for “not found” results to let newly-added numbers appear quickly.
- Time zones and timestamps: Store validation timestamps in UTC so you can audit when a routing number was last checked before a transfer cut-off.
- Resiliency: Implement retry logic with exponential backoff for transient network errors, but avoid retrying checksum failures or persistent 404 “not found.”
Security, privacy, and compliance notes
Routing number validation is low risk compared to full account details, but there are a few important considerations for teams responsible for compliance and data protection:
- Do not store full card numbers in systems intended for bank routing validations. A BIN (for card processing) is the first digits of a card and is separate from bank account routing numbers. Only store what you need for ACH/wire workflows.
- Least privilege: If you operate microservices, restrict which services can call the reference data API and ensure API keys are rotated and stored in a secret manager.
- PII boundaries: The BankDataStack Routing Number API returns bank reference data, not personal data. Keep that boundary clear in your internal data classification.
Testing strategies and monitoring
Before you push to production, test the following scenarios to ensure your integration is robust:
- Valid routing number (e.g., 231381116) that resolves to People’s United Bank in Bridgeport, CT.
- Checksum-invalid routing number (e.g., alter the last digit) to confirm local validation blocks the request.
- Structurally valid but not found routing number to ensure you handle API 404 or equivalent gracefully.
- Network timeouts and 5xx responses: verify your retry policy and user-facing messages.
For ongoing monitoring:
- Track success/failure rates of routing lookups.
- Alert when not found rates spike, which may indicate a UI input issue or upstream data problem.
- Log bank names returned alongside user-entered institution names to identify mismatches.
Putting it all together for routing number 231381116
When a user submits 231381116, your service should:
- Check for 9 digits and verify the checksum.
- Call the BankDataStack Routing Number API for 231381116.
- Expect the response to identify People’s United Bank in Bridgeport, CT, US. Store those fields (bank, city, state, country) alongside the routing number for the counterparty profile.
- Display the bank name back to the user for confirmation.
- Proceed with ACH debit/credit or a domestic wire only if the bank and location are consistent with the user’s claim.
If the routing number does not resolve, block the initiation until the details are corrected or verified by your ops team. For repeated payees, cache the resolved data and re-verify on a schedule or when a payment exceeds a risk threshold.
Get started with BankDataStack
BankDataStack provides reference data lookups across routing numbers, SWIFT/BIC codes, IBANs, and card BINs via simple JSON over REST. To start validating routing numbers like 231381116 in your onboarding and payment flows, visit https://www.bankdatastack.com and request an API key. With a few lines of code, you can cut down on failed transfers, reduce manual reviews, and improve user confidence in the payment experience.
FAQ
Does routing number 231381116 support international transfers?
No. U.S. routing numbers are for domestic payments (ACH, checks, domestic wires). International transfers typically use SWIFT/BIC and account numbers in the destination format.
What if the BankDataStack API returns not found for 231381116?
Treat it as invalid or inactive for your purposes. Ask the user to re-check the number or provide documentation. You can retry later in case of recent updates, but do not send funds until it resolves.
How often should I refresh cached routing number data?
A practical approach is every 7–30 days for active payees, or on-demand before high-value transfers. Keep a shorter TTL for not found results.
Can I detect typos without an API call?
Yes. Run the 9-digit checksum locally. If it fails, block immediately. If it passes, use the API to confirm existence and issuer details.
Where do I get an API key?
Go to https://www.bankdatastack.com and sign up to obtain an API key. Then add the Authorization header as shown in the curl and Python examples above.
Ready to validate routing numbers programmatically? Visit https://www.bankdatastack.com to get your API key and plug routing verification into your onboarding or payment flows today.




