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

# Sincronizar con tu ERP

> Trae a tu ERP o base de datos todo lo nuevo y lo que cambió, sin perder nada.

Una transacción puede cambiar después de creada: se categoriza, se concilia o le llega su CEP. Para tener tu copia siempre al día, sincroniza por **fecha de actualización**, no por fecha de la transacción.

## La receta

1. Guarda el momento en que empezó tu última corrida (`ultima_corrida`).
2. Pide lo que cambió desde entonces, ordenado por actualización:

```bash theme={null}
curl "https://api.tesoria.ai/transactions?sort=updated_at&updated_since=2026-09-30T00:00:00-06:00&limit=200" \
  -H "Authorization: Bearer tsr_live_TU_LLAVE"
```

3. Por cada transacción, haz *upsert* en tu base usando `id` como llave (si existe, actualízala; si no, créala).
4. Sigue `next_cursor` hasta que `has_more` sea `false`.
5. Guarda el inicio de esta corrida como la nueva `ultima_corrida`.

## Ejemplo en Python

```python theme={null}
import os, requests
from datetime import datetime, timezone

BASE = "https://api.tesoria.ai/transactions"
HEADERS = {"Authorization": f"Bearer {os.environ['TESORIA_API_KEY']}"}

def sincronizar(ultima_corrida: str) -> str:
    inicio = datetime.now(timezone.utc).isoformat()
    params = {"sort": "updated_at", "updated_since": ultima_corrida, "limit": 200}
    while True:
        r = requests.get(BASE, headers=HEADERS, params=params, timeout=30)
        r.raise_for_status()
        pagina = r.json()
        for mov in pagina["data"]:
            guardar(mov)  # upsert por mov["id"]
        if not pagina["has_more"]:
            return inicio
        params["cursor"] = pagina["next_cursor"]
```

## Recomendaciones

* Corre cada 5 a 15 minutos. No hace falta más seguido.
* Si recibes `429`, espera lo que diga `Retry-After` y sigue con el mismo `cursor`.
* Filtra lo que no te sirve desde la llamada (`account_id`, `type`) en lugar de bajar todo.


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