You can connect straight to your bank's API. Here's what that actually takes.
Every European bank is legally required to expose a PSD2 API. Getting to it is the hard part: a licence from your national regulator, an eIDAS certificate, and a fresh integration for every bank you add. Zenith hands you the same data from 2,400+ European banks — one schema, five minutes, no licence required.
Read-only · PSD2 · €5 per bank account / month · Money-back guarantee
Zenith isn't a workaround for the bank API. It is the bank API. We hold the licence, the certificates and the per-bank integrations, and hand you clean JSON. This page shows you exactly what you'd be taking on if you did it yourself — so you can decide honestly.
The same transactions, two very different paths
| What you are comparing | Direct bank API | Zenith |
|---|---|---|
| Time to first transaction | 2 weeks of build — after you're licensed | 5 minutes |
| Regulatory licence | AISP licence from your national financial authority | None. Ours covers you. |
| eIDAS certificate | You buy, install and renew a QWAC/QSealC (X.509) | None |
| Banks per integration | One | 2,400+ across Europe |
| Authentication | OAuth2 auth-code flow → access token valid 5 minutes | One click in your bank's app |
| Multiple accounts | One IBAN per consent — repeat the whole flow per account | Add accounts in the UI |
| Consent renewal | You build the re-consent flow before it expires | Zenith tracks it and prompts you |
| Transaction history | 90 days — and older data only inside the first 5 minutes of a new consent | 90 days at connect, then kept and accumulated indefinitely |
| Refresh limits | You budget them yourself (typically 4 calls/day/account) | Handled. Synced up to 4× a day. |
| Foreign currency | Raw, in the original currency | Converted to EUR on the way in |
| Data shape | Berlin Group "standard" — different per bank in practice | One schema, everywhere |
| Where the data lands | You build it | REST API, Google Sheets, or MCP for Claude & Codex |
| Ongoing maintenance | Yours, forever | Ours |
| Cost | Licence + certificate + dev time + upkeep | €5 per bank account / month |
One bank account, two checklists
Same bank. Same account. Same transactions at the end of it.
Direct, via your bank's developer portal
- 1Apply for an AISP licence at your national financial authority
- 2Obtain an eIDAS certificate in X.509 PEM format
- 3Create an account on the bank's developer portal
- 4Register your TPP app and store the client ID and secret — the secret is usually shown once
- 5Subscribe to the Account Information product and pick a plan
- 6Upload your certificate to the app
- 7Email the portal's support team to request a simulation account
- 8Build the OAuth2 authorization-code flow; handle an access token that expires in minutes
- 9POST /consents, redirect the user for SCA, then poll consent status until valid
- 10GET /accounts, then GET /accounts/{id}/transactions — and pull anything older than 90 days inside the first few minutes, or lose it
- 11Repeat steps 3–10 for every other bank you need
With Zenith
- 1Create a Zenith account — under a minute
- 2Pick your country, then your bank
- 3Log in at your bank and approve read-only access
- 4You're redirected back; your balance is already there
- 5Add billing — €5 per account, per month
- 6Transactions start arriving, refreshed several times a day
- 7Choose where the data goes: API, Google Sheets, or MCP
Now do the left column again for your second bank.
Think this is overstated? Search "open banking" plus your bank's name and open their developer portal. Look for two words: licence and certificate. Every European bank has them, because PSD2 requires them. That's the wall — and it's there before you write a line of code.
One bank is a project. Five banks is five projects.
PSD2 gave Europe a shared standard. It did not give Europe a shared implementation. Field names drift, balance types disagree, pagination differs, error codes are the bank's own, and every provider runs its own developer portal, its own certificate upload and its own sandbox request process.
So the work doesn't compound — it repeats. Each new bank is a new portal, a new sandbox, a new set of quirks, and a new thing to keep working.
Zenith is one integration — 2,400+ banks across Europe, one connect flow, one response shape.
Your second bank takes as long as your first: five minutes.
The integration isn't the hard part. Keeping it alive is.
Rate limits
Most banks cap you at four refreshes a day per account. Blow through it and you're dark until tomorrow.
Consent expiry
PSD2 consents lapse. Someone has to notice, and someone has to ask the user to re-authorise before the data stops.
The 90-day cliff
History beyond 90 days is only reachable in the first minutes of a new consent. Miss the window and it's gone. Zenith captures it at connect and keeps it from then on.
Pending vs booked
Transactions change shape as they settle. Deduplicating them without dropping or double-counting is its own small project.
Balance types
closingBooked, interimAvailable, expected. Banks disagree on which they return and what they mean.
Foreign currency
A USD charge on a EUR account arrives as USD. Zenith converts it on the way in, so your totals are just totals.
From token to transactions in two calls.
Read-only REST over plain HTTPS and JSON. Bank transactions, expenses, partners, accounts, balances and yearly summaries — predictable schema, pagination-friendly filters, machine-readable OpenAPI spec.
# Base URL
https://hub.zenith-books.com/api/public/v1
# 1. Who am I? (verifies your credentials)
curl https://hub.zenith-books.com/api/public/v1/me \
-H "Authorization: Bearer zth_live_…" \
-H "X-Company-Key: <company key>"
# 2. Last month's bank transactions
curl "https://hub.zenith-books.com/api/public/v1/transactions?date_from=2026-06-01&date_to=2026-06-30" \
-H "Authorization: Bearer zth_live_…" \
-H "X-Company-Key: <company key>"
# Also available: /expenses, /partners, /bank-accounts,
# /bank-accounts/{id}/balances, /reports/yearly-summaryQuestions before you build
Five minutes, or two weeks. Same transactions.
Connect your first bank account and see your balance before you finish reading the developer portal signup form.
Read-only · PSD2 · Money-back guarantee
