> ## 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.

# Movimientos

> Cargos y abonos de una cuenta.

## Qué es un movimiento

Un **movimiento** es una transacción individual en una cuenta. Su ID es `mov_` + 16 chars hex.

```json theme={null}
{
  "object": "movement",
  "id": "mov_6c8d1f3a9e5b2074",
  "account_id": "acc_3f8a1c5d9e2b6741",
  "amount": -30000,
  "currency": "CLP",
  "type": "card_payment",
  "description": "MERCADOLIBRE CL",
  "comment": null,
  "reference_id": null,
  "pending": false,
  "status": "confirmed",
  "transaction_date": "2026-06-01T04:00:00+00:00",
  "post_date": "2026-06-01T04:00:00+00:00",
  "recipient_account": { "holderName": "MERCADOLIBRE CL" },
  "sender_account": null
}
```

## Amount con signo embebido

El `amount` es **bigint en minor units con signo**:

* `negativo` = egreso (cargo, pago, transferencia salida)
* `positivo` = abono (depósito, refund, transferencia entrante)

Para CLP, 1 peso = 1 minor unit. Para USD/EUR, 1 dólar/euro = 100 minor units (centavos).

```js theme={null}
// CLP — $170.329 de cargo
{ "amount": -30000, "currency": "CLP" }

// USD — $50.00 de abono
{ "amount": 5000, "currency": "USD" }
```

## Type

Valores posibles:

| `type`            | Significa                                    |
| ----------------- | -------------------------------------------- |
| `transfer`        | Transferencia electrónica recibida o emitida |
| `card_payment`    | Pago con tarjeta de débito/crédito           |
| `refund`          | Devolución o reverso                         |
| `cash_withdrawal` | Retiro de efectivo (cajero)                  |
| `service_payment` | Pago de servicio (luz, agua, etc)            |
| `salary`          | Sueldo o ingreso recurrente identificado     |
| `fee`             | Comisión o cargo bancario                    |
| `interest`        | Intereses                                    |
| `other`           | Sin categoría clara                          |

## Status

| `status`     | Significa                                                                 |
| ------------ | ------------------------------------------------------------------------- |
| `confirmed`  | Default. Mov contabilizado, definitivo.                                   |
| `processing` | En proceso. Equivalente a `pending: true`.                                |
| `reversed`   | Reversado por el banco. Su counterparte tiene `status: reversed` también. |
| `duplicated` | Detectado como duplicado por nuestro guardián anti-duplicados.            |

Por default, `GET /v1/accounts/{id}/movements` filtra a `confirmed` + `pending: false`. Para incluir todos: `?confirmed_only=false`.

## Listar

```bash theme={null}
curl "https://api.rail.cl/v1/accounts/acc_xxx/movements?per_page=100&page=1" \
  -H "Authorization: Bearer rail_sk_live_…"
```

Paginación con header `Link` RFC 5988 + `X-Total-Count`. Ver [Paginación](/guides/pagination).

### Filtros útiles

| Query param                         | Comportamiento                                                                                                                                    |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `since=2026-05-01`                  | Solo movs con `post_date >= since`. <Icon icon="triangle-exclamation" color="#f59e0b" /> `post_date` puede ser retroactivo (refunds, back-dated). |
| `until=2026-06-01`                  | Solo movs con `post_date <= until`.                                                                                                               |
| `synced_since=2026-06-01T00:00:00Z` | **Cursor monótono forward** — recomendado para sync incremental. Filtra por `synced_at`, no por `post_date`.                                      |
| `confirmed_only=false`              | Incluye `processing`, `reversed`, `duplicated`.                                                                                                   |
| `per_page=200`                      | Hasta 300 por página. Default 30.                                                                                                                 |

## Sync incremental recomendado

Para mantenerte al día sin re-traer todo, usa `synced_since`:

```bash theme={null}
# Primera sync — trae todo
curl "https://api.rail.cl/v1/accounts/acc_xxx/movements?per_page=200&page=1" \
  -H "Authorization: Bearer rail_sk_live_…"

# Sucesivas — solo lo nuevo desde el cursor
curl "https://api.rail.cl/v1/accounts/acc_xxx/movements?per_page=200&synced_since=2026-06-03T12:36:36Z" \
  -H "Authorization: Bearer rail_sk_live_…"
```

Guarda `last_sync_at` que viene en cada response y úsalo como `synced_since` en la próxima call. Esto te asegura que **no pierdes movs retroactivos** que el banco posteó después de su fecha real.
