Ir para o conteúdo principal

API de extração de extrato bancário

API REST para converter extratos bancários em PDF em JSON estruturado. 99,9%+ das transações corretamente identificadas, reembolso automático em caso de falha.

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

Extração de extratos bancários

Extraia transações, saldos e metadados de qualquer PDF.

Saída JSON estruturada

Esquema previsível nas 10 línguas suportadas.

99,9%+ das transações corretamente identificadas

Os créditos são reembolsados automaticamente em caso de falha. Não são cobradas extrações falhadas.

Modos síncrono e assíncrono

Síncrono para PDFs pequenos, assíncrono + polling para lotes grandes.

Exemplos de código

Integre em qualquer língua. Exemplos abaixo.

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

Formato das respostas

Os campos data, column_names e transaction_count só estão presentes quando status é igual a "completed". Caso contrário, são omitidos do JSON (ausentes, não null).

GET /v1/extractions/:id

200 OK — Extração concluída

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 — Extração em curso

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 — Extração falhada

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

Padrão de polling

Quando uma extração é executada no modo async, a resposta contém status: "processing" até o worker terminar. Verifique sempre se status é igual a "completed" ANTES de ler os campos data, transaction_count e column_names; estes são omitidos do JSON até a extração estar concluída.

Frequência de polling recomendada no cliente: 5 a 10 segundos. O worker no servidor é executado a cada 10 segundos; consultar mais depressa não acelera o resultado.

GET /v1/extractions

200 OK — Página mista (um elemento por estado)

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
}

Padrão de polling

Quando uma extração é executada no modo async, a resposta contém status: "processing" até o worker terminar. Verifique sempre se status é igual a "completed" ANTES de ler os campos data, transaction_count e column_names; estes são omitidos do JSON até a extração estar concluída.

Frequência de polling recomendada no cliente: 5 a 10 segundos. O worker no servidor é executado a cada 10 segundos; consultar mais depressa não acelera o resultado.

Concebida para

Automação contabilística

Importe extratos de clientes diretamente para o seu pipeline de contabilidade.

Due diligence de empréstimos

Verifique a receita e o fluxo de caixa dos extratos bancários do requerente.

Aplicações de finanças pessoais

Permita que os utilizadores liguem os seus extratos sem introdução manual de dados.

Mesmos créditos, web + API

1 crédito = 1 página. Os créditos são partilhados com o plano Pro ou Business; não existe um mínimo separado para a API.

Ver preços →

Perguntas frequentes

Envie a sua chave API como token Bearer no cabeçalho Authorization. Utilizamos chaves API; não existe OAuth na v1.

10 pedidos por segundo e 1.000 pedidos por hora por chave API. Precisa de limites superiores? Contacte-nos.

O nosso objetivo é uma disponibilidade de 99% segundo o princípio do melhor esforço. A v1 não inclui um SLA contratual; contacte-nos para acordar compromissos empresariais.

Os créditos das extrações falhadas são repostos automaticamente no seu saldo. Só paga pelas páginas processadas com sucesso.

PDF apenas na v1. Máximo de 20 MB por ficheiro. Suporte para imagem e CSV em breve.

Inglês, francês, espanhol, alemão, italiano, português, japonês, holandês, coreano, hindi.

Comece a construir hoje

O nível gratuito inclui 5 créditos. Não é necessário cartão de crédito.

Obtenha a sua chave API