---
title: Advanced Memory Operations
description: "Run richer add/search/update/delete flows on the managed platform with metadata, rerankers, and per-request controls."
---
# Make Platform Memory Operations Smarter
**Prerequisites**
- Platform workspace with API key
- Python 3.10+ and Node.js 18+
Need a refresher on the core concepts first? Review the Add Memory overview, then come back for the advanced flow.
## Install and authenticate
```bash
pip install mem0ai
```
```bash
export MEM0_API_KEY="sk-platform-..."
```
```python
import os
from mem0 import AsyncMemoryClient
memory = AsyncMemoryClient(api_key=os.environ["MEM0_API_KEY"])
```
```bash
npm install mem0ai
```
```bash
export MEM0_API_KEY="sk-platform-..."
```
```typescript
import MemoryClient from 'mem0ai';
const memory = new MemoryClient({ apiKey: process.env.MEM0_API_KEY! });
```
## Add memories with metadata
```python
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",
)
```
```typescript
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",
});
```
Successful calls return memories tagged with the metadata you passed. In the dashboard, verify the `trip=japan-2025` tag exists on the new memory.
## Retrieve and refine
```python
matches = await memory.search(
"Any food alerts?",
filters={"user_id": "traveler-42", "metadata.trip": "japan-2025"},
rerank=True,
)
```
```python
await memory.update(
memory_id=matches["results"][0]["id"],
text="Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
)
```
```typescript
const matches = await memory.search("Any food alerts?", {
filters: { user_id: "traveler-42", "metadata.trip": "japan-2025" },
rerank: true,
});
```
```typescript
await memory.update(matches.results[0].id, {
text: "Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
});
```
## Clean up
```python
await memory.delete_all(user_id="traveler-42", run_id="planning-call-1")
```
```typescript
await memory.deleteAll({ userId: "traveler-42", runId: "planning-call-1" });
```
## Quick recovery
- Empty results with filters: log `filters` values and confirm metadata keys match (case-sensitive).
Metadata keys become part of your filtering schema. Stick to lowercase snake_case (`trip_id`, `preferences`) to avoid collisions down the road.