# Keep Memories Accurate with Update

Mem0’s update operation lets you fix or enrich an existing memory without deleting it. When a user changes their preference or clarifies a fact, use update to keep the knowledge base fresh.

## Key terms

- **memory_id**: Unique identifier returned by `add` or `search` results.
- **text**: New content that replaces the stored memory value. In the Python OSS SDK, `data` is a deprecated alias for `text`.
- **metadata**: Optional key-value pairs you update alongside the text.
- **timestamp**: Unix epoch (int/float) or ISO 8601 string to override the memory’s timestamp.
- **batch_update**: Platform API that edits multiple memories in a single request.
- **immutable**: Flagged memories that must be deleted and re-added instead of updated.

## How the update flow works

1. **Locate the memory**  
   Use `search` or dashboard inspection to capture the `memory_id` you want to change.

2. **Submit the update**  
   Call `update` (or `batch_update`) with new text and optional metadata. Mem0 overwrites the stored value and adjusts indexes.

3. **Verify**  
   Check the response or re-run `search` to ensure the revised memory appears with the new content.

## Single memory update (Platform)

Python
```python
from mem0 import MemoryClient

client = MemoryClient(api_key="your-api-key")

memory_id = "your_memory_id"
client.update(
    memory_id=memory_id,
    text="Updated memory content about the user",
    metadata={"category": "profile-update"},
    timestamp="2025-01-15T12:00:00Z"
)
```

JavaScript
```javascript
import MemoryClient from 'mem0ai';

const client = new MemoryClient({ apiKey: "your-api-key" });
const memory_id = "your_memory_id";

await client.update(memory_id, {
  text: "Updated memory content about the user",
  metadata: { category: "profile-update" },
  timestamp: "2025-01-15T12:00:00Z"
});
```

Expect a confirmation message and the updated memory to appear in the dashboard almost instantly.

## Batch update (Platform)

Update up to 1000 memories in one call.

Python
```python
from mem0 import MemoryClient

client = MemoryClient(api_key="your-api-key")

update_memories = [
    {"memory_id": "id1", "text": "Watches football"},
    {"memory_id": "id2", "text": "Likes to travel"}
]

response = client.batch_update(update_memories)
print(response)
```

JavaScript
```javascript
import MemoryClient from 'mem0ai';

const client = new MemoryClient({ apiKey: "your-api-key" });

const updateMemories = [
  { memoryId: "id1", text: "Watches football" },
  { memoryId: "id2", text: "Likes to travel" }
];

client.batchUpdate(updateMemories)
  .then(response => console.log('Batch update response:', response))
  .catch(error => console.error(error));
```

## Update with Mem0 OSS

Python
```python
from mem0 import Memory

memory = Memory()

# Replace the content
memory.update(
    memory_id="mem_123",
    text="Alex now prefers decaf coffee",
)

# Update content plus metadata and an expiration date (None clears it)
memory.update(
    memory_id="mem_123",
    text="Alex now prefers decaf coffee",
    metadata={"category": "preferences"},
    expiration_date="2030-01-31",
)
```

JavaScript
```javascript
import { Memory } from "mem0ai/oss";

const memory = new Memory();

// Replace the content
await memory.update("mem_123", { text: "Alex now prefers decaf coffee" });

// Update content plus metadata and an expiration date (null clears it)
await memory.update("mem_123", {
  text: "Alex now prefers decaf coffee",
  metadata: { category: "preferences" },
  expirationDate: "2030-01-31",
});

// Update metadata only, leaving the stored text untouched
await memory.update("mem_123", { metadata: { category: "preferences" } });
```

In both OSS SDKs the content is optional: pass only `metadata` and/or an expiration date to update those while keeping the existing content. At least one of the three must be provided, otherwise the call raises.

`data` is a deprecated alias for `text` in both OSS SDKs (`data=` in Python, `{ data: ... }` in JavaScript). It still works but logs a warning; prefer `text`. In JavaScript, passing a bare string is shorthand for `{ text }`, so `update(memoryId, "new text")` also still works.

## Tips

- Update both `text` **and** `metadata` together to keep filters accurate.
- Batch updates are ideal after large imports or when syncing CRM corrections.
- Immutable memories must be deleted and re-added instead of updated.
- Pair updates with feedback signals (thumbs up/down) to self-heal memories automatically.

**MCP Alternative**: With [Mem0 MCP](https://docs.mem0.ai/platform/mem0-mcp), AI agents can update their own memories when users correct information.

## Managed vs OSS differences

| Capability | Mem0 Platform | Mem0 OSS |
| --- | --- | --- |
| Update call | `client.update(memory_id, {...})` | `memory.update(memory_id, text=...)` |
| Batch updates | `client.batch_update` (up to 1000 memories) | Script your own loop or bulk job |
| Dashboard visibility | Inspect updates in the UI | Inspect via logs or custom tooling |
| Immutable handling | Returns descriptive error | Raises exception: delete and re-add |

## Put it into practice

- Review the [Update Memory API reference](https://docs.mem0.ai/api-reference/memory/update-memory) for request/response details.
- Combine updates with [Feedback Mechanism](https://docs.mem0.ai/platform/features/feedback-mechanism) to automate corrections.

## See it live

- [Support Inbox with Mem0](https://docs.mem0.ai/cookbooks/operations/support-inbox) uses updates to refine customer profiles.
- [AI Tutor with Mem0](https://docs.mem0.ai/cookbooks/companions/ai-tutor) demonstrates user preference corrections mid-course.
