Invia la tua chiave API come token Bearer nell'intestazione Authorization. Utilizziamo chiavi API: nessun OAuth nella versione v1.
API per l'estrazione dell'estratto conto
API REST per convertire estratti conto PDF in JSON strutturato. 99,9%+ delle transazioni identificate correttamente, rimborso automatico in caso di fallimento.
$ curl https://api.bankstatementlab.com/v1/extractions \
-H "Authorization: Bearer bsl_live_..." \
-F "file=@statement.pdf" Estrazione estratti conto
Estrai transazioni, saldi e metadati da qualsiasi PDF.
Output JSON strutturato
Schema prevedibile nelle 10 lingue supportate.
99,9%+ delle transazioni identificate correttamente
Rimborso automatico in caso di fallimento. Nessun addebito per estrazioni fallite.
Modalità sincrona e asincrona
Sincrono per piccoli PDF, asincrono + polling per batch di grandi dimensioni.
Esempi di codice
Integrazione in qualsiasi lingua. Esempi di seguito.
$ 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); Formato delle risposte
I campi data, column_names e transaction_count sono presenti solo quando status vale "completed". Negli altri casi vengono omessi dal JSON (sono assenti, non null).
GET /v1/extractions/:id
200 OK — Estrazione completata
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 — Estrazione in corso
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 — Estrazione fallita
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."
}
} Schema di polling
Quando un'estrazione viene eseguita in modalità async, la risposta contiene status: "processing" finché il worker non ha terminato. Verifica sempre che status valga "completed" PRIMA di leggere i campi data, transaction_count e column_names: vengono omessi dal JSON fino al completamento dell'estrazione.
Frequenza di polling consigliata lato client: da 5 a 10 secondi. Il worker lato server viene eseguito ogni 10 secondi; un polling più frequente non accelera il risultato.
GET /v1/extractions
200 OK — Pagina mista (un elemento per stato)
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
} Schema di polling
Quando un'estrazione viene eseguita in modalità async, la risposta contiene status: "processing" finché il worker non ha terminato. Verifica sempre che status valga "completed" PRIMA di leggere i campi data, transaction_count e column_names: vengono omessi dal JSON fino al completamento dell'estrazione.
Frequenza di polling consigliata lato client: da 5 a 10 secondi. Il worker lato server viene eseguito ogni 10 secondi; un polling più frequente non accelera il risultato.
Pensata per
Automazione contabile
Importa gli estratti conto dei clienti direttamente nella tua pipeline di contabilità.
Due diligence sui prestiti
Verificare il reddito e il flusso di cassa dagli estratti conto bancari del richiedente.
App di finanza personale
Consenti agli utenti di collegare i propri estratti conto senza l'immissione manuale dei dati.
Stessi crediti, web + API
1 credito = 1 pagina. I crediti sono condivisi con il piano Pro o Business; non esiste un minimo separato per l'API.
Vedi i prezzi →Domande frequenti
10 richieste al secondo e 1.000 richieste all'ora per ciascuna chiave API. Servono limiti superiori? Contattaci.
Puntiamo a una disponibilità del 99% secondo il principio del massimo impegno. La v1 non include uno SLA contrattuale; contattaci per impegni enterprise.
I crediti delle estrazioni non riuscite vengono riaccreditati automaticamente sul tuo saldo. Paghi solo per le pagine elaborate con successo.
PDF solo nella v1. Massimo 20 MB per file. Il supporto per immagini e CSV sarà disponibile più tardi.
Inglese, francese, spagnolo, tedesco, italiano, portoghese, giapponese, olandese, coreano, hindi.
Inizia a costruire oggi
Il livello gratuito include 5 crediti. Non è richiesta alcuna carta di credito.
Ottieni la tua chiave API