Fintech package for Python (SEPA, EBICS & more)
The Python Fintech library provides all the functionality that is required to work with EBICS, SEPA and other financial technologies. It offers the possibility to manage all of the everyday commercial banking activities such as credit transfers, direct debits or the retrieval of bank account statements in a flexible and secure manner.
Features
- Support of EBICS versions 2.4, 2.5 and 3.0
- Support of EBICS websockets
- Obtain bank account statements (incl. CAMT and MT940 parser)
- Create and submit SEPA credit transfers (SCT/pain.001)
- Create and submit SEPA direct debits of type CORE or B2B (SDD/pain.008)
- Mostly full SEPA support, including special schemes for CH (PT D/S/X) and IT (CBI)
- Automatic calculation of the lead time based on holidays and cut-off times
- Integrated mandate manager (optionally usable, beta)
- Plausibility check of IBAN and BIC
- Validation of payment orders against the SEPA Clearing Directory of the German Central Bank
- Bankcode/Account to IBAN converter according to the rules of the German Central Bank
- Currency converter
- DATEV converter (CSV and KNE)
The programming interface has been realised as simple as possible but also as flexible as necessary.
All modules can be used free of charge. Only the unlicensed version of the EBICS client has few restrictions:
- The upload of SEPA documents is limited to a maximum of five transactions.
- Bank account statements can not be retrieved for the last three days.
- The functionality of distributed signatures (EDS) is disabled.
Protocol versions
- EBICS 3.0 (H005)
- EBICS 2.5 (H004)
- EBICS 2.4 (H003)
Supported key versions: A006, A005, X002, E002
A key management based on certificates is possible as well. Certificates are required in some countries (eg. France) and basically always since EBICS 3.0.
Example
import fintech
fintech.register()
from fintech.ebics import EbicsKeyRing, EbicsBank, EbicsUser, EbicsClient
keyring = EbicsKeyRing(keys='~/mykeys', passphrase='mysecret')
bank = EbicsBank(keyring=keyring, hostid='MYBANK', url='https://www.mybank.de/ebics')
user = EbicsUser(keyring=keyring, partnerid='CUSTOMER123', userid='USER1')
# Create new keys for this user
user.create_keys(keyversion='A006', bitlength=2048)
client = EbicsClient(bank, user)
# Send the public electronic signature key to the bank.
client.INI()
# Send the public authentication and encryption keys to the bank.
client.HIA()
# Create an INI-letter which must be printed and sent to the bank.
user.create_ini_letter(bankname='MyBank AG', path='~/ini_letter.pdf')
# After the account has been activated the public bank keys
# must be downloaded and checked for consistency.
print(client.HPB())
# Finally the bank keys must be activated.
bank.activate_keys()
# Retrieve bank account statements (camt.053 format)
sheets = client.C53(
start='2019-02-01',
end='2019-02-07',
)
client.confirm_download()