> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tupana.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Listar cuentas bancarias

> Las cuentas de las empresas conectadas, con los saldos de la última lectura. Exige `banking:read` explícito.

Las cuentas bancarias de las empresas conectadas a tu integración, con los
saldos tal como quedaron en la última lectura. Es una lista plana: filtras por
empresa o por conexión en vez de navegar por ellas.

```bash theme={null}
curl "https://api.tupana.ai/v2/bank-accounts/?company_id=ment_3672486436546233854" \
  -H "Authorization: Api-Key TU_API_KEY"
```

```json theme={null}
{
  "data": [
    {
      "id": "bacc_7Hk2938475610293",
      "connection_id": "cred_9Pq5028174639201",
      "company_id": "ment_3672486436546233854",
      "institution": { "code": "cl_banco_santander", "name": "Banco Santander" },
      "type": "depository",
      "subtype": "checking",
      "name": "Cuenta Corriente",
      "number_mask": "5678",
      "currency": "CLP",
      "balances": {
        "current": 1250000,
        "available": 1200000,
        "limit": null,
        "refreshed_at": "2026-10-28T09:12:00Z"
      },
      "credit": null,
      "status": "open"
    }
  ],
  "meta": { "page": 1, "page_size": 50, "total": 1, "total_pages": 1 },
  "links": { "next": null, "prev": null }
}
```

## Permiso

Necesitas una API key con el permiso **`banking:read`** escrito en ella. El
comodín `*` no lo concede: los saldos son de un tercero y no salen por una key
que nunca pidió verlos. Sin él, `403` con código `banking_permission_required`.

## Filtros

