EBICS for Python, without the sidecar.
ebicsclient talks to your bank over EBICS 3.0: download statements, initiate payments, one library, no PHP or Java process next to your application. Validated live against two Swiss banks. Free for any use under the Apache License 2.0.
pip install ebicsclient
from ebicsclient import Bank, User, Client, load_keyring, PAIN_001
bank = Bank(host_id="HOST1", url="https://ebics.example-bank.ch/ebicsweb")
user = User(partner_id="PARTNER1", user_id="USER1")
client = Client(bank, user, load_keyring("keyring.json", passphrase="…"))
# Read: end-of-day statements, parsed.
for statement in client.download_statements():
print(statement.iban, statement.closing_balance)
# Write: a pain.001 payment order.
transaction_id = client.upload(PAIN_001, pain001_bytes)
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>MEMBER-REFUNDS-2026-09</MsgId>
<CreDtTm>2026-09-20T09:30:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<InitgPty><Nm>Swimming Club Example</Nm></InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>REFUNDS</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<ReqdExctnDt><Dt>2026-09-22</Dt></ReqdExctnDt>
<Dbtr><Nm>Swimming Club Example</Nm></Dbtr>
<DbtrAcct><Id><IBAN>CH9300762011623852957</IBAN></Id></DbtrAcct>
<CdtTrfTxInf>
<PmtId><EndToEndId>REFUND-0042</EndToEndId></PmtId>
<Amt><InstdAmt Ccy="CHF">120.00</InstdAmt></Amt>
<Cdtr><Nm>Jane Example</Nm></Cdtr>
<CdtrAcct><Id><IBAN>CH5604835012345678009</IBAN></Id></CdtrAcct>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
What it does
The whole EBICS round trip, in the package you install
Key ceremony, statement downloads and payment uploads, implemented from the EBICS 3.0 specification and checked against the bank, not against another client.
- Pure Python
-
Built on
cryptographyandlxml, nothing else. No PHP or Java process to operate next to your application, no proprietary dependency. Fully typed, documented, and it fails closed. Works in Django, Flask, FastAPI or a plain script. - Statements in, payments out
-
camt.053, camt.052 and camt.054 downloads with optional date ranges, pain.002 status reports, and pain.001 payment uploads with the A006 electronic signature. Read and write are validated live against Zürcher Kantonalbank and the PostFinance test platform, including the key initialisation ceremony.
- Open source, no gating
-
Every feature is in the package: no licence keys, no delayed statements, no transaction caps, nothing that phones home. The Apache License 2.0 makes it free for any use, commercial or not.
In numbers
47 of 68 capabilities in full, 6 in part
Counted on 28 October 2026 from the conformance page, which lists every capability of EBICS 3.0 (H005) with its status and what verified it. Every unconditional requirement of the standard is implemented, five of them in part. The gaps are optional in the standard, above all multi-person signatures.
Capability by capability, on GitHub- Reads (downloads)
- 24 of 28
- Writes (uploads)
- 9 of 13
- Administrative order types of H005
- 15 of 22
- Multi-person signatures (EDS/VEU), waiting for a test environment
- 0 of 7
Licence
Free for any use
ebicsclient is open source under the Apache License 2.0. Use it, embed it and ship it in products you sell or host for others, with no registration, no fee and no licence key. Versions up to 1.9.0 were published under the PolyForm Noncommercial License; 2.0.0 and later are Apache-2.0.
Read the licence- One maintainer, best effort
- Written and maintained by one person, without a company behind it. Questions and bug reports go to the issue tracker and are answered on a best-effort basis. There is no support contract and no service level.
- A library, not a financial service
- ebicsclient runs inside your application. It transports the orders and statements you exchange with your bank under your own EBICS contract, and your bank executes what you submit.
- Without warranty
- As sections 7 and 8 of the licence state, it comes without warranty and without liability as far as the law allows. Test it against your bank's test platform before it touches a production account, keep your bank-side controls in place, and check the status report for every payment.
- Verified per release
- Which banks, test platforms and order types each release was verified against is recorded in the verification ledger and the conformance page. Anything not listed there is untested.
Frequently asked questions
Something else? Ask on the issue tracker or send an email.
- Can I use ebicsclient in a product I sell?
- Yes. Since version 2.0.0, the Apache License 2.0 allows any use, including products you sell to or host for other organisations. Keep the LICENSE and NOTICE files with the copies you distribute. There is nothing to register and nothing to pay.
- I use a version from before 2.0.0. What changes?
- Versions up to 1.9.0 keep the PolyForm Noncommercial terms they were published under, which cover noncommercial use only. Upgrade to 2.0.0 or later for the Apache terms. The API is the same.
- Does the package hold anything back, such as recent statements or upload limits?
- No. There is one package and it contains everything: statements for any date range including today, uploads without a transaction cap, the full source. There are no licence keys and nothing phones home.
- Can I get paid support, a service level or a custom feature?
- No. ebicsclient is maintained by one person, and there is no paid support, no service level and no development to order. Bug reports and feature requests are welcome on the issue tracker. A new feature joins the regular API once it has run against a real bank.
- Which banks and EBICS versions are supported?
- EBICS 3.0 (H005) only, by design: banks now require it and the older protocol versions are retired. Read and write are validated live against Zürcher Kantonalbank and the PostFinance test platform. EBICS is a standard, but banks differ in details, so if your bank behaves differently, report it and it gets looked at.
- Does it support distributed signatures (EDS/VEU), where several people approve an order?
- Not yet. The test platforms the library was validated on each run a single subscriber whose signature alone suffices, so EDS cannot be built and validated there. It waits for access to an EBICS test environment whose subscriber requires several signatures: a bank test platform, a vendor's demo server, or a production contract willing to test. If you can provide one, write to the maintainer; with it, EDS gets built and validated.
- Does it work inside a Django application?
- Yes. ebicsclient is a plain library with no framework dependency. Call it from a management command, a Celery task or a cron job, the same way you would from a script.
Questions about your bank or integration?
Which bank you are connecting, or what is missing for your integration: open an issue on GitHub, or write to the maintainer.
I wrote ebicsclient for WealthTracker, an app of mine that pulls bank statements over EBICS, because no pure-Python client for EBICS 3.0 existed. I maintain it on my own, and emails about your bank or your integration reach me directly.