Senden Sie Ihren API-Schlüssel als Bearer-Token im Authorization-Header. Wir verwenden API-Schlüssel – kein OAuth in Version 1.
API zum Extrahieren von Kontoauszügen
REST-API zum Konvertieren von PDF-Kontoauszügen in strukturiertes JSON. Mindestens 99,9 % der Transaktionen korrekt identifiziert, automatische Rückerstattung bei Fehler.
$ curl https://api.bankstatementlab.com/v1/extractions \
-H "Authorization: Bearer bsl_live_..." \
-F "file=@statement.pdf" Extraktion von Kontoauszügen
Extrahieren Sie Transaktionen, Salden und Metadaten aus jedem PDF.
Strukturierte JSON-Ausgabe
Einheitliches Schema für alle 10 unterstützten Sprachen.
Mindestens 99,9 % der Transaktionen korrekt identifiziert
Automatische Rückerstattung bei Fehler. Keine Gebühr für fehlgeschlagene Extraktionen.
Synchroner und asynchroner Modus
Synchron für kleine PDFs, asynchron + Polling für große Stapel.
Codebeispiele
Integrieren Sie in jede Sprache. Beispiele unten.
$ curl https://api.bankstatementlab.com/v1/extractions \
-H "Authorization: Bearer bsl_live_..." \
-F "file=@statement.pdf" const form = new FormData();
form.append("file", fs.createReadStream("statement.pdf"));
const res = await fetch("https://api.bankstatementlab.com/v1/extractions", {
method: "POST",
headers: { Authorization: `Bearer $${process.env.BSL_KEY}` },
body: form,
});
const data = await res.json(); import requests
with open("statement.pdf", "rb") as f:
r = requests.post(
"https://api.bankstatementlab.com/v1/extractions",
headers={"Authorization": f"Bearer {BSL_KEY}"},
files={"file": f},
)
data = r.json() $ch = curl_init("https://api.bankstatementlab.com/v1/extractions");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer " . getenv("BSL_KEY")]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
"file" => new CURLFile("statement.pdf"),
]);
$data = json_decode(curl_exec($ch), true); Antwortformate
Die Felder data, column_names und transaction_count sind nur vorhanden, wenn status gleich "completed" ist. Andernfalls fehlen sie im JSON vollständig (sie sind nicht null).
GET /v1/extractions/:id
200 OK – Extraktion abgeschlossen
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "ext_3f8a9b2c1d4e5f6a7b8c9d0e",
"status": "completed",
"file_name": "statement-march-2026.pdf",
"created_at": "2026-03-15T10:23:00.000Z",
"completed_at": "2026-03-15T10:23:18.000Z",
"page_count": 3,
"credits_charged": 3,
"api_key_id": "ak_abc123",
"column_names": ["Date", "Description", "Amount"],
"transaction_count": 42,
"data": {
"columns": ["Date", "Description", "Amount"],
"transactions": [
["2026-03-01", "VIREMENT SEPA", "1500.00"],
["2026-03-02", "CB CARREFOUR", "-45.20"]
]
}
} 200 OK – Extraktion läuft
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "ext_3f8a9b2c1d4e5f6a7b8c9d0e",
"status": "processing",
"file_name": "statement-march-2026.pdf",
"created_at": "2026-03-15T10:23:00.000Z",
"page_count": 3,
"credits_charged": 3,
"api_key_id": "ak_abc123"
} 200 OK – Extraktion fehlgeschlagen
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "ext_3f8a9b2c1d4e5f6a7b8c9d0e",
"status": "failed",
"file_name": "statement-march-2026.pdf",
"created_at": "2026-03-15T10:23:00.000Z",
"completed_at": "2026-03-15T10:23:32.000Z",
"page_count": 3,
"credits_charged": 3,
"api_key_id": "ak_abc123",
"error": {
"type": "extraction_failed",
"message": "Extraction failed due to an internal error. Contact support if the issue persists."
}
} Polling-Muster
Wenn eine Extraktion im async-Modus läuft, enthält die Antwort status: "processing", bis der Worker fertig ist. Prüfen Sie immer, ob status gleich "completed" ist, BEVOR Sie die Felder data, transaction_count und column_names lesen; bis zum Abschluss der Extraktion fehlen sie im JSON.
Empfohlene Polling-Frequenz auf Client-Seite: 5 bis 10 Sekunden. Der Worker auf Server-Seite läuft alle 10 Sekunden – schnelleres Polling beschleunigt das Ergebnis nicht.
GET /v1/extractions
200 OK – Gemischte Seite (ein Element pro Status)
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{
"id": "ext_001",
"status": "completed",
"file_name": "march.pdf",
"created_at": "2026-03-15T10:00:00.000Z",
"completed_at": "2026-03-15T10:00:18.000Z",
"page_count": 3,
"credits_charged": 3,
"api_key_id": "ak_abc123",
"column_names": ["Date", "Description", "Amount"],
"transaction_count": 42
},
{
"id": "ext_002",
"status": "processing",
"file_name": "april.pdf",
"created_at": "2026-04-15T10:00:00.000Z",
"page_count": 5,
"credits_charged": 5,
"api_key_id": "ak_abc123"
},
{
"id": "ext_003",
"status": "failed",
"file_name": "may.pdf",
"created_at": "2026-05-15T10:00:00.000Z",
"completed_at": "2026-05-15T10:00:42.000Z",
"page_count": 2,
"credits_charged": 2,
"api_key_id": "ak_abc123",
"error": {
"type": "extraction_failed",
"message": "Extraction failed due to an internal error. Contact support if the issue persists."
}
}
],
"has_more": false
} Polling-Muster
Wenn eine Extraktion im async-Modus läuft, enthält die Antwort status: "processing", bis der Worker fertig ist. Prüfen Sie immer, ob status gleich "completed" ist, BEVOR Sie die Felder data, transaction_count und column_names lesen; bis zum Abschluss der Extraktion fehlen sie im JSON.
Empfohlene Polling-Frequenz auf Client-Seite: 5 bis 10 Sekunden. Der Worker auf Server-Seite läuft alle 10 Sekunden – schnelleres Polling beschleunigt das Ergebnis nicht.
Entwickelt für
Buchhaltungsautomatisierung
Importieren Sie Kontoauszüge Ihrer Kunden direkt in Ihren Buchhaltungsablauf.
Due Diligence bei der Kreditvergabe
Überprüfen Sie Einkommen und Cashflow anhand der Kontoauszüge des Antragstellers.
Persönliche Finanz-Apps
Ermöglichen Sie Benutzern, ihre Kontoauszüge ohne manuelle Dateneingabe zu verknüpfen.
Gleiche Credits, Web + API
1 Credit = 1 Seite. Die Credits werden mit Ihrem Pro- oder Business-Tarif geteilt; für die API gilt kein separater Mindestbetrag.
Siehe Preise →Häufig gestellte Fragen
10 Anfragen pro Sekunde und 1.000 Anfragen pro Stunde je API-Schlüssel. Benötigen Sie höhere Limits? Kontaktieren Sie uns.
Wir streben nach bestem Bemühen eine Verfügbarkeit von 99 % an. In v1 gibt es kein vertragliches SLA; kontaktieren Sie uns für Enterprise-Zusagen.
Fehlgeschlagene Extraktionen werden automatisch Ihrem Guthaben gutgeschrieben. Sie zahlen nur für erfolgreiche Seiten.
PDF nur in v1. Max. 20 MB pro Datei. Bild- und CSV-Unterstützung folgt später.
Englisch, Französisch, Spanisch, Deutsch, Italienisch, Portugiesisch, Japanisch, Niederländisch, Koreanisch, Hindi.
Beginnen Sie noch heute mit der Entwicklung
Das kostenlose Kontingent umfasst 5 Credits. Keine Kreditkarte erforderlich.
Holen Sie sich Ihren API-Schlüssel