| Parámetro | Qué hace |
| - | - |
| `company_id` | Solo las cuentas de esa empresa (`ment_…`). |
| `connection_id` | Solo las cuentas que alimenta esa conexión (`cred_…`, el id de [`GET /connections/`](https://docs.tupana.ai/api-reference/v2/connections/list)). |
| `type` | `depository` (corriente, vista, ahorro) o `credit` (tarjeta, línea). |
| `subtype` | `checking`, `savings`, `sight`, `credit_card`, `line_of_credit`. |
| `status` | `open` o `removed_from_connection`. |

Un valor fuera de ese vocabulario responde `400` con `code: parameter_invalid` y
`param` con el filtro culpable. `page` y `page_size` (tope 200) paginan;
`?fields=id,balances` recorta cada cuenta a esos campos.

## Lo que trae cada cuenta

* `type` y `subtype` son estables aunque cada banco nombre sus productos a su
  manera. Cuando Tupana no reconoce el producto, `subtype` viene `null`.
* `number_mask` son los últimos 4 dígitos. El número completo nunca sale por la API.
* `balances` son números: enteros en CLP, con decimales en otras monedas.
  `current` es el saldo contable, `available` el disponible y `limit` el cupo
  (tarjetas y líneas). En una tarjeta, `current` es lo adeudado.
* `balances.refreshed_at` es la última lectura del banco. **El GET nunca toca
  al banco**: la frescura la define el ciclo de sincronización de Tupana, no
  tus llamadas.
* `credit` solo viene en cuentas de crédito: período de facturación, total
  facturado y el id del estado de cuenta; vencimiento y pago mínimo llegan
  cuando la fuente los entregue. Ver [Tarjetas de crédito](https://docs.tupana.ai/api-reference/v2/banking/guides/credit-cards.md).
* `status` es `open` mientras la cuenta sigue en la conexión y
  `removed_from_connection` cuando el banco dejó de listarla. Sus movimientos
  se conservan.

> [!NOTE]
>
> Cada lectura queda registrada con tu API key y la cuenta consultada. Es lo que
> permite responder al titular de la cuenta qué integraciones la han visto.


## OpenAPI

````yaml api-reference/openapi-v2.json GET /bank-accounts/
openapi: 3.0.0
info:
  title: Tupana API — v2
  description: >-
    API v2 de Tupana: facturación electrónica, cesiones, recaudación, consultas,
    boleta de honorarios y nómina. Los identificadores de recursos son public
    IDs opacos con prefijo (docu_, ment_, cred_, doce_, empl_…).
  version: 2.0.0
servers:
  - url: https://api.tupana.ai/v2
    description: Producción (v2)
security:
  - apiKeyAuth: []
paths:
  /bank-accounts/:
    get:
      tags:
        - Cuentas bancarias
      summary: Listar cuentas bancarias
      description: >-
        Las cuentas de las empresas conectadas, con los saldos de la última
        lectura. Exige `banking:read` explícito.
      operationId: listBankAccounts_v2
      parameters:
        - name: company_id
          in: query
          required: false
          schema:
            type: string
            example: ment_3672486436546233854
          description: Solo las cuentas de esa empresa.
        - name: connection_id
          in: query
          required: false
          schema:
            type: string
            example: cred_9Pq5028174639201
          description: Solo las cuentas que alimenta esa conexión.
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - depository
              - credit
        - name: subtype
          in: query
          required: false
          schema:
            type: string
            enum:
              - checking
              - savings
              - sight
              - credit_card
              - line_of_credit
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - open
              - removed_from_connection
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            default: 50
            maximum: 200
        - name: fields
          in: query
          required: false
          schema:
            type: string
          description: Campos a devolver, separados por coma. `id` siempre va.
      responses:
        '200':
          description: Cuentas bancarias
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/BankAccount'
                  meta:
                    type: object
                    properties:
                      page:
                        type: integer
                      page_size:
                        type: integer
                      total:
                        type: integer
                      total_pages:
                        type: integer
                  links:
                    type: object
                    properties:
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
        '400':
          description: >-
            Un filtro con un valor fuera del vocabulario (`code:
            parameter_invalid`, `param`)
        '403':
          description: >-
            La API key no tiene `banking:read` explícito (`code:
            banking_permission_required`)
      security:
        - apiKeyAuth: []
components:
  schemas:
    BankAccount:
      type: object
      properties:
        id:
          type: string
          example: bacc_7Hk2938475610293
        connection_id:
          type: string
          nullable: true
          example: cred_9Pq5028174639201
          description: La conexión (`cred_…`) que alimenta esta cuenta.
        company_id:
          type: string
          example: ment_3672486436546233854
        institution:
          type: object
          properties:
            code:
              type: string
              example: cl_banco_santander
            name:
              type: string
              example: Banco Santander
        type:
          type: string
          enum:
            - depository
            - credit
        subtype:
          type: string
          nullable: true
          enum:
            - checking
            - savings
            - sight
            - credit_card
            - line_of_credit
          description: '`null` cuando Tupana no reconoce el producto del banco.'
        name:
          type: string
          example: Cuenta Corriente
        number_mask:
          type: string
          nullable: true
          example: '5678'
          description: Últimos 4 dígitos. El número completo nunca sale.
        currency:
          type: string
          example: CLP
        balances:
          type: object
          properties:
            current:
              type: number
              nullable: true
              example: 1250000
              description: Saldo contable. En una tarjeta, lo adeudado.
            available:
              type: number
              nullable: true
              example: 1200000
            limit:
              type: number
              nullable: true
              description: Cupo (tarjetas y líneas).
            refreshed_at:
              type: string
              format: date-time
              nullable: true
              description: Última lectura del banco. El GET nunca toca al banco.
        credit:
          type: object
          nullable: true
          description: Solo en cuentas de crédito; `null` en el resto.
          properties:
            billing_period_end:
              type: string
              format: date
              nullable: true
            payment_due_date:
              type: string
              format: date
              nullable: true
              description: '`null` hasta que la fuente lo entregue.'
            minimum_payment:
              type: number
              nullable: true
              description: '`null` hasta que la fuente lo entregue.'
            total_billed:
              type: number
              nullable: true
            statement_id:
              type: string
              nullable: true
              example: ccs_7382910465728
        status:
          type: string
          enum:
            - open
            - closed
            - removed_from_connection
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API Key para autenticación. Debe proporcionarse en el header
        Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo
        'Api-Key ' seguido de tu API key)

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.