🏦 Banking API (finAPI + FinTS + EDI)
Typ: Open Banking API + FinTS/HBCI + EDI (EDIFACT)
Auth: OAuth2 / 2FA / TAN-Verfahren
Status: ✅ Production Ready
Übersicht
Universelle Banking-Integration für maximale Automatisierung:
| Funktion |
Technologie |
Automatisierungsgrad |
| Kontoaggregation |
finAPI |
100% automatisch |
| Mieteingänge |
finAPI + AI |
95% automatisch |
| SEPA-Zahlungen |
finAPI PIS |
100% automatisch |
| B2B Rechnungen |
EDI (EDIFACT) |
100% automatisch |
| Bonitätsprüfung |
finAPI KYC |
100% automatisch |
| Fallback |
FinTS/HBCI |
Manuell |
Architektur: 3-Schichten Banking
┌─────────────────────────────────────────────────────────────────┐
│ BANKING INTEGRATION LAYER │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SCHICHT 1: finAPI (Primär) │ │
│ │ ├─ Open Banking API (PSD2) │ │
│ │ ├─ Data Intelligence (AI-Kategorisierung) │ │
│ │ ├─ Payment Initiation (SEPA) │ │
│ │ ├─ KYC/Identitätsprüfung │ │
│ │ └─ 3000+ Banken in 9 EU-Ländern │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ FALLBACK │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SCHICHT 2: FinTS/HBCI (Fallback DE) │ │
│ │ └─ Direktverbindung für Spezialfälle │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ B2B │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SCHICHT 3: EDI (B2B-Automatisierung) │ │
│ │ ├─ EDIFACT (ORDERS, INVOIC, DESADV) │ │
│ │ └─ Targobank, Commerzbank, etc. │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
🌟 finAPI (Primäre Lösung)
Warum finAPI?
| Vorteil |
Details |
| BaFin-lizenziert |
PSD2 ZAD + AIS |
| 100+ Mio. Konten |
Erreichbar in Europa |
| 20+ Mio. API Calls/Tag |
Hochskalierbar |
| 7+ Mrd. € monatlich |
Zahlungsvolumen |
| TÜV-zertifiziert |
Höchste Sicherheit |
| 30 Tage kostenlos |
Test-Account |
finAPI Produktmodule
┌────────────────────────────────────────────────────────────────┐
│ finAPI PRODUCT PLATFORM │
├────────────────────────────────────────────────────────────────┤
│ │
│ 📊 OPEN BANKING (Access) │
│ ├─ Konten & Depots verbinden │
│ ├─ Umsätze abrufen │
│ ├─ Salden in Echtzeit │
│ └─ PSD2-konform ohne eigene Lizenz │
│ │
│ 🧠 DATA INTELLIGENCE │
│ ├─ Transaktionskategorisierung (AI/ML) │
│ ├─ Cashflow-Analyse │
│ ├─ Risikoanalyse │
│ ├─ Vertragsidentifikation │
│ └─ Kredite, Versicherungen, Energie automatisch erkannt │
│ │
│ 💳 PAYMENT (PIS) │
│ ├─ SEPA-Überweisung │
│ ├─ SEPA-Lastschrift │
│ ├─ Sammelzahlungen │
│ ├─ Terminüberweisungen │
│ ├─ Daueraufträge │
│ └─ Instant Payments (Echtzeit) │
│ │
│ 🔐 KYC (GiroIdent) │
│ ├─ Namensabgleich │
│ ├─ Altersverifikation │
│ ├─ Adressverifikation │
│ └─ GwG-konforme Identifikation │
│ │
└────────────────────────────────────────────────────────────────┘
finAPI Endpoints
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/finapi/connect |
Bank verbinden |
- |
GET |
/api/banking/finapi/accounts |
Alle Konten |
15 min |
GET |
/api/banking/finapi/accounts/:id |
Kontodetails |
15 min |
GET |
/api/banking/finapi/accounts/:id/balance |
Kontostand |
5 min |
GET |
/api/banking/finapi/transactions |
Umsätze |
5 min |
POST |
/api/banking/finapi/sync |
Aktualisierung |
- |
Data Intelligence
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
GET |
/api/banking/finapi/categorize |
Kategorisierung |
1h |
GET |
/api/banking/finapi/cashflow |
Cashflow-Analyse |
1h |
GET |
/api/banking/finapi/contracts |
Vertragsidentifikation |
24h |
GET |
/api/banking/finapi/risk-score |
Risikoanalyse |
24h |
Payment Initiation
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/finapi/payment/sepa |
SEPA-Überweisung |
- |
POST |
/api/banking/finapi/payment/batch |
Sammelüberweisung |
- |
POST |
/api/banking/finapi/payment/instant |
Echtzeit-Überweisung |
- |
POST |
/api/banking/finapi/payment/standing |
Dauerauftrag |
- |
GET |
/api/banking/finapi/payment/:id |
Zahlungsstatus |
1 min |
KYC (Know Your Customer)
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/finapi/kyc/verify-name |
Namensabgleich |
- |
POST |
/api/banking/finapi/kyc/verify-age |
Altersverifikation |
- |
POST |
/api/banking/finapi/kyc/verify-address |
Adressverifikation |
- |
POST |
/api/banking/finapi/kyc/full |
Vollständige KYC |
- |
finAPI Code-Beispiele
// finAPI Client Setup
import { FinAPI } from '@finapi/client';
const finapi = new FinAPI({
clientId: process.env.FINAPI_CLIENT_ID,
clientSecret: process.env.FINAPI_CLIENT_SECRET,
environment: 'sandbox', // 'sandbox' | 'production'
});
// 1. User registrieren
const user = await finapi.users.create({
email: 'user@example.com',
password: 'secure-password',
isAutoUpdateEnabled: true,
});
// 2. Bank verbinden (OAuth Flow)
const bankConnection = await finapi.bankConnections.import({
bankId: 277672, // Targobank
});
// Redirect User zur Bank-Authentifizierung
const redirectUrl = bankConnection.redirectUrl;
// 3. Nach Callback: Konten abrufen
const accounts = await finapi.accounts.getAll();
for (const account of accounts) {
console.log(`${account.accountName}: ${account.balance} EUR`);
}
// 4. Transaktionen mit AI-Kategorisierung
const transactions = await finapi.transactions.getAll({
accountIds: [accounts[0].id],
minBankBookingDate: '2024-12-01',
maxBankBookingDate: '2024-12-31',
});
for (const tx of transactions) {
console.log(`${tx.valueDate}: ${tx.amount} EUR`);
console.log(` Kategorie: ${tx.category?.name}`);
console.log(` Vertrag erkannt: ${tx.contract?.name || 'Nein'}`);
}
// 5. SEPA-Zahlung auslösen
const payment = await finapi.payments.createSinglePayment({
accountId: accounts[0].id,
recipient: 'Handwerker GmbH',
recipientIban: 'DE89370400440532013000',
amount: 500.00,
purpose: 'Reparatur Heizung WE 3',
});
// Redirect zur TAN-Eingabe
const tanUrl = payment.redirectUrl;
finAPI Verfügbare Länder
| Land |
Banken |
Status |
| 🇩🇪 Deutschland |
3000+ |
✅ Vollständig |
| 🇦🇹 Österreich |
500+ |
✅ Vollständig |
| 🇨🇭 Schweiz |
300+ |
✅ Vollständig |
| 🇳🇱 Niederlande |
50+ |
✅ Vollständig |
| 🇧🇪 Belgien |
30+ |
✅ Vollständig |
| 🇫🇷 Frankreich |
100+ |
✅ Vollständig |
| 🇪🇸 Spanien |
50+ |
✅ Vollständig |
| 🇮🇹 Italien |
50+ |
✅ Vollständig |
| 🇬🇧 UK |
100+ |
🔄 In Arbeit |
📄 EDI Integration (B2B-Automatisierung)
Was ist EDI?
EDI (Electronic Data Interchange) = Automatischer B2B-Dokumentenaustausch
┌─────────────────────────────────────────────────────────────────┐
│ EDI DOKUMENTENFLUSS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ MATRIX Platform ──── EDI Gateway ──── Handelspartner │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Rechnung│ ────► │ INVOIC │ ──►│ Targobank │ │
│ │ erstellt│ │ (EDIFACT) │ │ verarbeitet │ │
│ └─────────┘ └──────────────┘ └──────────────┘ │
│ │
│ EDIFACT Transaktionscodes: │
│ ├─ ORDERS → Bestellung │
│ ├─ ORDRSP → Bestellbestätigung │
│ ├─ DESADV → Lieferavis │
│ └─ INVOIC → Rechnung │
│ │
└─────────────────────────────────────────────────────────────────┘
EDI Endpoints
| Methode |
Endpunkt |
Beschreibung |
Format |
POST |
/api/banking/edi/invoice |
Rechnung senden |
EDIFACT |
POST |
/api/banking/edi/order |
Bestellung senden |
EDIFACT |
GET |
/api/banking/edi/inbox |
Eingegangene Dokumente |
EDIFACT |
POST |
/api/banking/edi/acknowledge |
Empfang bestätigen |
ORDRSP |
EDI Provider
| Provider |
Beschreibung |
Targobank |
Preis |
| TrueCommerce |
Full EDI Suite |
✅ |
€€€ |
| SEEBURGER |
Enterprise EDI |
✅ |
€€€€ |
| ecosio |
Cloud EDI |
✅ |
€€ |
| Comarch |
SMB EDI |
✅ |
€€ |
EDI Code-Beispiel
// EDIFACT Invoice erstellen
interface EDIInvoice {
messageType: 'INVOIC';
sender: string;
receiver: string;
invoiceNumber: string;
invoiceDate: string;
lineItems: EDILineItem[];
totalAmount: number;
}
async function sendEDIInvoice(invoice: EDIInvoice) {
// 1. EDIFACT Nachricht generieren
const edifact = new EDIFACT();
const message = edifact.createMessage('INVOIC', {
UNH: { messageRef: invoice.invoiceNumber },
BGM: { documentType: '380', documentNumber: invoice.invoiceNumber },
DTM: { dateType: '137', date: invoice.invoiceDate },
NAD: [
{ qualifier: 'BY', partyId: invoice.receiver }, // Käufer (Targobank)
{ qualifier: 'SE', partyId: invoice.sender }, // Verkäufer (wir)
],
LIN: invoice.lineItems.map((item, idx) => ({
lineNumber: idx + 1,
productId: item.sku,
quantity: item.quantity,
price: item.unitPrice,
})),
MOA: { amount: invoice.totalAmount, currency: 'EUR' },
});
// 2. An EDI Gateway senden
const response = await fetch('https://edi.truecommerce.com/api/send', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.EDI_API_KEY}`,
'Content-Type': 'application/edifact',
},
body: message.toString(),
});
return response.json();
}
FinTS/HBCI (Direkt zur Bank)
Installation
npm install fints-hbci @types/fints-hbci
# ODER Python-basiert
pip install fints
FinTS Endpoints
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/fints/connect |
Bank-Dialog starten |
- |
POST |
/api/banking/fints/tan-submit |
TAN übermitteln |
- |
GET |
/api/banking/fints/accounts |
Kontenliste |
1h |
GET |
/api/banking/fints/statements |
Umsatzabfrage |
5 min |
POST |
/api/banking/fints/transfer |
SEPA-Überweisung |
- |
FinTS-Dialog Flow
┌─────────────────────────────────────────────────────────────────┐
│ 1. Synchronisierung (Bank-Parameter abrufen) │
│ ↓ │
│ 2. Dialog initialisieren (BLZ, User-ID, PIN) │
│ ↓ │
│ 3. TAN-Verfahren wählen (pushTAN, chipTAN, smsTAN) │
│ ↓ │
│ 4. Geschäftsvorfall senden (Umsätze, Salden, etc.) │
│ ↓ │
│ 5. TAN anfordern und eingeben (für Transaktionen) │
│ ↓ │
│ 6. Dialog beenden │
└─────────────────────────────────────────────────────────────────┘
Python FinTS Beispiel
from fints.client import FinTS3PinTanClient
import logging
# FinTS Setup für Targo Bank
client = FinTS3PinTanClient(
bank_identifier="30020900", # Targo BLZ
user_id="MEIN_LOGIN", # Online-Banking User
pin="MEIN_PIN", # PIN
server="https://fints.targobank.de/fints"
)
# Konten abrufen
accounts = client.get_sepa_accounts()
for acc in accounts:
print(f"IBAN: {acc.iban}, BIC: {acc.bic}")
# Umsätze der letzten 30 Tage
from datetime import date, timedelta
start_date = date.today() - timedelta(days=30)
transactions = client.get_transactions(accounts[0], start_date, date.today())
for tx in transactions:
print(f"{tx.data['date']}: {tx.data['amount']} EUR - {tx.data['purpose']}")
# Saldo abrufen
balance = client.get_balance(accounts[0])
print(f"Kontostand: {balance.amount} EUR")
TAN-Handling
// Backend TAN Challenge Handler
interface FinTSTanChallenge {
challengeId: string;
tanMethod: 'pushTAN' | 'smsTAN' | 'chipTAN' | 'photoTAN';
challengeData?: string; // HHD-String für chipTAN/photoTAN
message: string;
}
// 1. Transaktion startet
const result = await fintsClient.initiateTransfer({
iban: 'DE89370400440532013000',
bic: 'COBADEFFXXX',
amount: 500.00,
recipient: 'Handwerker GmbH',
reference: 'Reparatur Heizung WE 3'
});
// 2. TAN angefordert
if (result.tanRequired) {
const challenge: FinTSTanChallenge = result.challenge;
// An Frontend senden
socket.emit('tan-challenge', {
challengeId: challenge.challengeId,
method: challenge.tanMethod,
message: challenge.message,
// Für chipTAN/photoTAN:
flickerCode: challenge.challengeData
});
}
// 3. TAN von User empfangen
socket.on('tan-response', async (data) => {
const confirmed = await fintsClient.submitTan(
data.challengeId,
data.tan
);
if (confirmed.success) {
// Transaktion ausgeführt
emit('transfer-success', confirmed.transactionId);
}
});
FinTS Bank-Liste (Wichtigste)
const FINTS_BANKS = {
'targobank': {
blz: '30020900',
url: 'https://fints.targobank.de/fints',
version: 'FinTS 3.0',
tanMethods: ['pushTAN', 'smsTAN']
},
'commerzbank': {
blz: '50040000',
url: 'https://fints.commerzbank.de/fints',
version: 'FinTS 3.0',
tanMethods: ['photoTAN', 'pushTAN']
},
'ing': {
blz: '50010517',
url: 'https://fints.ing-diba.de/fints',
version: 'FinTS 3.0',
tanMethods: ['App-TAN', 'iTAN']
},
'dkb': {
blz: '12030000',
url: 'https://fints.dkb.de/fints',
version: 'FinTS 3.0',
tanMethods: ['chipTAN', 'pushTAN']
},
'postbank': {
blz: '10010010',
url: 'https://fints.postbank.de/fints',
version: 'FinTS 3.0',
tanMethods: ['BestSign', 'mobileTAN']
}
};
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
GET |
/api/banking/accounts |
Alle Konten |
15 min |
GET |
/api/banking/accounts/:iban |
Kontodetails |
15 min |
GET |
/api/banking/accounts/:iban/balance |
Kontostand |
5 min |
GET |
/api/banking/accounts/:iban/transactions |
Umsätze |
5 min |
PSD2 Payment Initiation Service (PIS)
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/payments/sepa |
SEPA-Überweisung |
- |
POST |
/api/banking/payments/sepa-batch |
Sammelüberweisung |
- |
GET |
/api/banking/payments/:id |
Zahlungsstatus |
1 min |
DELETE |
/api/banking/payments/:id |
Zahlung stornieren |
- |
Consent Management
| Methode |
Endpunkt |
Beschreibung |
Cache TTL |
POST |
/api/banking/consents |
Zugang beantragen |
- |
GET |
/api/banking/consents/:id |
Consent Status |
- |
DELETE |
/api/banking/consents/:id |
Zugang widerrufen |
- |
Authentifizierungsflow
┌─────────────────────────────────────────────────────────────────┐
│ 1. User initiiert Bankverbindung │
│ ↓ │
│ 2. Redirect zur Bank (Targo Online-Banking) │
│ ↓ │
│ 3. User authentifiziert sich (Username + PIN) │
│ ↓ │
│ 4. Bank fordert TAN (SMS, pushTAN, chipTAN) │
│ ↓ │
│ 5. User gibt TAN ein │
│ ↓ │
│ 6. Bank erteilt Consent (90 Tage gültig) │
│ ↓ │
│ 7. Access Token für API-Zugriff │
└─────────────────────────────────────────────────────────────────┘
Request-Beispiel
// GET /api/banking/accounts/DE89370400440532013000/transactions
const response = await fetch('/api/banking/accounts/DE89370400440532013000/transactions?from=2024-12-01&to=2024-12-30', {
headers: {
'Authorization': `Bearer ${bankingToken}`,
'X-Request-ID': crypto.randomUUID()
}
});
// Response
{
"account": {
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"name": "Hausverwaltung GmbH",
"currency": "EUR"
},
"balance": {
"available": 45678.90,
"booked": 45123.45,
"date": "2024-12-30"
},
"transactions": [
{
"id": "txn-001",
"date": "2024-12-28",
"valueDate": "2024-12-28",
"amount": 850.00,
"currency": "EUR",
"type": "CREDIT",
"creditor": {
"name": "Max Mustermann",
"iban": "DE12345678901234567890"
},
"reference": "Miete Januar 2025 Wohnung 3A",
"category": "RENT_INCOME"
},
{
"id": "txn-002",
"date": "2024-12-27",
"amount": -1250.00,
"type": "DEBIT",
"debtor": {
"name": "Stadtwerke München",
"iban": "DE98765432109876543210"
},
"reference": "NK-Abschlag Dezember 2024",
"category": "UTILITIES"
}
],
"cached": true,
"cacheAge": 120000
}
Automatische Mietzuordnung
// Incoming transaction webhook
interface RentTransaction {
transactionId: string;
amount: number;
reference: string;
creditorName: string;
creditorIban: string;
date: string;
}
// Auto-matching logic
async function matchRentPayment(tx: RentTransaction) {
// 1. Suche Mieter nach IBAN
let tenant = await findTenantByIban(tx.creditorIban);
// 2. Fallback: Suche nach Name
if (!tenant) {
tenant = await findTenantByName(tx.creditorName);
}
// 3. Fallback: Suche nach Referenz (Wohnungsnummer)
if (!tenant) {
const unitMatch = tx.reference.match(/Wohnung\s+(\w+)/i);
if (unitMatch) {
tenant = await findTenantByUnit(unitMatch[1]);
}
}
if (tenant) {
await recordRentPayment({
tenantId: tenant.id,
amount: tx.amount,
date: tx.date,
transactionId: tx.transactionId,
status: 'MATCHED'
});
} else {
await flagForManualReview(tx);
}
}
TypeScript Types
interface BankAccount {
iban: string;
bic: string;
name: string;
currency: 'EUR';
type: 'CURRENT' | 'SAVINGS' | 'DEPOSIT';
balance: BankBalance;
}
interface BankBalance {
available: number;
booked: number;
pending?: number;
date: string;
}
interface BankTransaction {
id: string;
date: string;
valueDate: string;
amount: number;
currency: string;
type: 'CREDIT' | 'DEBIT';
creditor?: BankParty;
debtor?: BankParty;
reference: string;
category?: TransactionCategory;
status: 'BOOKED' | 'PENDING';
}
interface BankParty {
name: string;
iban?: string;
bic?: string;
}
type TransactionCategory =
| 'RENT_INCOME'
| 'RENT_PAYMENT'
| 'UTILITIES'
| 'MAINTENANCE'
| 'INSURANCE'
| 'TAX'
| 'OTHER';
interface SepaPayment {
creditorName: string;
creditorIban: string;
amount: number;
currency: 'EUR';
reference: string;
executionDate?: string;
}
Compliance
| Anforderung |
Status |
| PSD2 |
✅ EU-reguliert |
| GDPR |
✅ Datenschutz konform |
| PCI-DSS |
✅ Keine Kartendaten |
| BaFin |
⚠️ Prüfen bei PIS |
Multi-Banking Provider
Für einfachere PSD2-Integration empfehlen wir einen Aggregator:
| Provider |
Banks |
PSD2 |
FinTS |
Preis |
| finAPI |
3000+ |
✅ |
✅ |
€€ |
| Tink |
3400+ |
✅ |
❌ |
€€€ |
| Plaid |
2500+ |
✅ |
❌ |
€€€ |
| figo |
3000+ |
✅ |
✅ |
€€ |
💡 Empfehlung: finAPI für DE (FinTS-Fallback inklusive)
Umgebungsvariablen
# ═══════════════════════════════════════════════════════════════
# finAPI (PRIMÄR - Empfohlen)
# ═══════════════════════════════════════════════════════════════
FINAPI_CLIENT_ID="your-client-id"
FINAPI_CLIENT_SECRET="your-client-secret"
FINAPI_ENVIRONMENT="sandbox" # sandbox | production
FINAPI_REDIRECT_URI="https://app.example.com/banking/callback"
FINAPI_DATA_INTELLIGENCE="true" # AI-Kategorisierung
FINAPI_KYC_ENABLED="true" # GiroIdent
# ═══════════════════════════════════════════════════════════════
# FinTS/HBCI (Fallback DE)
# ═══════════════════════════════════════════════════════════════
FINTS_BANK_BLZ="30020900" # Targo Bank
FINTS_USER_ID="ONLINE_BANKING_LOGIN"
FINTS_PIN="ENCRYPTED_PIN" # ⚠️ Verschlüsselt speichern!
FINTS_ENDPOINT="https://fints.targobank.de/fints"
# Optional: Second Bank
FINTS_SECONDARY_BLZ=""
FINTS_SECONDARY_USER=""
# ═══════════════════════════════════════════════════════════════
# EDI (B2B-Automatisierung)
# ═══════════════════════════════════════════════════════════════
EDI_PROVIDER="truecommerce" # truecommerce | seeburger | ecosio
EDI_API_KEY="your-edi-api-key"
EDI_PARTNER_ID="TARGOBANK-AG" # Trading Partner ID
EDI_SENDER_ID="YOUR-GLN" # Ihre GLN/ILN Nummer
EDI_FORMAT="EDIFACT" # EDIFACT | X12 | XML
# ═══════════════════════════════════════════════════════════════
# Feature Flags
# ═══════════════════════════════════════════════════════════════
BANKING_MODE="finapi" # finapi | fints | dual
BANKING_AUTO_MATCH="true" # Auto-Mietzuordnung
BANKING_AI_CATEGORIZATION="true" # finAPI Data Intelligence
BANKING_KYC_REQUIRED="false" # Vor Vertragsabschluss
BANKING_EDI_ENABLED="true" # B2B-Rechnungen
Provider-Vergleich (Vollständig)
| Feature |
finAPI |
FinTS |
EDI |
Tink |
Plaid |
| Open Banking |
✅ |
✅ |
❌ |
✅ |
✅ |
| Banken DE |
3000+ |
3000+ |
N/A |
1000+ |
500+ |
| Banken EU |
9 Länder |
❌ |
N/A |
15 Länder |
10 Länder |
| AI-Kategorisierung |
✅ |
❌ |
❌ |
✅ |
✅ |
| Zahlungen (PIS) |
✅ |
✅ |
❌ |
✅ |
⚠️ |
| Instant Payment |
✅ |
⚠️ |
❌ |
✅ |
❌ |
| KYC/Ident |
✅ |
❌ |
❌ |
⚠️ |
⚠️ |
| B2B-Rechnungen |
❌ |
❌ |
✅ |
❌ |
❌ |
| BaFin-Lizenz |
✅ |
N/A |
N/A |
❌ |
❌ |
| Preis |
€€ |
Kostenlos |
€€€ |
€€€ |
€€€ |
💡 Empfehlung:
- Consumer/SMB: finAPI (All-in-One)
- Enterprise B2B: finAPI + EDI
- DE-Only Budget: FinTS
Automatisierungs-Matrix
| Prozess |
Ohne Integration |
Mit finAPI |
Mit finAPI + EDI |
| Kontostand prüfen |
Manuell (5 min) |
Automatisch |
Automatisch |
| Mieteingänge |
Manuell (30 min/Tag) |
95% automatisch |
95% automatisch |
| Rechnungen erstellen |
Manuell (15 min) |
Manuell |
100% automatisch |
| Rechnungen versenden |
Email/Post |
Email/Post |
EDI (sofort) |
| Zahlungen ausführen |
Online-Banking |
API (1 Click) |
API (1 Click) |
| Bonitätsprüfung |
Schufa (€3+) |
finAPI KYC |
finAPI KYC |
| Vertragsidentifikation |
Manuell |
AI erkannt |
AI erkannt |
Zeitersparnis: ~5 Stunden/Woche bei 50 Mieteinheiten
Wann welche Technologie?
| Use Case |
Empfehlung |
Grund |
| Entwicklung/Test |
finAPI Sandbox |
Kostenlos, schnell |
| Production |
finAPI |
BaFin-konform, skalierbar |
| Multi-Banking |
finAPI |
Unified API |
| EU-Banken |
finAPI |
Einzige Option |
| B2B-Rechnungen |
EDI |
Automatisiert |
| Großkunden |
finAPI + EDI |
Maximum Automatisierung |
| Budget-Option |
FinTS |
Kostenlos (nur DE) |
Rate Limits
| Typ |
Limit |
Window |
| Balance |
4/Tag |
Per Consent |
| Transactions |
4/Tag |
Per Consent |
| Payments |
10/Tag |
Per Account |
⚠️ PSD2 reguliert: Max 4 Abrufe pro Tag ohne aktive User-Interaktion
💡 FinTS hat keine offiziellen Rate Limits, aber Banken können blockieren bei zu vielen Anfragen.
Sicherheitshinweise
Credential Storage
- NIEMALS PIN/TAN im Klartext speichern
- Nutze
crypto.createCipheriv() oder HSM
- Session-Keys nach Dialog löschen
- Consent-Tokens sicher verwalten
PCI-DSS nicht erforderlich
Banking-APIs handhaben keine Kartendaten.
DSGVO/GDPR ist Hauptanforderung.
Links & Ressourcen
finAPI: Universal & BaFin-lizenziert | FinTS: Kostenlos & DE-only | EDI: B2B-Automatisierung