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

# Obtén movimientos bancarios

<Warning>
  **Advertencia**

  Esta guía está pensada para ser seguida por un **backend**. Tu Secret Key **nunca** debe enviarse al frontend.
</Warning>

Antes de empezar a usar Fintoc, necesitas obtener la Secret Key de tu cuenta de Fintoc. Se usará a lo largo de esta guía, así que asegúrate de seguir [la guía sobre cómo obtener tus API keys](/es/v2023-11-15/docs/home/dashboard/guides-api-keys) para obtener tu Secret Key en vivo.

Para obtener los movimientos de tu cuenta bancaria, primero necesitas crear un Link y obtener su Link Token. Puedes hacerlo desde [el dashboard](https://app.fintoc.com/), siguiendo [esta guía](/es/v2023-11-15/docs/movements/guides/guides-banking-link-from-dashboard). Una vez que tengas tu Link Token, ¡podemos empezar!

<Info>
  **Tip**

  Como necesitaremos usar nuestra Secret Key y un Link Token, alguna información sensible debe ser reemplazada por ti para que el código de esta guía sea completamente funcional. De ahora en adelante, escribiremos `FINTOC_SECRET_KEY` para representar la Secret Key que debes obtener y `LINK_TOKEN` para representar el Link Token requerido para que cualquiera de este código funcione.
</Info>

## Herramientas

Esta guía muestra cómo usar la API de Fintoc usando el [SDK de Python](https://github.com/fintoc-com/fintoc-python), el [SDK de Node](https://github.com/fintoc-com/fintoc-node) y [cURL](https://curl.se/).

La herramienta `cURL` puede reemplazarse con cualquier herramienta que permita realizar peticiones HTTP a través de la terminal y scripts de shell (por ejemplo, [Wget](https://www.gnu.org/software/wget/)).

Los SDKs pueden instalarse con los siguientes comandos:

```shell Python theme={null}
pip install fintoc
```

```shell Node theme={null}
# Usando npm
npm install fintoc

# Usando yarn
yarn add fintoc
```

Al usar cualquiera de los SDKs, **por favor** asegúrate de estar usando la última versión. Puedes encontrar el changelog y las versiones de los SDKs [aquí](https://github.com/fintoc-com/fintoc-python/releases) (SDK de Python) y [aquí](https://github.com/fintoc-com/fintoc-node/releases) (SDK de Node).

## Obtener la cuenta correcta

Como menciona [la guía para crear un Link desde el dashboard](/es/v2023-11-15/docs/movements/guides/guides-banking-link-from-dashboard), un Link representa la combinación usuario/contraseña del banco. Esto significa que un Link puede tener más de una cuenta (por ejemplo, quizás tienes una cuenta corriente y una cuenta de ahorro bajo la misma combinación usuario/contraseña). ¡Decidamos cuál de nuestras cuentas tiene la información que necesitamos!

Primero, listemos todas nuestras cuentas:

```python theme={null}
from fintoc import Fintoc

fintoc_client = Fintoc("FINTOC_SECRET_KEY")
link = fintoc_client.links.get("LINK_TOKEN")
accounts = link.accounts.all()

for account in accounts:
    print(account.serialize())
```

```javascript Node theme={null}
import { Fintoc } from 'fintoc';

async function main() {
    const fintocClient = new Fintoc('FINTOC_SECRET_KEY');
    const link = await fintocClient.links.get('LINK_TOKEN');
    const accounts = await link.accounts.all();

    for await (const account of accounts) {
        console.log(account.serialize());
    }
}

main();
```

```shell cURL theme={null}
curl --request GET \
    --url 'https://api.fintoc.com/v1/accounts/?link_token=LINK_TOKEN' \
    --header 'Authorization: FINTOC_SECRET_KEY'
```

La salida de cada uno de los snippets anteriores debería verse algo así:

```python Python theme={null}
# Salida formateada
{
    "balance": {
        "available": 0,
        "current": 0,
        "limit": 0
    },
    "currency": "CLP",
    "holder_id": "199586335",
    "holder_name": "DANIEL ALEJANDRO LEAL BITRAN",
    "id": "acc_MNejK7B76wbJGbl1",
    "name": "Cuenta de Ahorro",
    "number": "340127831",
    "object": "account",
    "official_name": "Cuenta de Ahorro",
    "refreshed_at": "2021-11-30T17:53:59.438000+00:00",
    "type": "savings_account"
}
{
    "balance": {
        "available": 0,
        "current": 0,
        "limit": 200000
    },
    "currency": "CLP",
    "holder_id": "199586335",
    "holder_name": "DANIEL ALEJANDRO LEAL BITRAN",
    "id": "acc_O38ioEA4QejjnGeb",
    "name": "Cuenta Corriente",
    "number": "3945154",
    "object": "account",
    "official_name": "Cuenta Corriente MN",
    "refreshed_at": "2021-11-30T16:54:23.441000+00:00",
    "type": "checking_account"
}
```

```javascript Node theme={null}
// Salida formateada
{
  balance: {
    available: 0,
    current: 0,
    limit: 0
  },
  currency: 'CLP',
  holder_id: '199586335',
  holder_name: 'DANIEL ALEJANDRO LEAL BITRAN',
  id: 'acc_MNejK7B76wbJGbl1',
  name: 'Cuenta de Ahorro',
  number: '340127831',
  object: 'account',
  official_name: 'Cuenta de Ahorro',
  refreshed_at: '2021-11-30T17:53:59.438000+00:00',
  type: 'savings_account'
}
{
  balance: {
    available: 0,
    current: 0,
    limit: 200000
  },
  currency: 'CLP',
  holder_id: '199586335',
  holder_name: 'DANIEL ALEJANDRO LEAL BITRAN',
  id: 'acc_O38ioEA4QejjnGeb',
  name: 'Cuenta Corriente',
  number: '3945154',
  object: 'account',
  official_name: 'Cuenta Corriente MN',
  refreshed_at: '2021-11-30T16:54:23.441000+00:00',
  type: 'checking_account'
}
```

```shell cURL theme={null}
# Salida formateada
[
    {
        "balance": {
            "available": 0,
            "current": 0,
            "limit": 0
        },
        "currency": "CLP",
        "holder_id": "199586335",
        "holder_name": "DANIEL ALEJANDRO LEAL BITRAN",
        "id": "acc_MNejK7B76wbJGbl1",
        "name": "Cuenta de Ahorro",
        "number": "340127831",
        "object": "account",
        "official_name": "Cuenta de Ahorro",
        "refreshed_at": "2021-11-30T17:53:59.438000+00:00",
        "type": "savings_account"
    }
    {
        "balance": {
            "available": 0,
            "current": 0,
            "limit": 200000
        },
        "currency": "CLP",
        "holder_id": "199586335",
        "holder_name": "DANIEL ALEJANDRO LEAL BITRAN",
        "id": "acc_O38ioEA4QejjnGeb",
        "name": "Cuenta Corriente",
        "number": "3945154",
        "object": "account",
        "official_name": "Cuenta Corriente MN",
        "refreshed_at": "2021-11-30T16:54:23.441000+00:00",
        "type": "checking_account"
    }
]
```

En nuestro caso, queremos usar los datos de nuestra cuenta corriente, así que ahora sabemos que necesitamos usar la cuenta con id `acc_O38ioEA4QejjnGeb` para buscar nuestros movimientos. El id de tu cuenta debería ser diferente, pero también debería empezar con `acc_`.

<Info>
  **Tip**

  De ahora en adelante, escribiremos `ACCOUNT_ID` para representar el id de la cuenta que queremos usar.
</Info>

## Obteniendo los movimientos

Ahora que sabemos el id de la cuenta que queremos usar, ¡solo necesitamos usarlo para obtener los movimientos!

```python theme={null}
from fintoc import Fintoc

fintoc_client = Fintoc("FINTOC_SECRET_KEY")
link = fintoc_client.links.get("LINK_TOKEN")
account = link.accounts.get("ACCOUNT_ID")

movements = account.movements.all()

for movement in movements:
    print(movement.serialize())
```

```javascript Node theme={null}
import { Fintoc } from 'fintoc';

async function main() {
    const fintocClient = new Fintoc('FINTOC_SECRET_KEY');
    const link = await fintocClient.links.get('LINK_TOKEN');
    const account = await link.accounts.get('ACCOUNT_ID');

    const movements = await account.movements.all();

    for await (const movement of movements) {
        console.log(movement.serialize());
    }
}

main();
```

```shell cURL theme={null}
curl --request GET \
    --url 'https://api.fintoc.com/v1/accounts/ACCOUNT_ID/movements?link_token=LINK_TOKEN' \
    --header 'Authorization: FINTOC_SECRET_KEY' \
    --header 'Accept: application/json'
```

La salida de cada uno de los snippets anteriores debería verse algo así:

```python theme={null}
# Salida formateada
{
  "id": "mov_J32e7dHabkrqQ48P",
  "description": "Abono por transferencia de Daniel Alejandro Leal Bitrán Rut 19.958.633-5 desde Cuenta Corriente de B.Santander, el 28/11/2021 a las 19:16",
  "amount": 3143097,
  "currency": "CLP",
  "post_date": "2021-11-29T00:00:00.000Z",
  "transaction_date": "2021-11-28T19:16:00.000Z",
  "type": "transfer",
  "recipient_account": None,
  "sender_account": {
    "holder_id": "199586335",
    "number": None,
    "institution": None,
    "holder_name": "Daniel Alejandro Leal Bitran"
  },
  "comment": None,
  "reference_id": None,
  "pending": False,
  "object": "movement"
}
{
  .
  .
  .
}
.
.
.
```

```javascript Node theme={null}
// Salida formateada
{
  id: 'mov_J32e7dHabkrqQ48P',
  description: 'Abono por transferencia de Daniel Alejandro Leal Bitrán Rut 19.958.633-5 desde Cuenta Corriente de B.Santander, el 28/11/2021 a las 19:16',
  amount: 3143097,
  currency: 'CLP',
  post_date: '2021-11-29T00:00:00.000Z',
  transaction_date: '2021-11-28T19:16:00.000Z',
  type: 'transfer',
  recipient_account: null,
  sender_account: {
    holder_id: '199586335',
    number: null,
    institution: null,
    holder_name: 'Daniel Alejandro Leal Bitran'
  },
  comment: null,
  reference_id: null,
  pending: false,
  object: 'movement'
}
{
  .
  .
  .
}
.
.
.
```

```shell cURL theme={null}
# Salida formateada
[
    {
        "id": "mov_J32e7dHabkrqQ48P",
        "description": "Abono por transferencia de Daniel Alejandro Leal Bitrán Rut 19.958.633-5 desde Cuenta Corriente de B.Santander, el 28/11/2021 a las 19:16",
        "amount": 3143097,
        "currency": "CLP",
        "post_date": "2021-11-29T00:00:00.000Z",
        "transaction_date": "2021-11-28T19:16:00.000Z",
        "type": "transfer",
        "recipient_account": null,
        "sender_account": {
            "holder_id": "199586335",
            "number": null,
            "institution": null,
            "holder_name": "Daniel Alejandro Leal Bitran"
        },
        "comment": null,
        "reference_id": null,
        "pending": false,
        "object": "movement"
    },
    {
        .
        .
        .
    },
    .
    .
    .
]
```

<Warning>
  **Advertencia**

  Ten en cuenta que, si bien cada SDK de Fintoc maneja la paginación internamente, el método `cURL` no pagina los resultados de la API *automágicamente*. Cada página devuelve por defecto los últimos 30 elementos del recurso. Cada respuesta también devuelve un header `Link` que contiene la información de paginación. Para obtener la siguiente página, busca el elemento `next` en el header `Link` de la respuesta, y haz una petición a esa URL. Las páginas de un recurso terminan cuando no hay elemento `next` en el header `Link` de la respuesta.

  Puedes leer más sobre paginación aquí.
</Warning>
