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

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

Direct bank API compared with Zenith, row by row
Direct bank APIZenith
Time to first transaction2 weeks of build — after you're licensed5 minutes
Regulatory licenceAISP licence from your national financial authorityNone. Ours covers you.
eIDAS certificateYou buy, install and renew a QWAC/QSealC (X.509)None
Banks per integrationOne2,400+ across Europe
AuthenticationOAuth2 auth-code flow → access token valid 5 minutesOne click in your bank's app
Multiple accountsOne IBAN per consent — repeat the whole flow per accountAdd accounts in the UI
Consent renewalYou build the re-consent flow before it expiresZenith tracks it and prompts you
Transaction history90 days — and older data only inside the first 5 minutes of a new consent90 days at connect, then kept and accumulated indefinitely
Refresh limitsYou budget them yourself (typically 4 calls/day/account)Handled. Synced up to 4× a day.
Foreign currencyRaw, in the original currencyConverted to EUR on the way in
Data shapeBerlin Group "standard" — different per bank in practiceOne schema, everywhere
Where the data landsYou build itREST API, Google Sheets, or MCP for Claude & Codex
Ongoing maintenanceYours, foreverOurs
CostLicence + 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

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

With Zenith

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

For developers

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.

quickstart.sh
# 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-summary

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