API bancaria para Chile: movimientos y saldos de tus clientes

La API bancaria de Tupana conecta las cuentas de tus clientes en los principales bancos de Chile y te entrega sus movimientos por REST. Tu cliente conecta su banco en Tupana Link, tu backend recibe un connection_id (cred_…) y desde ahí lees abonos y cargos sincronizados cada hora. La clave del banco nunca pasa por tu sistema, la conexión es de solo lectura y cuesta 0,35 UF al mes por banco conectado, con sandbox gratis.

Una API para leer el banco de tus clientes sin pedirles la clave

Si construyes un ERP, un software de cobranza, una plataforma de gastos o un SaaS financiero para empresas chilenas, tarde o temprano necesitas saber qué entró y qué salió de la cuenta de tu cliente. Pedir la cartola en Excel cada mes no escala, y guardar claves bancarias en tu base de datos es un riesgo que ningún equipo quiere asumir.

Con Tupana la conexión la hace tu cliente dentro de un widget. Tupana guarda la credencial cifrada, sincroniza las cuentas y te expone los movimientos por la misma API REST v2 que usas para facturar. Tu sistema solo conoce el connection_id y el company_id de la empresa.

Es la misma integración que usa la plataforma web de Tupana para su conciliación bancaria, así que no es un producto experimental: cada hora sincroniza cuentas reales de empresas que hoy concilian sus facturas con ella.

Bancos que tus clientes pueden conectar

En Tupana Link tu cliente elige su banco de esta lista. Sirve para cuentas de empresa y de persona, con el RUT y la clave de quien entra a la cuenta:

  • Banco de Chile
  • Santander
  • BancoEstado
  • BCI
  • Itaú
  • Scotiabank
  • Security
  • BICE
  • Falabella

La conexión es directa y segura con el banco de tu cliente, y es de solo lectura: ninguna conexión bancaria de Tupana puede mover dinero. Si tu caso necesita otro banco o una billetera, escríbenos a soporte@tupana.ai y lo revisamos contigo.

De la sesión al primer movimiento en cuatro pasos

  1. Tu backend abre una sesión: POST /v2/connect-sessions/ con capabilities ["banking"] y tu API key. Si ya conoces el RUT de la empresa lo mandas como tax_id. Recibes un client_token de un solo uso que dura 30 minutos.
  2. Tu cliente conecta su banco en Tupana Link: Abres el widget en un iframe con el token. Tu cliente elige el banco, escribe el RUT de la persona y su clave, y el widget espera la respuesta del banco hasta mostrarle sus cuentas. Si la clave está mala, reintenta ahí mismo.
  3. Tu backend recibe connection.active: El webhook trae el connection_id (cred_…), el company_id (ment_…) y tu external_customer_id. Esa es la confirmación: el evento success del widget solo sirve para cerrar tu modal.
  4. Lees los movimientos: GET /v2/documents/?master_entity_id={company_id}&dte_type__code__in=100,101 devuelve los abonos (tipo 100) y los cargos (tipo 101) con su fecha y monto, paginados y filtrables por fecha.

Qué datos entrega la API bancaria

Los movimientos se leen con el mismo endpoint y el mismo formato que las facturas: respuesta { data, meta, links }, ids públicos con prefijo (docu_…, ment_…) y paginación de hasta 100 por página. Si ya integraste la emisión de Tupana, leer el banco es cambiar un filtro.

Tipo 100 · Abonos

Cada entrada de dinero a la cuenta queda como un documento de pago de la empresa, con fecha y monto. Es lo que se cruza con tus facturas por cobrar.

Tipo 101 · Cargos

Cada salida de dinero queda como un egreso bancario, con fecha y monto. Sirve para cuentas por pagar, gastos y flujo de caja.

Cuentas y saldos · Al conectar

Cuando el banco acepta la clave, el widget le muestra a tu cliente sus cuentas con sus saldos, para que confirme que conectó las correctas.

Estado · Estado de la conexión

GET /v2/connections/ lista las conexiones de tus clientes con su estado. Si una clave deja de servir, llega connection.requires_action para que le pidas reconectar.

Cada cuánto se actualizan los movimientos

Tupana sincroniza todas las cuentas conectadas cada hora. Cada corrida trae solo los movimientos nuevos y los deduplica, así que leer dos veces el mismo rango de fechas nunca te devuelve repetidos. Lo recomendado es consultar por fecha (issue_date_gte) desde tu última lectura.

Si una conexión necesita otro horario, por ejemplo una sola sincronización temprano en la mañana, se puede fijar por conexión. Pregúntanos por soporte.

Movimientos que se cruzan con las facturas

Leer el banco es la mitad del problema. La otra mitad es saber qué factura pagó cada abono. Como Tupana también emite y lee las facturas de la empresa, los dos lados viven en el mismo lugar.

