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

# Portfolio (patrimonio de inversiones)

> La foto agregada del portafolio de inversiones de una persona: cuánto tiene, repartido por moneda y por tipo de producto.

El recurso **Portfolio** te entrega la **foto agregada** de las inversiones de
una persona en un link: cuánto suma hoy su patrimonio, cómo se reparte por
moneda y por tipo de producto (depósitos a plazo, fondos mutuos, acciones, caja).

Es el complemento del bloque [`investment`](/concepts/investments), que describe
**cada producto por separado**. Portfolio los **suma y clasifica**: una sola
llamada te da el total y la distribución, sin que tengas que recorrer las cuentas
y agregarlas vos.

Es **read-only** y se calcula al momento desde las cuentas de inversión que ya
sincronizamos: **no dispara ningún sync**.

## Endpoint

```bash theme={null}
curl "https://api.rail.cl/v1/links/link_8a2f4c6e1b9d5037/portfolio" \
  -H "Authorization: Bearer rail_sk_live_…"
```

Devuelve **404** si el link no tiene cuentas de inversión.

## Respuesta

```json theme={null}
{
  "object": "portfolio",
  "mode": "live",
  "link_id": "link_8a2f4c6e1b9d5037",
  "bank_id": "bice",
  "currency": "CLP",
  "total": 7480000,
  "as_of": "2026-10-20",
  "account_count": 3,
  "allocation_by_currency": [
    { "currency": "CLP", "amount": 7480000 }
  ],
  "allocation_by_asset_class": [
    { "kind": "time_deposit", "amount": 7480000, "count": 3 }
  ],
  "period": {
    "kind": "calendar_month",
    "return": 21500,
    "opening_total": null,
    "deposits": null,
    "withdrawals": null
  },
  "evolution": [],
  "has_unconverted_currencies": false,
  "refreshed_at": "2026-10-22T01:40:00Z"
}
```

| Campo | Qué es |
| - | - |
| `total` | Patrimonio total hoy, en la moneda de reporte (`currency`). |
| `as_of` | A qué **día** corresponde la valorización. No es cuándo sincronizamos: el valor de un fondo o un depósito se publica con rezago (T-1 / T-2). |
| `allocation_by_currency` | La distribución del patrimonio por moneda (el "donut") — cada moneda con su monto. |
| `allocation_by_asset_class` | La distribución por tipo de producto, usando el mismo `kind` del bloque `investment` (`time_deposit`, `mutual_fund`, `stock`, `cash`, `apv`, `other`). Trae el monto y cuántas cuentas de cada tipo. |
| `account_count` | Cuántas cuentas de inversión se agregaron. |
| `has_unconverted_currencies` | `true` si la persona tiene inversiones en una moneda distinta de `currency` que **no** se sumaron al `total` (ver más abajo). |
| `refreshed_at` | Cuándo Rail fue al banco por última vez. |

> [!NOTE]
>
> **Montos en minor units** (igual que `balance`/`amount`): en CLP el entero es
> directamente pesos.

## Moneda de reporte y monedas sin convertir

`total` y `allocation_by_asset_class` agregan **sólo la moneda de reporte**
(`currency`, hoy `CLP`). Si la persona tiene un depósito en **UF** o un fondo en
**dólares**, Rail **no lo convierte** al total —convertir inventaría un número que
depende del tipo de cambio del día—, lo deja **fuera** del `total` y de la
clasificación por tipo, y prende `has_unconverted_currencies: true`.

Esa inversión **sí** aparece en `allocation_by_currency`, con su monto en su
propia moneda. Así tenés siempre la verdad por moneda, y el `total` en pesos
nunca mezcla unidades.

```json theme={null}
"allocation_by_currency": [
  { "currency": "CLP", "amount": 12500000 },
  { "currency": "CLF", "amount": 85000 }   // 850,00 UF, no sumadas al total CLP
],
"has_unconverted_currencies": true
```

## Flujos del mes y evolución

El objeto `period` describe el **movimiento** del patrimonio en el mes corriente:

| Campo | Qué es |
| - | - |
| `period.return` | Rentabilidad del mes (monto, **firmado**: negativo = pérdida). Disponible donde el banco la informa. |
| `period.opening_total` | Patrimonio al cierre del mes anterior. |
| `period.deposits` | Abonos del mes (positivo). |
| `period.withdrawals` | Retiros del mes (positivo). |
| `evolution` | La serie del patrimonio mes a mes, para graficar — arreglo de `{ "as_of", "total" }`. |

**Qué esperar hoy**: `period.return` ya viene poblado donde el banco lo entrega;
`opening_total`, `deposits`, `withdrawals` y `evolution` se van habilitando por
institución y mientras tanto vienen `null`/`[]`. `period` entero es `null` si el
banco no informa ni siquiera la rentabilidad. **Tratá cada campo como opcional**:
cuando `opening_total`, `deposits`, `withdrawals` y `return` estén los cuatro,
cierran la cuenta `opening_total + deposits − withdrawals + return = total`.

## Cobertura por banco

Portfolio funciona en **toda institución que entregue productos de inversión**
(ver [Productos de inversión](/concepts/investments.md)) — hoy Banco de Chile, BCI,
Santander y Banco BICE. Como se deriva de las cuentas de inversión, su detalle
sigue la cobertura de cada banco: `total`, `allocation_by_currency` y
`allocation_by_asset_class` están disponibles en los cuatro; `period` y
`evolution` se van habilitando por institución.

> [!NOTE]
>
> Que dos personas tengan `allocation_by_asset_class` no significa el mismo detalle
> por producto: la riqueza de cada cuenta depende de su banco. Portfolio agrega lo
> que haya; para el detalle producto por producto, mirá cada cuenta `investment`.


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