API

A free, read-only JSON API for US bank routing numbers, bank profiles, and our verification proof. Every bank-verified record carries the bank's own source URL and the date we last verified it. Built for developers and AI agents.

Base URL
fin.codes/api/v1
Authentication
None — no API key
Format
JSON · CORS-open
Rate limit
30 requests/min per IP

Quick start

A verification lookup and exactly what comes back:

bash
curl https://fin.codes/api/v1/verify/021000021
json · response
{
  "routing_number": "021000021",
  "bank": "JPMorgan Chase Bank",
  "verified": true,
  "status": "verified",
  "label": "Bank-verified",
  "summary": "021000021 is bank-verified for JPMorgan Chase Bank — confirmed against the bank's own published page.",
  "proof": {
    "source_name": "Chase Wire Transfer FAQs",
    "source_url": "https://www.chase.com/digital/wire-transfer/faqs",
    "last_verified": "2026-06-29"
  },
  "canonical_url": "https://fin.codes/routing-number/021000021"
}

Live explorer

Pick an endpoint, edit the value, and send it to the live API.

GET

GET /api/v1/verify/021000021

Endpoints

  • GET/api/v1/routing-number/{number}

    The bank, what the number is for (ACH/direct deposit vs domestic wire), and the full verification block — including the bank's own source URL and the date we last verified it.

    Try /api/v1/routing-number/021000021
  • GET/api/v1/verify/{number}

    A concise verdict — bank-verified, cross-checked, or unconfirmed — with the proof.

    Try /api/v1/verify/091000022
  • GET/api/v1/bank/{slug}

    A bank profile with every routing number it lists and how each one is verified.

    Try /api/v1/bank/wells-fargo
  • GET/api/v1/banks?q={query}

    Search and filter banks — ?q= (name/state), ?state= (2-letter), or ?group= (coverage group). Returns bank summaries.

    Try /api/v1/banks?q=chase
  • GET/api/v1/ein/{ein}

    An EIN record — public companies from their own SEC filings (Filing-verified), large nonprofits from the IRS exempt-organizations file (IRS-listed) — with the source link and checked date.

    Try /api/v1/ein/710415188
  • GET/api/v1/eins?q={query}

    Search EIN records by organization name or number prefix. Returns summaries.

    Try /api/v1/eins?q=walmart
  • GET/api/v1/wire-fees?bank={slug}

    Published wire fees by bank, quoted from each bank's own fee schedule with the stated account scope and a checked date. Omit ?bank= for all banks with a published fee source.

    Try /api/v1/wire-fees
  • GET/api/v1/explain/{topic}

    Plain-English explainers — ach-vs-wire, how-we-verify, routing-vs-account, and more.

    Try /api/v1/explain/ach-vs-wire

Verification and citations

Routing responses include a verification object: a status (verified / cross-checked / unverified) and a human label, the source_name and source_url it was confirmed against, and the last_verified / last_reviewed dates. Every payload also carries a canonical_url back to the fin.codes page — please cite it.

Status codes

422
The routing number isn't 9 digits.
404
Valid format, but not in the published dataset (the body echoes what you asked for).
429
Over the rate limit; retry after the Retry-After header.
json · 404
{
  "error": "Routing number is not in the published routing dataset",
  "routing_number": "000000000"
}

Scope and limits

  • Free tier: 30 requests/min per IP, read-only GET (HTTP 429 with Retry-After over the limit).
  • US ABA routing numbers and bank/credit-union profiles, built from FDIC + NCUA data and official bank pages.
  • A routing number is public and shared by everyone at a bank — confirm any payment with your bank before sending. Not for identity or fraud decisions.

Need higher limits, bulk access, or commercial use? Contact us — we offer a higher-volume tier.

API questions

Do I need an API key?

No. The API needs no key and no signup — it's free and CORS-open, so you can call it straight from the browser or any client.

What's the rate limit?

30 requests per minute per IP on the free tier. Over that you'll get an HTTP 429 with a Retry-After header. For higher limits, contact api@fin.codes.

Is it free for commercial use?

The free tier is fine for evaluation and low-volume use. For higher limits, bulk access, or commercial use, contact api@fin.codes — we offer a higher-volume tier.

How does fin.codes verify a routing number?

Bank-verified numbers are confirmed against the bank's own published page; the response carries that page's URL and the date we last verified it. Cross-checked numbers appear consistently across multiple public directories but aren't confirmed by the bank; unconfirmed numbers have weaker support and are kept out of the index until reviewed.

What's the difference between the ACH and wire routing number?

Use the ACH/direct-deposit number for payroll and everyday electronic transfers, and the wire number for domestic wires. At many banks they're different numbers and aren't interchangeable — each API response tells you which a number is for in its transfer_types.

Is there an MCP server for AI agents?

Yes. The same verified data is available over MCP at mcp.fin.codes/mcp, with tools to look up, verify, and search routing numbers and banks. See the /mcp page for setup.

Building an AI agent?

The same verified data is available over MCP — see the MCP server for the endpoint and the tools it exposes.