Cuando un abono se concilia con una factura, tu backend recibe el webhook document.paid con la factura pagada; si la conciliación se revierte, llega document.unpaid. Así marcas la factura como cobrada en tu sistema sin escribir tu propio motor de cruce de montos, RUT y glosas.

Si además emites con Tupana, la cobranza por correo y WhatsApp de la plataforma se detiene sola cuando el pago queda conciliado. Ver conciliación bancaria y cobranza.

Las claves nunca pasan por tu backend

  • Tu cliente escribe la clave del banco dentro de Tupana Link, que corre en developers.tupana.ai. Tu frontend y tu backend no la ven.
  • Tupana la guarda cifrada y la usa solo para leer. Tu sistema guarda un connection_id que no sirve para entrar al banco.
  • La API key va en tu backend, nunca en el navegador. Las sesiones del widget duran 30 minutos y son de un solo uso.
  • Una API key de sandbox no puede abrir sesiones de producción.
  • Cortas una conexión con DELETE /v2/connections/{connection_id}/: queda inactive y Tupana suelta la clave.

Más detalle de cómo cuidamos los datos en seguridad.

Los avisos que vas a usar

Los webhooks se configuran por empresa con POST /v2/webhooks/, van firmados con HMAC (X-Pana-Signature) y se reintentan. Responde 2xx al tiro y procesa después: el mismo aviso puede llegar dos veces.

EventoCuándo llega
connection.activeEl banco aceptó la clave y listó las cuentas.
connection.requires_actionLa clave no sirvió o dejó de servir. Hay que reconectar.
document.paidUn pago quedó conciliado con una factura.
document.unpaidUna factura pagada volvió a quedar impaga porque se revirtió la conciliación.

Cuánto cuesta la API bancaria

La lectura bancaria cuesta 0,35 UF al mes por banco conectado, más IVA, con movimientos sincronizados sin límite. No hay costo fijo ni mínimo: si un mes no tienes bancos conectados, no pagas. El sandbox es gratis y sin plazo.

Ejemplo: 10 empresas con un banco cada una son 3,5 UF al mes. Si esas mismas empresas además facturan por la API (0,5 UF cada una), el total es 8,5 UF al mes. Tabla completa en precios de la API. Este es el precio de developers; los planes de la plataforma web son otro producto.

Pruébalo en sandbox antes de conectar un banco real

Con una API key de sandbox abres el mismo widget, conectas un banco de prueba y recibes los mismos webhooks, sin tocar un banco real. Puedes recorrer el flujo sin cuenta en developers.tupana.ai/widget y crear tu key en developers.tupana.ai/sandbox.

Los SDKs oficiales (npm install tupana y pip install tupana) traen documents.list y su versión con paginación automática, que es lo que usas para leer los movimientos. La guía paso a paso, con curl y los dos SDKs, está en leer movimientos bancarios.

Preguntas frecuentes

¿Qué bancos de Chile soporta la API bancaria de Tupana?

En Tupana Link tus clientes pueden conectar Banco de Chile, Santander, BancoEstado, BCI, Itaú, Scotiabank, Security, BICE y Falabella, en cuentas de empresa y de persona. Si necesitas otro banco, escríbenos y lo revisamos.

¿Cada cuánto se actualizan los movimientos?

Las cuentas conectadas se sincronizan cada hora y los movimientos se deduplican. Lee por fecha desde tu última consulta y no vas a recibir repetidos.

¿Mi backend tiene que guardar la clave del banco?

No. Tu cliente la escribe dentro de Tupana Link y Tupana la guarda cifrada. Tu sistema solo guarda el connection_id (cred_…), que no sirve para entrar al banco.

¿La API puede hacer transferencias o pagos?

No. La conexión bancaria es de solo lectura: entrega movimientos y nunca puede mover dinero de la cuenta.

¿Cómo leo los movimientos por la API?

Con GET /v2/documents/?master_entity_id={company_id}&dte_type__code__in=100,101. El tipo 100 son los abonos y el 101 los cargos. Con los SDKs es tupana.documents.list con el mismo filtro.

¿Tupana concilia los movimientos con las facturas?

Sí. Cuando un abono se concilia con una factura, tu backend recibe el webhook document.paid; si se revierte, document.unpaid. Tupana también emite y lee las facturas de la empresa, así que los dos lados están en el mismo lugar.

¿Cuánto cuesta la API bancaria?

0,35 UF al mes por banco conectado, más IVA, sin mínimo y con movimientos sin límite. El sandbox es gratis. Es el precio de la API de developers, distinto de los planes de la plataforma web.

¿Puedo combinar banco y SII en la misma integración?

Sí. La misma sesión de Tupana Link acepta banking, sii_data e invoicing, y todo se lee con la misma API key y el mismo company_id. Ver bancos y SII en una sola API.

Sigue leyendo