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
Inizia a costruire oggi
Il livello gratuito include 5 crediti. Non è richiesta alcuna carta di credito.
Ottieni la tua chiave API