One PSD2 API for banks across the EEA. For individuals too.
Connect ING, Deutsche Bank, BNP Paribas, N26 or bunq through a licensed PSD2 provider. Read your transactions and balances as JSON with one scoped key across most EEA countries; the smaller markets are still on a waitlist, and each country page says which.
- read-only · PSD2 licensed AISP
- 60 days of history
- from US$7/mo
$curl https://api.banksync.io/v1/banks/bnk_ing_nl/accounts/acc_3304/transactions?from=2026-09-01 \ -H "X-API-Key: bsk_live_…" { "success": true, "data": [ { "date": "2026-10-08", "description": "Albert Heijn 1403", "amount": -42.17, "category": "Groceries" }, { "date": "2026-10-07", "description": "NS Reizigers", "amount": -23.60, "category": "Transport" }, …29 more ], "meta": { "count": 31, "hasMore": false }}200 OK · 31 rows · 131 ms
What you get in Europe
- Data
- Transactions and balances. Read-only.
- History
- Up to 60 days on the first sync.
- Consent
- 180 days, then you approve again at your bank.
- Framework
- PSD2 / Open Banking · European Banking Authority (EBA)
- Provider
- Connections run through Salt Edge, a licensed account information service provider (AISP) under PSD2.
How it works
- 1
Connect your own bank
Sign up, then connect ING, Deutsche Bank, BNP Paribas, N26 or bunq 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 and 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_ing_nl/accounts/acc_3304/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_ing_nl/accounts/acc_3304/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_ing_nl/accounts/acc_3304/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 ›Which subscriptions did I pay for in September?mcpget_transactions({ bankId: "bnk_ing_nl", accountId: "acc_3304", from: "2026-09-01" })agent ›6 subscriptions, €71.94 in total: Spotify, Netflix, NS Flex, iCloud, Ziggo, Basic-Fit. — 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 accounts by approving access at your bank, and create an API key. You do not need a company, a PSD2 licence or a contract.
Do I need a PSD2 licence or a registered business?
No. Reading account data on someone’s behalf needs an AISP licence under PSD2, and the provider BankSync connects through, Salt Edge, holds one. You approve access at your bank and read your own data back with your key.
How long does my consent last, and how do I renew it?
PSD2 access lasts 180 days. When it ends, reconnect the bank from the app and approve again at your bank (usually with strong customer authentication). You can withdraw access at any time.
What data can I read, and how far back?
Transactions and balances. The first sync reaches back up to 60 days; after that BankSync keeps adding new transactions while the connection stays active.
What is not available in Europe?
Investment holdings, investment trades and loan details: PSD2 account access covers transactions and balances. Payments are never available; the API is read-only.
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?
You never share your banking password. PSD2 sends you to your own bank to approve access with strong customer authentication, and the bank issues a revocable token. Screen-scrapers sign in as you with your stored credentials.
How much does API access cost?
API access starts on Standard at US$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.
Related reading
- How PSD2 works →Account information services, strong customer authentication and consent.
- European bank coverage →Every bank you can connect, with the data each one returns.
- MCP server →The same data in Claude, ChatGPT, Cursor and VS Code.
- API reference →Every endpoint, parameter and response, from the OpenAPI spec.
Make your first call tonight
Connect your European bank, create a scoped key, and read your own data as JSON.