> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mem0.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Advanced Memory Operations

> Run richer add/search/update/delete flows on the managed platform with metadata, rerankers, and per-request controls.

# Make Platform Memory Operations Smarter

<Info>
  **Prerequisites**

  * Platform workspace with API key
  * Python 3.10+ and Node.js 18+
</Info>

<Tip>
  Need a refresher on the core concepts first? Review the <Link href="/core-concepts/memory-operations/add">Add Memory</Link> overview, then come back for the advanced flow.
</Tip>

## Install and authenticate

<Tabs>
  <Tab title="Python">
    <Steps>
      <Step title="Install the SDK">
        ```bash theme={null}
        pip install mem0ai
        ```
      </Step>

      <Step title="Export your API key">
        ```bash theme={null}
        export MEM0_API_KEY="sk-platform-..."
        ```
      </Step>

      <Step title="Create an async client">
        ```python theme={null}
        import os
        from mem0 import AsyncMemoryClient

        memory = AsyncMemoryClient(api_key=os.environ["MEM0_API_KEY"])
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="TypeScript">
    <Steps>
      <Step title="Install the OSS SDK">
        ```bash theme={null}
        npm install mem0ai
        ```
      </Step>

      <Step title="Load your API key">
        ```bash theme={null}
        export MEM0_API_KEY="sk-platform-..."
        ```
      </Step>

      <Step title="Instantiate the client">
        ```typescript theme={null}
        import MemoryClient from 'mem0ai';

        const memory = new MemoryClient({ apiKey: process.env.MEM0_API_KEY! });
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Add memories with metadata

<Tabs>
  <Tab title="Python">
    <Steps>
      <Step title="Record conversations with metadata">
        ```python theme={null}
        conversation = [
            {"role": "user", "content": "I'm Morgan, planning a 3-week trip to Japan in May."},
            {"role": "assistant", "content": "Great! I'll track dietary notes and cities you mention."},
            {"role": "user", "content": "Please remember I avoid shellfish and prefer boutique hotels in Tokyo."},
        ]

        result = await memory.add(
            conversation,
            user_id="traveler-42",
            metadata={"trip": "japan-2025", "preferences": ["boutique", "no-shellfish"]},
            run_id="planning-call-1",
        )
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="TypeScript">
    <Steps>
      <Step title="Capture context-rich memories">
        ```typescript theme={null}
        const conversation = [
          { role: "user", content: "I'm Morgan, planning a 3-week trip to Japan in May." },
          { role: "assistant", content: "Great! I'll track dietary notes and cities you mention." },
          { role: "user", content: "Please remember I avoid shellfish and love boutique hotels in Tokyo." },
        ];

        const result = await memory.add(conversation, {
          userId: "traveler-42",
          metadata: { trip: "japan-2025", preferences: ["boutique", "no-shellfish"] },
          runId: "planning-call-1",
        });
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

<Info icon="check">
  Successful calls return memories tagged with the metadata you passed. In the dashboard, verify the `trip=japan-2025` tag exists on the new memory.
</Info>

## Retrieve and refine

<Tabs>
  <Tab title="Python">
    <Steps>
      <Step title="Filter by metadata + reranker">
        ```python theme={null}
        matches = await memory.search(
            "Any food alerts?",
            filters={"user_id": "traveler-42", "metadata.trip": "japan-2025"},
            rerank=True,
        )
        ```
      </Step>

      <Step title="Update a memory inline">
        ```python theme={null}
        await memory.update(
            memory_id=matches["results"][0]["id"],
            data="Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
        )
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="TypeScript">
    <Steps>
      <Step title="Search with metadata filters">
        ```typescript theme={null}
        const matches = await memory.search("Any food alerts?", {
          filters: { user_id: "traveler-42", "metadata.trip": "japan-2025" },
          rerank: true,
        });
        ```
      </Step>

      <Step title="Apply an update">
        ```typescript theme={null}
        await memory.update(matches.results[0].id, {
          text: "Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
        });
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Clean up

<Tabs>
  <Tab title="Python">
    <Steps>
      <Step title="Delete scoped memories">
        ```python theme={null}
        await memory.delete_all(user_id="traveler-42", run_id="planning-call-1")
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="TypeScript">
    <Steps>
      <Step title="Remove the run">
        ```typescript theme={null}
        await memory.deleteAll({ userId: "traveler-42", runId: "planning-call-1" });
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Quick recovery

* Empty results with filters: log `filters` values and confirm metadata keys match (case-sensitive).

<Warning>
  Metadata keys become part of your filtering schema. Stick to lowercase snake\_case (`trip_id`, `preferences`) to avoid collisions down the road.
</Warning>

<CardGroup cols={2}>
  <Card title="Tune Metadata Filtering" description="Layer field-level filters on top of advanced operations." icon="funnel" href="/open-source/features/metadata-filtering" />

  <Card title="Explore Reranker Search" description="See how rerankers boost accuracy after advanced retrieval." icon="sparkles" href="/open-source/features/reranker-search" />
</CardGroup>
