# Storage (/observe/storage)

Every call is saved by default: the session, its turns, every event, the
summary and both audio channels, in a database and folder you control.

## Configure the store [#configure-the-store]

```yaml title="config.cuelo"
store:
  url: sqlite://cuelo.db # or postgres://, mysql://
  audio: ./recordings
summary: true # LLM summary when each call ends
```

- **SQLite** works out of the box. **Postgres** needs `cuelo[postgres]`, and
  **MySQL** needs `cuelo[mysql]`.
- Put passwords in `.env` and reference them:
  `postgres://app:${DB_PASSWORD}@db.internal/cuelo`.
- The store holds sessions, turns, events and summaries. Recordings are WAV
  files per side (`user.wav`, `agent.wav`) under `store.audio`, aligned on
  the call's timeline.

## The dashboard API [#the-dashboard-api]

The same server exposes read-only JSON over the store. The dashboard uses it,
and so can you:

| Route                                                 | Returns                                  |
| ----------------------------------------------------- | ---------------------------------------- |
| `GET /api/sessions?limit=300`                         | recent sessions                          |
| `GET /api/sessions/{id}`                              | one session                              |
| `GET /api/sessions/{id}/turns`                        | turns with text and timing               |
| `GET /api/sessions/{id}/events?since=<seq>`           | events, incrementally                    |
| `GET /api/sessions/{id}/metrics`                      | latency distributions and per-turn stats |
| `GET /api/sessions/{id}/summaries`                    | call summaries                           |
| `GET /api/sessions/{id}/audio`                        | recordings                               |
| `GET /api/sessions/{id}/audio/{side}.wav`             | one recording                            |
| `GET /api/sessions/{id}/audio/{side}/peaks?buckets=…` | waveform peaks                           |

With API keys configured, these need a key like every other route.

## Retention [#retention]

Cuelo doesn't delete anything on its own. Calls hold audio, transcripts and
tool arguments, which may include personal data, so delete old sessions from
the database and `store.audio` according to your retention policy. Set
`summary: false` to skip LLM summaries.