Nº 3 Libraries for Dart & TypeScript
FinTS
Talk to German banks directly.
- Dart
- fints on pub.dev; BSD-3-Clause
- TypeScript
- @coderoftime/fints on npm; Zero runtime dependencies
- Your data
- Only between your app and your bank
fints on pub.dev @coderoftime/fints on npm Dart sourceTypeScript source
The fints package is a pure Dart FinTS client for German banks, usable from any Flutter app on iOS, Android and
desktop. It handles what makes FinTS hard in practice: PSD2 strong customer authentication, decoupled
app approval, TAN media and chipTAN flicker codes, and the bank’s own parameter data, which it
follows strictly. A request the bank’s parameters rule out fails before the bank is contacted.
The TypeScript port, @coderoftime/fints on npm, has no runtime dependencies and behaves the same: same session logic, same
safeguards, same tests. It runs on Node.js, Deno and Bun, or in a browser behind your own server.
Banks only talk to registered software. Before your app can connect, register it for free with the
German banking industry (Die Deutsche Kreditwirtschaft)
and pass the ID you get as productId.
A look at the code
dart pub add fintsfinal client = FinTs3Client(
config: FinTsConfig(
url: bankUrl,
bankCode: '12345678',
userId: login,
productId: productId,
),
pin: pin,
options: FinTsClientOptions(
tanCallback: askForTan,
),
);
final accounts = await client.getAccounts();
final balance =
await client.getBalance(accounts.first);
await client.close();npm install @coderoftime/fintsconst client = new FinTs3Client({
config: {
url: bankUrl,
bankCode: '12345678',
userId: login,
productId,
},
pin,
options: { tanCallback: askForTan },
});
const accounts = await client.getAccounts();
const balance =
await client.getBalance(accounts[0]!);
await client.close();Features
What it does
FinTS 3.0 and 4.1
The Dart package speaks both; 4.1 is experimental. The TypeScript port covers 3.0.
Strong customer authentication
One- and two-step TAN and app approval (pushTAN, SecureGo plus), polled on the bank’s own timing.
chipTAN and photoTAN
HHD 1.3 and 1.4 flicker codes rendered to frames, and photo and QR challenges.
Balances and transactions
camt.052 or MT940/942 with automatic paging, plus parsers for MT940 and camt.
Lockout protection
Never re-sends a PIN the bank refused, and masks PIN and TAN in every log.
Portable session state
Bank parameters, TAN setup and the account list in one saved state string, never the PIN or a TAN, in the same format for Dart and TypeScript.
Direct
Nothing sits between your app and your bank.
The libraries collect nothing and only talk to the bank you configure.
- Telemetry
- None
- Aggregator
- None
- Licence
- BSD-3-Clause
Availability
On pub.dev and npm
The Dart package is on pub.dev and the TypeScript port on npm, both under the BSD-3-Clause licence.
fints on pub.dev @coderoftime/fints on npm Dart sourceTypeScript sourceFollow the updates
Support
Support & contact
Questions are welcome by email; bugs can also go to the issues of either repository on GitLab.
coderoftime@gmail.com