Your Canadian bank data, one API call away.
Connect RBC, TD, Scotiabank, BMO or CIBC once. Read your transactions, balances, investment holdings, investment trades, and loan balances as JSON with a scoped key. Built for one person, not a fintech.
- read-only
- 2 years of history
- from US$7/mo
$curl https://api.banksync.io/v1/banks/bnk_rbc/accounts/acc_5530/transactions?from=2026-09-01 \ -H "X-API-Key: bsk_live_…" { "success": true, "data": [ { "date": "2026-10-08", "description": "Loblaws #1029", "amount": -92.64, "category": "Groceries" }, { "date": "2026-10-07", "description": "Tim Hortons", "amount": -6.45, "category": "Dining" }, …44 more ], "meta": { "count": 46, "hasMore": false }}200 OK · 46 rows · 121 ms
What you get in Canada
- 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
- Consumer-Driven Banking · Department of Finance Canada
- Provider
- Connections run through Plaid. Canada’s Consumer-Driven Banking framework is not live yet (its regulations were proposed in June 2026), so access today runs on the provider’s data-sharing agreements with each bank.
The banks you already use
- RBC Royal Bank
- Scotiabank
- CIBC
- National Bank of Canada
- Desjardins
How it works
- 1
Connect your own bank
Sign up, then connect RBC, TD, Scotiabank, BMO or CIBC 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_rbc/accounts/acc_5530/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_rbc/accounts/acc_5530/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_rbc/accounts/acc_5530/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 ›How much did I spend eating out in September?mcpget_transactions({ bankId: "bnk_rbc", accountId: "acc_5530", from: "2026-09-01" })agent ›C$284.75 across 19 transactions; Tim Hortons was the most frequent (9 visits). — 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, credit card and investment accounts, and create an API key. No business, no application and no sales call.
Is there an official open banking API in Canada?
Not yet. Canada’s Consumer-Driven Banking framework is still being put in place: its regulations were proposed in June 2026 and it is not live. Until it is, BankSync connects through its provider’s existing data-sharing agreements with Canadian banks.
Do I need a business or a developer agreement with my bank?
No. BankSync holds the Plaid relationship; you sign up like any other app, connect your accounts, and read them with your key.
Does my connection expire?
No scheduled expiry: the connection does not expire. A bank may occasionally ask you to sign in again; the app asks you to reconnect when that happens. You can disconnect at any time.
What is not available?
Payments and transfers: the API is read-only and never moves money. Coverage varies by institution, so not every bank or credit union returns every data type.
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?
Where your bank offers it, you sign in on the bank’s own screen and approve access, and BankSync never sees your password. Either way the connection is read-only and you can revoke it from the app at any time.
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.
Make your first call tonight
Connect your Canadian bank, create a scoped key, and read your own data as JSON.