Ir al contenido principal

API de extracción de extractos bancarios

API REST para convertir extractos bancarios en PDF a JSON estructurado. 99,9 % o más de transacciones correctamente identificadas, reembolso automático en caso de falla.

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

Extracción de extractos bancarios

Extraiga transacciones, saldos y metadatos de cualquier PDF.

Salida JSON estructurada

Esquema predecible en 10 idiomas admitidos.

99,9 % o más de transacciones correctamente identificadas

Reembolso automático en caso de falla. Sin cargo por extracciones fallidas.

Modos síncrono y asíncrono

Modo síncrono para PDF pequeños; modo asíncrono con polling para lotes grandes.

Ejemplos de código

Integre en cualquier idioma. Ejemplos a continuación.

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

Formato de las respuestas

Los campos data, column_names y transaction_count solo están presentes cuando status vale "completed". En los demás casos se omiten del JSON (están ausentes, no son null).

GET /v1/extractions/:id

200 OK — Extracción completada

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 — Extracción en 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 — Extracción fallida

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

Patrón de polling

Cuando una extracción se ejecuta en modo async, la respuesta contiene status: "processing" hasta que el worker termina. Compruebe siempre que status vale "completed" ANTES de leer los campos data, transaction_count y column_names: estos se omiten del JSON hasta que la extracción finaliza.

Frecuencia de polling recomendada en el cliente: de 5 a 10 segundos. El worker del servidor se ejecuta cada 10 segundos; consultar con mayor frecuencia no acelera el resultado.

GET /v1/extractions

200 OK — Página mixta (un 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
}

Patrón de polling

Cuando una extracción se ejecuta en modo async, la respuesta contiene status: "processing" hasta que el worker termina. Compruebe siempre que status vale "completed" ANTES de leer los campos data, transaction_count y column_names: estos se omiten del JSON hasta que la extracción finaliza.

Frecuencia de polling recomendada en el cliente: de 5 a 10 segundos. El worker del servidor se ejecuta cada 10 segundos; consultar con mayor frecuencia no acelera el resultado.

Construido para

Automatización contable

Importe extractos de clientes directamente a su proceso de contabilidad.

Debida diligencia crediticia

Verifique los ingresos y el flujo de caja de los extractos bancarios del solicitante.

Aplicaciones de finanzas personales

Permita que los usuarios conecten sus extractos sin ingresar datos manualmente.

Mismos créditos, web + API

1 crédito = 1 página. Los créditos se comparten con su plan Pro o Business; la API no tiene un mínimo independiente.

Ver precios →

Preguntas frecuentes

Envíe su clave API como token Bearer en el encabezado Authorization. Usamos claves API; no hay OAuth en v1.

10 solicitudes por segundo y 1.000 solicitudes por hora para cada clave API. ¿Necesita límites superiores? Póngase en contacto con nosotros.

Nuestro objetivo es una disponibilidad del 99 % según nuestro mejor esfuerzo. La v1 no incluye un SLA contractual; póngase en contacto con nosotros para acordar compromisos empresariales.

Las extracciones fallidas se reembolsan automáticamente a su saldo de créditos. Solo paga por las páginas procesadas correctamente.

PDF sólo en v1. Máximo 20 MB por archivo. La compatibilidad con imágenes y CSV llegará más adelante.

Inglés, francés, español, alemán, italiano, portugués, japonés, holandés, coreano, hindi.

Comience a construir hoy

El nivel gratuito incluye 5 créditos. No se requiere tarjeta de crédito.

Obtenga su clave API