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
Each link below is a live request:
- 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. Returns 7 rows by default; setlimit(up to 20) and page withoffsetor thenext_offsetinmeta.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. These take no query parameters.GET https://api.bancadia.com/v1/business-checking-listings/-/fees?fee_types=...: compare specific fee types across listings (1 to 5 types).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; use the routes above.
Listing slugs
Already know the bank? Use its listing_slug in GET https://api.bancadia.com/v1/business-checking-listings/{listing_slug} without listing first.
| 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).
List query parameters
| Parameter | Type | Description |
|---|---|---|
| monthly_fee_max | number | Max monthly fee, USD |
| minimum_opening_deposit_max | number | Max opening deposit, USD |
| entity_types_accepted | comma-separated list | Must accept ALL: llc, s_corp, c_corp, sole_prop, partnership, nonprofit |
| available_states | comma-separated list | Two-letter codes; must serve ALL |
| insurance_type | string | fdic, ncua or uninsured |
| cash_deposit_available | boolean | |
| sub_accounts_supported | boolean | |
| rtp_supported | boolean | Any real-time rail |
| rtp_network | string | fednow, rtp_network, both or none |
| accounting_integration_available | boolean | |
| tax_integration_available | boolean | |
| expense_integration_available | boolean | |
| remote_deposit_capture | boolean | Mobile check deposit |
| check_writing_available | boolean | |
| multicurrency_support | boolean | |
| bill_pay_available | boolean | |
| virtual_cards_available | boolean | |
| corporate_card_available | boolean | |
| physical_debit_card_available | boolean | |
| interest_bearing | boolean | |
| has_active_promotion | boolean | true: only current promotions (rows include promotions); false: none. Recorded for some banks only |
| free_transactions_min | number | Min free transactions per month |
| min_insured_usd | number | Min total FDIC/extended coverage in USD; extended coverage with unpublished amount goes to possible_matches |
| apy_min | number | Min best-case rate (apy_max), decimal: 0.02 = 2%. apy_default is the standard rate |
| integrations_any | comma-separated list | Integrates with ANY, e.g. quickbooks, xero, stripe (aliases like qbo work) |
| integrations_all | comma-separated list | Integrates with ALL |
| min_limits | string | Value >= n on any plan. Keys: sub_accounts, free_cash_deposit_usd, free_wires, monthly_cash_limit_usd. Comma-separated key:number pairs, e.g. sub_accounts:12,free_wires:2. |
| rank_industries | comma-separated list | RANK ONLY, never excludes. e.g. ecommerce, restaurant_food_service, saas_tech |
| rank_profiles | comma-separated list | RANK ONLY, never excludes. e.g. early_stage_startup, vc_backed, established_smb, side_hustle |
| sort | string | monthly_fee_asc, monthly_fee_desc, apy_max_desc, apy_default_desc, minimum_opening_deposit_asc, free_transactions_desc, product_name_asc |
| fields | comma-separated list | Replaces the defaults (institution_name, product_name, monthly_fee, minimum_opening_deposit, insurance_type, apy_max, apy_default, free_transactions_per_month). Also: institution_display_name, institution_website_url, institution_type, monthly_fee_waiver_condition, entity_types_accepted, available_states, target_industries, target_business_profiles, deposit_insurance_limit, deposit_insurance_extended, deposit_insurance_extended_limit, per_transaction_fee_after_limit, outgoing_domestic_wire_fee, free_domestic_wires_per_month, outgoing_international_wire_fee, incoming_domestic_wire_fee, incoming_international_wire_fee, cash_deposit_available, cash_deposit_fee_per_100, monthly_cash_deposit_limit, interest_bearing, apy_tiers, rtp_supported, rtp_network, physical_debit_card_available, virtual_cards_available, corporate_card_available, atm_fee_reimbursement, atm_fee_reimbursement_limit, atm_network, sub_accounts_supported, check_writing_available, bill_pay_available, remote_deposit_capture, positive_pay_available, overdraft_protection_available, overdraft_line_of_credit_available, ach_debit_block_available, multicurrency_support, daily_debit_limit, accounting_integration_available, tax_integration_available, expense_integration_available, plan_tiers, promotions, last_modified, last_verified, is_verified |
| limit | integer | Rows per page |
| offset | integer | Rows to skip |
Lists are comma-separated (entity_types_accepted=llc,s_corp), booleans are true or false, and 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 the account does not offer it or the bank has not published it. 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 that offer extended coverage but have not published the amount are not in data; they come back in meta.possible_matches (slug, name, snippet, application_url). A column you name 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 the response is 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
{ "data": [ /* up to 7 listings by default */ ],
"meta": { "count": 7, "total_matches": 12, "limit": 7, "next_offset": 7,
"request_id": "uuid", "filters": { "monthly_fee_max": 0 } } }meta.total_matches is the number of matches and meta.next_offset is the offset for the next page. When more listings match than are returned, meta.matches_overview names them. The single-listing endpoint returns one object in data; section endpoints return an array. Errors are application/problem+json: 400 bad or unknown parameter, 401 invalid token, 404 unknown slug, 429 rate limited (see Retry-After), 500 server error.
Code
curl "https://api.bancadia.com/v1/business-checking-listings?entity_types_accepted=llc&monthly_fee_max=0"
const res = await fetch("https://api.bancadia.com/v1/business-checking-listings?entity_types_accepted=llc&monthly_fee_max=0")
const { data, meta } = await res.json()Optional developer token
No token needed to query. Add a developer token to get credit for the clicks your agent sends (revenue sharing is coming). Send it as Authorization: Bearer <token>. Get one at bancadia.com/developer/signup. A token that is sent but invalid returns 401. Anonymous calls are rate limited per IP.
Spec and MCP
OpenAPI 3.1 spec: https://bancadia.com/openapi.json. Building an agent that speaks MCP? See the MCP reference.