Overview
An ABA routing number lookup API: use it as a routing number checker or routing number validation API in ACH payment forms, payroll and payout onboarding. Send a nine-digit US routing number: input that fails the ABA mod-10 check digit is rejected with a 400 before any lookup, and a valid number returns the bank name from a routing number database that is refreshed on a weekly cycle. Each match includes the routing type (primary, thrift, electronic or government), the Federal Reserve district by name and number, whether the number is a FedACH participant and whether it can receive Fedwire Funds transfers, and, for banks that publish a routing number list by state, the states the bank assigns the number to. Paid plans add the registered street address, city and ZIP code, office and record-type codes, the successor routing number when a bank has retired one, the Fedwire telegraphic name with funds and book-entry eligibility, and the servicing Federal Reserve office and change date from the FedACH directory.
Live Test Routing Number Grounding Data Source →
The tool
Once your client is connected to the VerveContext server, this appears in its tool list as RoutingNumberGroundingData. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "RoutingNumberGroundingData",
"arguments": {
"routing": "121000358"
}
}You do not name the tool yourself; the model picks it. Asking about 121000358 in the terms this source covers is enough for it to reach for RoutingNumberGroundingData on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every source in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervecontext": {
"url": "https://api.vervecontext.com/v1/mcp"
}
}
}https://api.vervecontext.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
routingRequired | string | The routing number to lookup information about length 9–9 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"routing_number": "121000358",
"office_code": "O",
"record_type_code": "1",
"new_routing_number": "000000000",
"bank": "BANK OF AMERICA, N.A.",
"address": "8001 VILLA PARK DRIVE",
"city": "HENRICO",
"state": "VA",
"zip": "23228",
"zip_extension": "0000",
"country": "US",
"federal_reserve_district": "San Francisco",
"federal_reserve_district_number": 12,
"federal_reserve_states": [
"AK",
"AS",
"AZ",
"CA",
"GU",
"HI",
"ID",
"MP",
"NV",
"OR",
"UT",
"WA"
],
"address_in_district": false,
"states_served": [
"CA"
],
"latitude": 37.621745,
"longitude": -77.48896,
"timezone": "America/New_York",
"routing_type": "primary",
"is_valid_checksum": true,
"routing_analysis": {
"is_head_office": true,
"is_branch": false,
"is_federal_reserve_bank": false,
"is_active": true,
"replaced_by": null
}
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
routing_number | string | 121000358 | The ABA routing number for the bank |
office_codePremium | string | O | Office code designating the main office or branch location |
record_type_codePremium | string | 1 | Record type code indicating transaction type classification |
new_routing_numberPremium | string | 000000000 | New routing number if the bank has been updated |
bank | string | BANK OF AMERICA, N.A. | Name of the financial institution or bank |
addressPremium | string | 8001 VILLA PARK DRIVE | Street address the bank registered with the Federal Reserve for this routing number; national banks often use one central office for numbers in many states |
cityPremium | string | HENRICO | City of the bank's registered address for this routing number |
state | string | VA | Two-letter state of the bank's registered address; can differ from where the routing number is used (see address_in_district) |
zipPremium | string | 23228 | Five-digit postal code of the bank's registered address |
zip_extensionPremium | string | 0000 | Four-digit ZIP code extension for more precise location |
country | string | US | Country code (ISO 3166-1 alpha-2 format) |
federal_reserve_district | string | San Francisco | Federal Reserve district (e.g. San Francisco) derived from the routing number's first two digits; null for government or traveler's-cheque prefixes |
federal_reserve_district_number | number | 12 | Federal Reserve district number (1 Boston to 12 San Francisco) from the routing number's first two digits, with thrift and electronic prefixes folded back to their district; null for government or traveler's-cheque prefixes |
federal_reserve_states | array | ["AK","AS","AZ"] | Two-letter codes of the states and territories in the routing number's Federal Reserve district, i.e. where the number is issued; null for government or traveler's-cheque prefixes |
address_in_district | boolean | false | False when the registered address is outside the routing number's Federal Reserve district, typically a national bank's central office; null when there is no district or state |
states_served | array | ["CA"] | States where the bank itself tells customers to use this number for checking, ACH and direct deposit, from the bank's published routing-number list; null when the bank publishes no by-state list or the number is not on it (e.g. a wire-only number) |
latitudePremium | number | 37.621745 | Latitude of the bank office: the centre of its ZIP code, or of its city when the ZIP is one a large bank uses only for its own mail; null when neither can be placed |
longitudePremium | number | -77.48896 | Longitude of the centre of the bank office's ZIP code; null whenever latitude is null |
timezone | string | America/New_York | IANA time zone of the bank office (e.g. America/Chicago), useful for cut-off times; null whenever latitude is null |
routing_type | string | primary | Routing category derived from the routing number prefix: primary, thrift, electronic, government, or travelers_cheque |
is_valid_checksum | boolean | true | Whether the routing number passes the ABA mod-10 checksum |
routing_analysisPremium | object | {…} | Plain-language interpretation of the FRB office and record-type codes: head office vs branch, whether it is a Federal Reserve Bank, active vs superseded, and the replacement routing number if the institution was reassigned |
routing_analysis.is_head_officePremium | boolean | true | The routing number belongs to the institution's head office (office code O) |
routing_analysis.is_branchPremium | boolean | false | The routing number belongs to a branch office (office code B) |
routing_analysis.is_federal_reserve_bankPremium | boolean | false | The routing number belongs to a Federal Reserve Bank itself (record type 0) |
routing_analysis.is_activePremium | boolean | true | The routing number is in use; false when it has been superseded (record type 2) |
routing_analysis.replaced_byPremium | object | null | The routing number to use instead when this one has been superseded; null while it is active |
Why ground on it
A model can produce something that looks like this answer from its training data, and be confidently out of date or simply wrong. This source returns the current value in a shape you can check, which is the difference between an answer you can cite and one you have to hedge.
Point an evaluation at routing_number: it is the field most worth pinning a claim to, and it is either present and current or absent — never plausibly invented.
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This source is not part of VerveContext. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Direct Deposit Setup
- When onboarding new hires, payroll systems validate the entered routing number and auto-fill the financial institution name before issuing paychecks.
- ACH Transfer Verification
- To prevent transfer rejections, payment processors test mod-10 checksums and confirm the receiving bank matches customer paperwork before scheduling debits.
- Accounting Vendor Onboarding
- Procurement teams verify supplier banking details during vendor registration to catch typos and detect obsolete routing numbers before sending disbursements.
- Merchant Account Enrollment
- Reject mistyped routing numbers during merchant signup and show the bank name back to the applicant, so a wrong digit is caught before the first settlement instead of after a returned payment.
Other ways to use Routing Number Grounding Data
Set up Routing Number Grounding Data on VerveContext, or reach the same source a different way. Your VerveContext account and credits work on all of them — one key, one balance.
Related
More in Finance: