Passer au contenu principal

API d'extraction de relevés bancaires

API REST pour convertir des PDFs de relevés bancaires en JSON structuré. 99 % de précision, remboursement automatique en cas d'échec.

$ curl https://api.bankstatementlab.com/v1/extractions \
  -H "Authorization: Bearer bsl_live_..." \
  -F "file=@statement.pdf"

Extraction de relevés

Extrayez les transactions, soldes et métadonnées de n'importe quel PDF.

Sortie JSON structurée

Schéma prévisible dans les 10 langues supportées.

99 % de précision

Remboursement automatique en cas d'échec. Aucun débit pour les extractions échouées.

Modes sync & async

Synchrone pour petits PDFs, async + polling pour gros lots.

Exemples de code

Intégrez dans n'importe quel langage. Exemples ci-dessous.

$ curl https://api.bankstatementlab.com/v1/extractions \
  -H "Authorization: Bearer bsl_live_..." \
  -F "file=@statement.pdf"

Forme des réponses

Les champs data, column_names et transaction_count ne sont présents que lorsque status vaut "completed". Sinon, ils sont omis du JSON (absents, pas null).

GET /v1/extractions/:id

200 OK — Extraction terminée

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 — Extraction en cours

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 — Extraction échouée

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."
  }
}

Pattern de polling

Lorsqu'une extraction est lancée en mode async, la réponse contient status: "processing" tant que le worker n'a pas terminé. Vérifiez toujours que status vaut "completed" AVANT de lire les champs data, transaction_count et column_names — ils sont omis du JSON tant que l'extraction n'est pas finie.

Fréquence de polling recommandée côté client : 5 à 10 secondes. Le worker côté serveur tourne toutes les 10 secondes — un polling plus rapide n'accélérera pas le résultat.

GET /v1/extractions

200 OK — Page mixte (un élément par état)

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
}

Pattern de polling

Lorsqu'une extraction est lancée en mode async, la réponse contient status: "processing" tant que le worker n'a pas terminé. Vérifiez toujours que status vaut "completed" AVANT de lire les champs data, transaction_count et column_names — ils sont omis du JSON tant que l'extraction n'est pas finie.

Fréquence de polling recommandée côté client : 5 à 10 secondes. Le worker côté serveur tourne toutes les 10 secondes — un polling plus rapide n'accélérera pas le résultat.

Conçu pour

Automatisation comptable

Importez les relevés clients directement dans votre pipeline comptable.

Vérification de crédit

Vérifiez revenus et flux de trésorerie depuis les relevés des demandeurs.

Apps finances personnelles

Permettez à vos utilisateurs de connecter leurs relevés sans saisie manuelle.

Mêmes crédits, web + API

1 crédit = 1 page. Paiement à l'usage, sans engagement mensuel.

Voir les tarifs →

Questions fréquentes

Envoyez votre clé API en Bearer token dans le header Authorization. Nous utilisons des clés API — pas d'OAuth en v1.

10 requêtes/seconde et 1 000 requêtes/heure par clé API. Besoin de plus ? Contactez-nous.

Nous visons 99 % de disponibilité (best-effort). Pas de SLA contractuel en v1 — contactez-nous pour des engagements entreprise.

Les extractions échouées sont automatiquement remboursées sur votre solde. Vous ne payez que les pages réussies.

PDF uniquement en v1. Max 20 Mo par fichier. Support images et CSV à venir.

Anglais, français, espagnol, allemand, italien, portugais, japonais, néerlandais, coréen, hindi.

Commencez à intégrer dès aujourd'hui

Le plan Free inclut 5 crédits. Aucune carte bancaire requise.

Obtenir une clé API