There are two endpoints for listing memories:
GET /api/memories— filters in the URL (legacy, used by the dashboard and Chrome extension)POST /api/memories/list— filters in a JSON body (new, easier for big metadata-filter payloads)
Both return the same memory rows.
POST shape
curl -X POST https://www.mnueron.com/api/memories/list \
-H "Authorization: Bearer $MNUERON_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"namespace": "preferences",
"tags": ["style"],
"limit": 50,
"order": "newest"
}'
Body
| Field | Type | Default | Notes |
|---|---|---|---|
namespace | string | — | Exact match |
limit | int | 50 | 1..500 |
offset | int | 0 | 0..100000 |
created_after / created_before | int (epoch ms) | — | Inclusive |
updated_after / updated_before | int (epoch ms) | — | Inclusive |
metadata_filter | object | — | JSONB @> containment, e.g. {"speaker":"sarah"} |
tags | string[] | — | tags @> input (memory must have all of these) |
entity | uuid | — | Canonical entity id — narrows to memories that mention this entity |
order | string | updated_desc | newest / oldest / updated_desc / updated_asc |
Response
{
"memories": [
{
"id": "...",
"content": "...",
"namespace": "preferences",
"tags": ["style"],
"metadata": {},
"created_at": 1737070000000,
"updated_at": 1737070000000
}
],
"limit": 50,
"offset": 0,
"total": 14
}
total is the COUNT(*) over the same filter, so a paginating UI can render "Showing 1–50 of 14,308" without a second call. It can be null if the count query was skipped for an over-large org (fail-soft).
GET shape (legacy)
curl "https://www.mnueron.com/api/memories?namespace=preferences&limit=50&order=newest" \
-H "Authorization: Bearer $MNUERON_API_TOKEN"
| Query param | Same meaning as POST |
|---|---|
q | Full-text search (BM25). Returns score per row. |
namespace | |
limit / offset | |
created_after / created_before / updated_after / updated_before | |
metadata_filter | URL-encoded JSON |
entity |
Returns a plain array (no envelope), no total.