Direct bank API vs Zenith

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

Direct bank API11 steps · per bank
  • AISP licence
  • eIDAS certificate
  • Developer portal
  • OAuth2 + consents
  • Repeat per bank
2 weeks, after licensing
With Zenith7 steps · once
  • Pick your country, then your bank
  • Log in at your bank and approve read-only access
  • You're redirected back; your balance is already there
5 minutes · 2,400+ banks

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.

Side by side

The same transactions, two very different paths.

Direct bank API compared with Zenith, row by row
Time to first transactionDirect: 2 weeks of build — after you're licensedZenith: 5 minutes
Regulatory licenceDirect: AISP licence from your national financial authorityZenith: None. Ours covers you.
eIDAS certificateDirect: You buy, install and renew a QWAC/QSealC (X.509)Zenith: None
Banks per integrationDirect: OneZenith: 2,400+ across Europe
AuthenticationDirect: OAuth2 auth-code flow → access token valid 5 minutesZenith: One click in your bank's app
Multiple accountsDirect: One IBAN per consent — repeat the whole flow per accountZenith: Add accounts in the UI
Consent renewalDirect: You build the re-consent flow before it expiresZenith: Zenith tracks it and prompts you
Transaction historyDirect: 90 days — and older data only inside the first 5 minutes of a new consentZenith: 90 days at connect, then kept and accumulated indefinitely
Refresh limitsDirect: You budget them yourself (typically 4 calls/day/account)Zenith: Handled. Synced up to 4× a day.
Foreign currencyDirect: Raw, in the original currencyZenith: Converted to EUR on the way in
Data shapeDirect: Berlin Group "standard" — different per bank in practiceZenith: One schema, everywhere
Where the data landsDirect: You build itZenith: REST API, Google Sheets, or MCP for Claude & Codex
Ongoing maintenanceDirect: Yours, foreverZenith: Ours
CostDirect: Licence + certificate + dev time + upkeepZenith: €5 per bank account / month
Two checklists

One bank account, two checklists.

Same bank. Same account. Same transactions at the end of it.

Direct, via your bank's developer portal

11 steps
  1. 01 Apply for an AISP licence at your national financial authority
  2. 02 Obtain an eIDAS certificate in X.509 PEM format
  3. 03 Create an account on the bank's developer portal
  4. 04 Register your TPP app and store the client ID and secret — the secret is usually shown once
  5. 05 Subscribe to the Account Information product and pick a plan
  6. 06 Upload your certificate to the app
  7. 07 Email the portal's support team to request a simulation account
  8. 08 Build the OAuth2 authorization-code flow; handle an access token that expires in minutes
  9. 09 POST /consents, redirect the user for SCA, then poll consent status until valid
  10. 10 GET /accounts, then GET /accounts/{id}/transactions — and pull anything older than 90 days inside the first few minutes, or lose it
  11. 11 Repeat steps 3–10 for every other bank you need

With Zenith

7 steps
  1. 01 Create a Zenith account — under a minute
  2. 02 Pick your country, then your bank
  3. 03 Log in at your bank and approve read-only access
  4. 04 You're redirected back; your balance is already there
  5. 05 Add billing — €5 per account, per month
  6. 06 Transactions start arriving, refreshed several times a day
  7. 07 Choose 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.

Scale

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.

After launch

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.

For developers

From token to transactions in two calls.

A read-only REST API over plain HTTPS and JSON. Predictable schema, cursor pagination and a machine-readable OpenAPI contract.

  • GET /transactions
  • GET /bank-accounts
  • GET /bank-accounts/{id}/balances
  • GET /expenses
  • GET /partners
  • GET /reports/yearly-summary
# 1. Who am I? (verifies your credentials)
curl https://hub.zenith-books.com/api/public/v1/me \
  -H "Authorization: Bearer $ZENITH_KEY" \
  -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 $ZENITH_KEY" \
  -H "X-Company-Key: $COMPANY_KEY"
Questions

Questions 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