FishMem

Migrate from mem0

Point an existing mem0 client at FishMem with a base-URL and key change.

The FishMem API is mem0-compatible, so migrating is a drop-in change: swap the base URL and the API key. Your add/search/get/update/delete calls and your memory scopes stay exactly as they are.

What changes

Two things:

  1. Base URLhttps://fishmem.com
  2. API key → a FishMem project key, fm_... (see Authentication)

Everything else — request shapes, parameters, and the operation set — maps over directly.

Operation mapping

mem0 operationFishMemNotes
addaddExtracts durable facts from messages
searchsearchRelevance recall for a query
getgetFetch a single memory by id
updateupdateRevise an existing memory
deletedeleteRemove a memory

The scope identifiers carry over unchanged. Keep your user_id, agent_id, and run_id values stable and your existing per-user, per-agent, and per-run isolation keeps working.

Before / after

The only edits are the endpoint and credential.

# Before (mem0)
curl https://api.mem0.ai/v1/memories \
  -H "Authorization: Bearer <mem0-key>" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"I like dark mode"}],"user_id":"alex"}'

# After (FishMem)
curl https://fishmem.com/v1/memories \
  -H "Authorization: Bearer fm_..." \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"I like dark mode"}],"user_id":"alex"}'

In a JS client it's the same idea — change the two fields where you initialize the client:

// Before
const client = new MemoryClient({
  baseUrl: "https://api.mem0.ai",
  apiKey: process.env.MEM0_API_KEY,
});

// After
const client = new MemoryClient({
  baseUrl: "https://fishmem.com",
  apiKey: process.env.FISHMEM_API_KEY, // fm_...
});

Reversible

The compatibility works in both directions. Because you've only changed the base URL and key, you can point back at your previous provider just as easily — there is no one-way data transform locking you in.

Next

On this page