FishMem
Memory Operations

History

Read the full change log for a memory — every add, update, invalidation, and delete.

History returns the change log for a single memory: every event that ever touched it, in order, with the value before and after. This is what makes FishMem auditable — you can see not just what a memory says now, but how it got there. It's a GET, and it's free.

What it returns

Each entry records one change to the memory identified by {id}. You get the event type, the previous value, the new value, and a timestamp.

curl https://fishmem.com/v1/memories/mem_124/history \
  -H "Authorization: Bearer fm_..."
const client = new MemoryClient({ apiKey, host: "https://fishmem.com" });

const { results } = await client.history("mem_124");

Response:

{
  "results": [
    {
      "id": "evt_1",
      "memory_id": "mem_124",
      "event": "ADD",
      "previous_value": null,
      "new_value": "Is vegetarian",
      "created_at": "2026-06-13T10:00:00Z"
    },
    {
      "id": "evt_2",
      "memory_id": "mem_124",
      "event": "UPDATE",
      "previous_value": "Is vegetarian",
      "new_value": "Is vegan",
      "created_at": "2026-06-14T09:30:00Z"
    }
  ]
}

Event types

EventMeaning
ADDThe memory was created.
UPDATEIts content was revised.
INVALIDATEIt was superseded — no longer valid as of some point in time.
DELETEThe memory was removed.

Ties to bi-temporal tracking

INVALIDATE is the key to FishMem's bi-temporal model. When a newer fact contradicts an older one, the old memory isn't erased — it's invalidated, with a valid_to set on the memory object. History plus valid_from / valid_to lets you reconstruct what was known and true at any past moment. See bi-temporal for how this works end to end.

Parameters

FieldTypeNotes
{id} (path)stringThe memory id to read history for.

Credits

History is a read and is free.

See the full contract at /api-reference/history.

On this page