# Saving

| Route | What it does | Main fields |
|---|---|---|
| `POST /v1/memories` | Saves one memory | `user`, `text`; optional: `source`, `thread`, `acl` (readers), `at` (when it was said), `expires_at`, `url` + `title` + `anchor` (a web clip), `partial`, `timezone`, `viewer` |
| `POST /v1/events` | Saves typed events (status changes, assignments) exactly | `user`, `events: [{type, object, to, actor, time}]` |
| `POST /v1/imports` | Imports many records as a job | `user`, `records: [...]` (or a supported export format); returns a `job_id` |
| `GET /v1/jobs/{id}` | Shows a job's progress | — |
| `POST /v1/feedback` | Corrects or confirms a memory | `user`, `target`, `kind` (`wrong`, `outdated`, `pin`, `unpin`, `verify`, `same_person`, `different_people`), `note` |
| `POST /v1/notes` | Saves a note your model wrote. A note is **never** used as evidence | `user`, `text` |

- **Unknown fields are refused** with a `400` that lists the allowed ones.
- **A save answers `status`:**
  - `indexed`: searchable now;
  - `queued`: accepted in order and searchable shortly. Pass `min_version` on a read to wait for it.
- **The same text saved twice is one record.**
