Subsembly FinTS API
Copyright © 2004-2025 Subsembly GmbH
The Subsembly FinTS API is a comprehensive class library for FinTS/HBCI online banking clients.
Release Notes
The release notes (in German only) can be found here.
Assemblies
The Subsembly FinTS API consists of several core assemblies compiled for .NET Standard 2.0 and some optional assemblies compiled for .NET Framework 4.8. See https://docs.microsoft.com/de-de/dotnet/standard/net-standard for a table of .NET Standard 2.0 compatible platforms.
The following core assemblies were compiled for .NET Standard 2.0 and can be added to any project that targets a .NET Standard 2.0 compatible environment:
- Subsembly.AppBase.dll
- Subsembly.Crypto.dll
- Subsembly.Csv.dll
- Subsembly.FinTS.Core.dll
- Subsembly.Json.dll
- Subsembly.Printing.dll
- Subsembly.Sepa.dll
- FinBanks.dat (set Build Action to Content)
For internationalization the following text resource files are included.
- en/Subsembly.FinTS.Core.resources.dll
- en/Subsembly.Sepa.resources.dll
- fr/Subsembly.FinTS.Core.resources.dll
- fr/Subsembly.Sepa.resources.dll
Also, you must add a NuGet reference to System.Text.Encoding.CodePages by Microsoft (see https://www.nuget.org/packages/System.Text.Encoding.CodePages/4.7.1), or add the following files to your installation:
- System.Runtime.CompilerServices.Unsafe.dll
- System.Text.Encoding.CodePages.dll
The following core assemblies were compiled for .NET Standard 2.0 but do only work in a Windows environment:
- Subsembly.FinTS.SmartCard.dll (only if smart cards are used)
- en/Subsembly.FinTS.SmartCard.resources.dll (for english texts)
- fr/Subsembly.FinTS.SmartCard.resources.dll (for french texts)
- Subsembly.SmartCard.dll (only if smart cards are used)
The following assemblies are only supported on Windows and have been compiled for .NET Framework 4.8:
- Subsembly.FinTS.Win32.dll
The following assemblies are only supported on Windows and have been compiled for .NET 8 for Windows:
- Subsembly.FinTS.Win32.Net.dll
In addition the following files should be added to your development environment in order to support the Visual Studio Intellisense:
- Subsembly.FinTS.Core.xml
- Subsembly.FinTS.SmartCard.xml
- Subsembly.FinTS.Win32.xml
- Subsembly.Json.xml
- Subsembly.Sepa.xml
The FinAdmin tool is included with the Subsembly FinTS API for redistribution and should be installed, when neeed.
- FinAdmin.exe
- FinAdmin.exe.config
All of these assemblies and files are contained in the Subsembly FinTS API software development kit.
API Documentation
The Subsembly FinTS API itself is divided into three separate assemblies. It uses several supporting assemblies that are also included in the package.
- The Subsembly.FinTS.Core.dll contains the platform neutral base classes. This assembly targets .NET Standard 2.0. All classes in this assembly are part of the following namespaces:
- The Subsembly.FinTS.SmartCard.dll contains additional classes for supporting HBCI smart cards. These classes are only supported on Windows and macOS platforms. All classes in this assemblys are also part of these namespaces:
- The Subsembly.FinTS.Win32.dll contains UI classes for Windows only. These classes require a true Windows platform with .NET Framework 4.8. The classes of this assembly use
The supporting assemblies are
The Subsembly SEPA API contained in the Subsembly.Sepa3.dll assembly. Documentation of these classes can be found with the Subsembly SEPA API.
The private smart card access classes contained in the Subsembly.SmartCard.dll. These are only needed when HBCI smart cards shall be supported.
The cryptographic algorithms implemented in the Subsembly.Crypto.dll.
Simple CSV utility classes implemented in the Subsembly.Csv.dll.
Simple JSON utility classes implemented in the Subsembly.Json.dll.
A PDF generator for generating Ini-Letters in PDF Format is implemented in the Subsembly.Printing.dll.
Download
Please contact Subsembly for your private download link and credentials.
IMPORTANT: License Token
In order to use the Subsembly FinTS API you will need a valid license token. The license
token may be installed alongside the assemblies using the file name FinLicense.jwt
, or
the token may be passed to the static method
Subsembly.FinTS.FinLicense.SetLicenseToken(System.String).
You can get a time limited token for evaluation upon request from Subsembly GmbH. With a valid license, you will get an unlimited license token.
IMPORTANT: Client Registration for PSD 2 compliance
Because of the new PSD 2 regulations, the Deutsche Kreditwirtschaft (DK) decided that all FinTS clients have to registered with it. For details please read:
https://www.hbci-zka.de/register/register_faq.htm
You must supply your application registration code by setting the static property
FinDialog.ProductRegisterNo
.
Also note, that the PSD 2 migration period ends on 2019-09-14. Starting with this day, it is no longer permitted to use FinTS bank interfaces from third party services. All third party services must then use the new PSD 2 interfaces that will be provided by the banks. Yet, it is still possible to directly connect to FinTS interfaces from traditional client software, such as Windows applications or mobile apps.
If you have any questions concerning FinTS and the new PSD 2 regulations, please feel free to contact us at any time.
IMPORTANT: SWIFT MT-940 transaction data is end-of-life
At last, the tone old SWIFT MT-940 format for account transaction data is retired.
Many banks already started to support download of transaction data in the new CAMT
format via segment type HKCAZ
. This is already supported by the class
FinCamtStatementBuilder
and is the preferred method for downloading transaction
data, if supported by the bank.
Starting November 2025 several banks discontinue the support for downloading
transaction data in SWIFT MT-940 format via segment type HKKAZ
. Hence, your code
must be able to handle both scenarios.
Here an example of the recommended way to determine which way to download account transaction data shall be used.
using Subsembly.FinTS;
using Subsembly.FinTS.Online;
using Subsembly.FinTS.Forms;
using Subsembly.Sepa;
// FinContact aContact
// FinAcctInfo aAcctInfo // from UPD
// SwiftDate tStartDate
// SwiftDate tEndDate
// IWin32Window aParentWindow
FinCamtStatementBuilder aCamtBuilder = new FinCamtStatementBuilder(aContact);
if (aCamtBuilder.IsSupported && aAcctInfo.IsAllowed(aCamtBuilder.OrderSegmentType))
{
FinCamtStatement aOrder = aCamtBuilder.Build(aAcctInfo.Acct, tStartDate, tEndDate);
FinScriptSendOrder.Execute(aParentWindow, aContact, aOrder, null);
// aOrder.BookedCamts -> Booked transactions
// aOrder.NonbookedCamts -> Pending transactions
}
else
{
FinAcctMvmtsSpecifiedPeriodBuilder aSwiftBuilder = new FinAcctMvmtsSpecifiedPeriodBuilder(aContact);
if (aSwiftBuilder.IsSupported && aAcctInfo.IsAllowed(aSwiftBuilder.OrderSegmentType))
{
FinAcctMvmtsSpecifiedPeriod aOrder = aSwiftBuilder.Build(aAcctInfo.Acct, false, tStartDate, tEndDate, 0, null);
FinScriptSendOrder.Execute(aParentWindow, aContact, aOrder, null);
// aOrder.GetBooked() -> Booked transactions
// aOrder.GetNonbooked() -> Pending transactions
}
}
else
{
// Download of transactions is not supported by the bank or account.
}
IMPORTANT: Verfication of Payee
Starting on October, 5th 2025 all remittances are subject to a Verfication of Payee procedure. This means that before a remittance is executed by the bank, it verifies whether the given payee IBAN matches the given payee name, as known be the recipient bank. If there is a mis-match, then the user must explicitly confirm this mis-match, in order to execute the remittance anyway.
For this confirmation step a new interface Subsembly.FinTS.Forms.IFinVerificationOfPayeeForm was added to the UI components. By providing an implementation of this interface to Subsembly.FinTS.Forms.FinScriptSendOrder, your code can take over control of the Verification of Payee confirmation. If you do not provide an implementation, then the Subsembly.FinTS.Forms.FinVerificationOfPayeeForm will be used.
If you are not using FinScriptSendOrder
, but are working with
Subsembly.FinTS.Online.FinBanking, then
you have to handle the additional new FinDialogResultCode
s
Subsembly.FinTS.FinDialogResultCode.NeedContinue
and
Subsembly.FinTS.FinDialogResultCode.NeedConfirmationOfPayee.
FinTS Test Server
We are proud to announce that we now operate a fully functional FinTS 3.0 server, designed as a testing environment. This server already implements all PSD 2 extensions to FinTS and also the complete Verfication of Payee procedure.
Please contact us for information on how to get access to the Subsembly FinTS Server.
Getting Started
The easiest way to use the Subsembly FinTS API is through the various FinScript derived classes. These, however, are only available on the Windows platform and facilitate their own Windows UI.
The central class of the Subsembly FinTS API is the FinContact.
The FinContact
holds all the data and information for one particular online banking user at
a bank. For using PIN/TAN based security at a minimum the following properties of the
FinContact
must be initialized:
A fully initialized FinContact
can be used to send any FinOrder
to the bank. Orders are created through FinOrderBuilder
derived classes. Here an example of how to create an order that submits a SEPA payment
to the bank.
using Subsembly.FinTS;
using Subsembly.Sepa;
FinContact aContact = new FinContact("https://fintsurl", "00000000", "UserID");
// SepaDocument aSepaDoc
FinAcct aOrderAcct = aContact.ProduceOrderAcct(FinAcctTypeClass.Giro,
new SepaIBAN("DE00123456781234567890"), "EUR");
FinSepaOrderBuilder aBuilder = new FinSepaSingRemittBuilder(aContact);
FinOrder aOrder = aBuilder.Build(aOrderAcct, aSepaDoc);
The class FinScriptSendOrder can now be used to send this order to the bank. Note that this will begin a new FinTS dialog, send the order and finally orderly close the FinTS dialog again.
using Subsembly.FinTS;
using Subsembly.FinTS.Forms;
FinDialog.ProductRegisterNo = "YOURFINTSREGISTRATIONNUMBER";
// FinContact aContact
// FinOrder aOrder
// IWin32Window aParentWindow
FinScriptSendOrder aScript = FinScriptSendOrder.Execute(aParentWindow, aContact, aOrder, null);
// aScript.Trace
// aScript.Result
If you do not want (or can) to use the default UI, then you have to use the class FinBanking for conducting FinTS dialogs and send orders. This is supported by an instance of the class FinCredentialManager, which provides any (or no) user interface for gathering credentials from the user.
Based on a FinContact
a new FinBanking
instance can be created. A FinBanking
holds the
session context for one or more FinTS dialogs of the online banking user identified by the
given FinContact
. A very simple code sequence to send a single order without any error
handling would look something like this:
using Subsembly.FinTS;
using Subsembly.FinTS.Online;
using Subsembly.Sepa;
FinDialog.ProductRegisterNo = "YOURFINTSREGISTRATIONNUMBER";
// FinContact aContact
// FinOrder aOrder
FinCredentialManager aCredentialManager = new FinCredentialManager("YOURPIN");
using (FinBanking aBanking = new FinBanking(aContact, aCredentialManager))
{
FinDialogResult aResult = aBanking.BeginDialog();
aResult = aBanking.SendOrder(aOrder);
aBanking.TermDialog();
}
Of course, real code would have to handle the result of every step. Through the result the method may request additional information, such as in the case of the result codes SelectTanProc, SelectTanMedia, NeedTan, NeedDecoupled, NeedContinue, and NeedConfirmationOfPayee.
By processing these results your code has full control of the UI. As an alternative solution a derived or special instance of the class FinCredentialManager can be created in order to provide the UI. The Subsembly FinTS API includes a complete default UI that can be instantiated as follows:
using Subsembly.FinTS;
using Subsembly.FinTS.Online;
using Subsembly.FinTS.Forms;
FinBankingPinStore aPinStore = new FinBankingPinStore();
FinCredentialForm aCredentialForm = new FinCredentialForm();
FinTanProcForm aTanProcForm = new FinTanProcForm();
FinCredentialManager aCredentialManager = new FinCredentialManager(
aPinStore, aCredentialForm, aTanProcForm, aTanProcForm);
This FinCredentialManager
can then be provided to the new FinBanking
instance
in order to handle all user credential interface requests.
An application still must handle the Verfication of Payee responses NeedContinue and NeedConfirmationOfPayee. However, it can do use by leveraging the default Windows implementation FinVerificationOfPayeeForm.
Sample Code
The Subsembly FinTS API development kit includes four sample projects with source code.
FinAdmin A very simple application that launches the FinTS Administrator contained in the Subsembly FinTS API. You may include this executable with your product. However, it must be configured through command line parameters in order to include your FinTS product registration number.
FinPad A simple banking client application that uses the user interface integrated into the Subsembly FinTS API.
FinCmd A command line utility that demonstrates how to use the Subsembly FinTS API with a custom unser interface.
FinPing A small tool that demonstrates anonymous FinTS dialogs.