DEV Community

Cover image for Your memory, your data: read, edit, export, delete
Jonathan Murray for Backboard.io

Posted on

Your memory, your data: read, edit, export, delete

Most AI memory features are a black box. The assistant remembers things about your users, but you cannot see what it stored, you cannot fix a wrong fact, and you definitely cannot take the data with you if you leave. Your users' information lives in someone else's system on someone else's terms.

We want you to be here by choice, not by force.

Backboard treats memory as your data. Every memory an assistant holds is readable, editable, exportable, and deletable through the API. No black box. If you want to inspect it, you can. If you want to leave, you take it with you.

Here is the full lifecycle.

Read: see everything the assistant knows

List every memory on an assistant. Results are paginated, and omitting the page fetches all of them.

Python

pip install backboard-sdk
Enter fullscreen mode Exit fullscreen mode
import asyncio
from backboard import BackboardClient

async def main():
    client = BackboardClient(api_key="YOUR_API_KEY")
    assistant_id = "your-assistant-id"

    memories = await client.get_memories(assistant_id, page=1, page_size=25)
    for m in memories.memories:
        print(f"[{m.id}] {m.content}")
    print(f"Total: {memories.total_count}")

asyncio.run(main())
Enter fullscreen mode Exit fullscreen mode

JavaScript (Node 18+)

const assistantId = "your-assistant-id";

const res = await fetch(
  `https://app.backboard.io/api/assistants/${assistantId}/memories?page=1&page_size=25`,
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

for (const m of data.memories) {
  console.log(`[${m.id}] ${m.content}`);
}
console.log(`Total: ${data.total_count}`);
Enter fullscreen mode Exit fullscreen mode

cURL

curl "https://app.backboard.io/api/assistants/your-assistant-id/memories?page=1&page_size=25" \
  -H "X-API-Key: YOUR_API_KEY"
Enter fullscreen mode Exit fullscreen mode

You can also search semantically instead of listing everything:

results = await client.search_memories(
    assistant_id,
    query="user interface preferences",
    limit=5,
)
for m in results["memories"]:
    print(f"[{m.get('score', 0):.2f}] {m['content']}")
Enter fullscreen mode Exit fullscreen mode

Edit: fix what is wrong

A user gets promoted, changes a preference, corrects a detail. Update the memory in place. You can also add a fact manually.

Python

# Add a fact yourself
await client.add_memory(
    assistant_id,
    content="User prefers dark mode in all applications",
    metadata={"source": "manual", "confidence": "high"},
)

# Update an existing memory
await client.update_memory(
    assistant_id,
    memory_id,
    content="Updated preference: user prefers system theme",
)
Enter fullscreen mode Exit fullscreen mode

JavaScript (Node 18+)

// Add a fact
await fetch(`https://app.backboard.io/api/assistants/${assistantId}/memories`, {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    content: "User prefers dark mode in all applications",
    metadata: { source: "manual", confidence: "high" },
  }),
});

// Update a memory
await fetch(
  `https://app.backboard.io/api/assistants/${assistantId}/memories/${memoryId}`,
  {
    method: "PUT",
    headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
    body: JSON.stringify({ content: "Updated preference: user prefers system theme" }),
  }
);
Enter fullscreen mode Exit fullscreen mode

cURL

# Add
curl -X POST "https://app.backboard.io/api/assistants/your-assistant-id/memories" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "User prefers dark mode in all applications", "metadata": {"source": "manual"}}'

# Update
curl -X PUT "https://app.backboard.io/api/assistants/your-assistant-id/memories/MEMORY_ID" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Updated preference: user prefers system theme"}'
Enter fullscreen mode Exit fullscreen mode

Export: take it with you

There is no special export format to learn. List every memory and write it to a file. Because the list endpoint returns all memories when you omit the page, a full export is a few lines.

Python

import json

# Fetch all memories (omit page to get everything)
all_memories = await client.get_memories(assistant_id)

export = [{"id": m.id, "content": m.content} for m in all_memories.memories]

with open("memory_export.json", "w") as f:
    json.dump(export, f, indent=2)

print(f"Exported {len(export)} memories")
Enter fullscreen mode Exit fullscreen mode

JavaScript (Node 18+)

import { writeFileSync } from "node:fs";

const res = await fetch(
  `https://app.backboard.io/api/assistants/${assistantId}/memories`,
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

const exportData = data.memories.map((m) => ({ id: m.id, content: m.content }));
writeFileSync("memory_export.json", JSON.stringify(exportData, null, 2));

console.log(`Exported ${exportData.length} memories`);
Enter fullscreen mode Exit fullscreen mode

cURL

curl "https://app.backboard.io/api/assistants/your-assistant-id/memories" \
  -H "X-API-Key: YOUR_API_KEY" \
  -o memory_export.json
Enter fullscreen mode Exit fullscreen mode

Plain JSON, your fields, on your disk. That is the export.

Delete: remove one or wipe the slate

Delete a single memory, or reset every memory on an assistant. Reset removes them from both the database and the vector store and is irreversible.

Python

# Delete one memory
await client.delete_memory(assistant_id, memory_id)

# Delete all memories for an assistant (irreversible)
result = await client.reset_memories(assistant_id)
print(result["message"])
Enter fullscreen mode Exit fullscreen mode

JavaScript (Node 18+)

// Delete one memory
await fetch(
  `https://app.backboard.io/api/assistants/${assistantId}/memories/${memoryId}`,
  { method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
Enter fullscreen mode Exit fullscreen mode

cURL

# Delete one memory
curl -X DELETE "https://app.backboard.io/api/assistants/your-assistant-id/memories/MEMORY_ID" \
  -H "X-API-Key: YOUR_API_KEY"
Enter fullscreen mode Exit fullscreen mode

For users exercising a delete request, that one call removes their data for good.

The point

Memory is only useful if you trust it, and you trust it when you can see it, fix it, take it, and remove it. Backboard exposes the whole lifecycle through the API: read every fact, edit the wrong ones, export the lot as plain JSON, delete on demand. The data the assistant stores about your users is yours, and you are never locked in.

Grab a key and try it: app.backboard.io

Memory API: docs.backboard.io/sdk/memory

Top comments (0)