A bank API for your own accounts.
Connect Chase, Bank of America, Wells Fargo, Capital One or Citi once. Read your transactions, balances, investment holdings, investment trades, and loan balances as JSON with a scoped key. No business required.
- read-only
- 2 years of history
- from $7/mo
$curl https://api.banksync.io/v1/banks/bnk_chase/accounts/acc_8812/transactions?from=2026-09-01 \ -H "X-API-Key: bsk_live_…" { "success": true, "data": [ { "date": "2026-10-08", "description": "Trader Joe's #552", "amount": -63.18, "category": "Groceries" }, { "date": "2026-10-07", "description": "Shell Oil 5741", "amount": -48.02, "category": "Transport" }, …52 more ], "meta": { "count": 54, "hasMore": false }}200 OK · 54 rows · 112 ms
What you get in United States
- Data
- Transactions, balances, investment holdings, investment trades, and loan balances. Read-only.
- History
- Up to 2 years on the first sync.
- Consent
- Does not expire. Disconnect any time.
- Framework
- CFPB §1033 Open Banking · Consumer Financial Protection Bureau (CFPB)
- Provider
- Connections run through Plaid. CFPB §1033 compliance dates were stayed in October 2025, so access today runs on the bank’s and the provider’s data-sharing agreements.
The banks you already use
- Chase
- Bank of America
- Wells Fargo
- Citi
- Capital One
- U.S. Bank
- Truist
- Ally Bank
How it works
- 1
Connect your own bank
Sign up, then connect Chase, Bank of America, Wells Fargo, Capital One or Citi through your bank's own consent screen.
- 2
Create an API key
Workspace › Developers. Give it only the scopes it needs; revoke it any time.
banks:read - 3
Make your first call
Read transactions, balances, investment holdings, investment trades, and loan balances as JSON with one GET request and your key in the X-API-Key header.
- 4
Or ask an AI agent
Point Claude, ChatGPT or Cursor at the MCP server and ask questions about the same data.
MCP
Call it your way
$curl -s "https://api.banksync.io/v1/banks/bnk_chase/accounts/acc_8812/transactions?from=2026-09-01" \ -H "X-API-Key: bsk_live_…" \ | jq '.data[] | {date, description, amount}'
import osimport requests r = requests.get( "https://api.banksync.io/v1/banks/bnk_chase/accounts/acc_8812/transactions", params={"from": "2026-09-01"}, headers={"X-API-Key": os.environ["BANKSYNC_API_KEY"]},)r.raise_for_status()for row in r.json()["data"]: print(row["date"], row["description"], row["amount"])
const res = await fetch('https://api.banksync.io/v1/banks/bnk_chase/accounts/acc_8812/transactions?from=2026-09-01', { headers: { 'X-API-Key': process.env.BANKSYNC_API_KEY },})if (!res.ok) throw new Error(`BankSync API ${res.status}`)const { data } = await res.json()console.table(data)
you ›What did I spend on groceries last month across my cards?mcpget_transactions({ bankId: "bnk_chase", accountId: "acc_8812", from: "2026-09-01" })agent ›$612.40 across 17 transactions: Trader Joe’s $341.90, Costco $270.50. — same key, same data, in Claude, ChatGPT or Cursor —
Every endpoint
| Method | Endpoint | Description | Scope |
|---|---|---|---|
| GET | /v1/banks | List connected bank institutions | banks:read |
| GET | /v1/banks/:bankId/accounts | List accounts for a bank | banks:read |
| GET | /v1/banks/:bankId/accounts/:accountId/transactions | Query transactions with filters | banks:read |
| GET | /v1/banks/:bankId/accounts/:accountId/balances | Get the latest available balance | banks:read |
| GET | /v1/banks/:bankId/accounts/:accountId/holdings | Get current investment holdings | banks:read |
| GET | /v1/banks/:bankId/accounts/:accountId/loan | Get loan or liability details | banks:read |
| GET | /v1/feeds | List sync feeds | feeds:read |
| POST | /v1/feeds | Create a new sync feed | feeds:write |
| POST | /v1/feeds/:feedId/sync | Trigger a sync run | feeds:write |
| GET | /v1/feeds/:feedId/jobs | List sync jobs & history for a feed | jobs:read |
| GET | /v1/enrichments | List enrichments in workspace | enrichments:read |
| GET | /v1/enrichments/:enrichmentId | Get enrichment details & config | enrichments:read |
| POST | /v1/enrichments | Create any of the 16 enrichment types | enrichments:write |
| PUT | /v1/enrichments/:enrichmentId | Update enrichment config | enrichments:write |
| DELETE | /v1/enrichments/:enrichmentId | Delete an enrichment | enrichments:write |
| POST | /v1/feeds/:feedId/enrich/preview | Dry-run the enrichment pipeline on sample records | enrichments:read |
API access from $7/mo
Standard includes 5 bank connections, 10 API requests a minute and the MCP server. Every plan starts with a 14-day free trial. Prices shown in USD.
Frequently asked questions
Can I use this for my own accounts?
Yes. Sign up as an individual, connect your own bank, card, brokerage and loan accounts, and create an API key. There is no application, no company verification and no sales call.
Do I need a business or a developer account with an aggregator?
No. BankSync holds the Plaid relationship; you sign up for BankSync like any other app, connect your accounts, and read them with your key.
Does my connection expire?
No scheduled expiry: a US connection does not expire. Some banks occasionally ask you to sign in again (a new device check or a password change); the app asks you to reconnect when that happens. You can disconnect at any time.
What data can I read, and how far back?
Transactions, balances, investment holdings, investment trades, and loan balances. The first sync reaches back up to 2 years of transactions, depending on how much your bank makes available.
What is not available?
Payments and transfers: the API is read-only and never moves money. Coverage is per institution, so not every bank or credit union offers every data type; each bank’s page lists what it returns.
Is the API read-only?
Yes. The connection your bank grants is read-only: BankSync can read account data, and it cannot move money, make payments or change anything at your bank. Your API key reads the same data, scoped to the permissions you give it.
How is this different from screen-scraping?
Most large US banks connect through their own OAuth screen: you sign in at the bank and approve access, and BankSync never sees your password. The bank can show and revoke that access from its own security settings.
How much does API access cost?
API access starts on Standard at $7/mo: up to 5 bank connections, 10 API requests a minute and the MCP server. Professional and Business raise the limits. Every plan starts with a 14-day free trial; prices are in USD.
Make your first call tonight
Connect your US bank, create a scoped key, and read your own data as JSON.