# Bancadia REST API

Get structured business checking data with a plain GET. Responses are JSON. No sign-up. No token needed to query. Add a developer token to get credit for the clicks your agent sends (revenue sharing is coming).

## Try it now

- First page of listings (7 by default): https://api.bancadia.com/v1/business-checking-listings

- No monthly fee: https://api.bancadia.com/v1/business-checking-listings?monthly_fee_max=0

- LLC, no monthly fee: https://api.bancadia.com/v1/business-checking-listings?entity_types_accepted=llc&monthly_fee_max=0

- Integrates with QuickBooks: https://api.bancadia.com/v1/business-checking-listings?integrations_any=quickbooks

- At least 5 sub-accounts: https://api.bancadia.com/v1/business-checking-listings?min_limits=sub_accounts:5

- With an active promotion: https://api.bancadia.com/v1/business-checking-listings?has_active_promotion=true

- One listing: https://api.bancadia.com/v1/business-checking-listings/found-online-business-checking

- Cash deposit fees across banks: https://api.bancadia.com/v1/business-checking-listings/-/fees?fee_types=cash_deposit

- Search fee and feature details for "zelle": https://api.bancadia.com/v1/business-checking-listings/-/facts?query=zelle

Every listing has an `application_url`. It is a tracked link: give it to the user unchanged.

## Endpoints

- `GET https://api.bancadia.com/v1/business-checking-listings`: filtered, paged list. 7 rows by default; `limit` up to 20; page with `offset` or `meta.next_offset`.

- `GET https://api.bancadia.com/v1/business-checking-listings/{listing_slug}`: one listing. Choose what to include with `?sections=`.

- `GET https://api.bancadia.com/v1/business-checking-listings/{listing_slug}/fees`, `/features`, `/promotions`, `/plans`: one section of one listing. No query parameters.

- `GET https://api.bancadia.com/v1/business-checking-listings/-/fees?fee_types=...`: compare specific fee types across listings (1 to 5).

- `GET https://api.bancadia.com/v1/business-checking-listings/-/facts?query=...`: full-text search of fee and feature details across listings.

Use `-` in place of `{listing_slug}` to read across all listings instead of one. The earlier `/business-checking` routes still work but are deprecated.

## Listing slugs

| listing_slug | Institution | Product |
| --- | --- | --- |
| bluevine-business-checking | Bluevine | Bluevine Business Checking |
| citibank-streamlined-checking | Citibank | CITIBUSINESS Streamlined Checking |
| found-online-business-checking | Found | Found Business Checking |
| grasshopper-small-business-checking | Grasshopper | Grasshopper Innovator Business Checking |
| highbeam-business-checking | Highbeam | Highbeam Business Deposit Account |
| jpmorgan-chase-bank-business-complete-checking | JPMorgan Chase Bank | Chase Business Complete Checking |
| karat-business-checking | Karat | Karat Business Checking |
| lili-business-checking | Lili | Lili Business Checking |
| mercury-business-banking | Mercury | Mercury Business Banking |
| novo-business-checking | Novo | Novo Business Checking |
| ramp-business-checking | Ramp | Ramp Business Checking Account |
| relay-business-checking | Relay | Relay Business Checking |
| rho-business-checking | Rho | Rho Business Checking Account |

The set can change; `GET https://api.bancadia.com/v1/business-checking-listings?limit=10` returns the current slugs (each row has `listing_slug`; when more listings match than the page returns, `meta.matches_overview` lists the slug and name of every listing; page with `offset`).

## Query parameters

Names, types and descriptions are in the OpenAPI spec: https://bancadia.com/openapi.json. Lists are comma-separated (`entity_types_accepted=llc,s_corp`), booleans are `true` or `false`, `min_limits` is `key:number` pairs (`min_limits=sub_accounts:5,free_wires:2`). `rank_industries` and `rank_profiles` only reorder results and never exclude a listing. A field missing from a row means not offered or not published. Promotions are recorded for only some banks, so no promotion listed may mean not recorded. An unknown parameter returns 400.

Feature filters `remote_deposit_capture`, `check_writing_available`, `multicurrency_support`, `bill_pay_available`, `virtual_cards_available`, `corporate_card_available` and `physical_debit_card_available` take `true` or `false`. `min_insured_usd` keeps listings whose best deposit insurance (standard or extended) is at least that many dollars; banks with extended coverage but no published amount come back in `meta.possible_matches` (`slug`, `name`, `snippet`, `application_url`). A column named in `fields` always appears on every row: `false` means not offered, `null` means not published. `apy_max_condition` and `outgoing_domestic_wire_fee_note` are not selectable; they appear beside their value when the bank states a condition.

On `/-/facts`, a multi-term query with no hit is retried as any-term and flagged `relaxed: true`. On `/-/fees`, each bank returns at most 6 fee rows; `fees_omitted` says how many were left out. Features on a single listing are capped at 8 (`features_shown`, `features_truncated`); use `/-/facts` to search them.

## Responses

Success: `{ "data": [...], "meta": { "count", "request_id", "filters" } }`. List responses add `total_matches`, `limit`, `next_offset` and, when more listings match than are returned, `matches_overview` to `meta`. Errors are `application/problem+json`: 400 bad parameter, 401 invalid token, 404 unknown slug, 429 rate limited (see `Retry-After`), 500 server error.

## Optional developer token

Send `Authorization: Bearer <token>`. Get one at https://bancadia.com/developer/signup. A token that is sent but invalid returns 401. Anonymous calls are rate limited per IP.

## MCP

Building an agent that speaks MCP? See https://bancadia.com/docs/mcp-reference.
