Skip to content

Memory API Fresh

Complete reference for all memory CRUD operations in the Mem0 API.

Base URL: https://api.mem0.ai

Authentication: All endpoints require Authorization: Token <MEM0_API_KEY> header.


Add Memories

POST /v1/memories/

Add facts, messages, or metadata to a user memory store with support for async processing and event tracking.

Request Body

FieldTypeRequiredDescription
messagesarrayYesConversation turns. Each object has role and content.
user_idstringConditionalAssociates memory with a user.
agent_idstringOptionalUnique identifier of associated agent.
app_idstringOptionalUnique identifier of associated application.
run_idstringOptionalUnique identifier of run.
metadataobjectOptionalCustom key/value metadata (e.g., {"topic": "preferences"}).
inferbooleanOptionalSet to false to skip inference and store text as-is. Default: true.
async_modebooleanOptionalControls async processing. Default: true.
output_formatstringOptionalv1.1 wraps results in a results array. Default: v1.1.
org_idstringOptionalOrganization identifier.
project_idstringOptionalProject identifier.
includesstringOptionalString to include specific preferences in memory.
excludesstringOptionalString to exclude specific preferences from memory.
custom_categoriesobjectOptionalCategory names with descriptions.
custom_instructionsstringOptionalProject-specific guidelines for handling memories.
immutablebooleanOptionalWhether memory is immutable. Default: false.
timestampintegerOptionalUnix timestamp for the memory.
expiration_datestringOptionalExpiry date in YYYY-MM-DD format.
enable_graphbooleanOptionalEnriches knowledge graph with entity nodes and relationships.
versionstringOptionalMemory version. Recommend v2 for new applications.

Code Examples

python
from mem0 import MemoryClient

client = MemoryClient(api_key="your_api_key", org_id="your_org_id",
                      project_id="your_project_id")

messages = [
    {"role": "user", "content": "Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts."},
    {"role": "assistant", "content": "Hello Alex! I've noted that you're a vegetarian and have a nut allergy."}
]

client.add(messages, user_id="alex", version="v2")
javascript
import MemoryClient from 'mem0ai';
const client = new MemoryClient({ apiKey: "your-api-key" });

const messages = [
  { role: "user", content: "Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts." },
  { role: "assistant", content: "Hello Alex! I've noted that you're a vegetarian and have a nut allergy." }
];

client.add(messages, { user_id: "alex", version: "v2" })
  .then(result => console.log(result))
  .catch(error => console.error(error));
bash
curl --request POST \
  --url https://api.mem0.ai/v1/memories/ \
  --header 'Authorization: Token <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
  "messages": [
    {"role": "user", "content": "Hi, I am Alex. I am a vegetarian."}
  ],
  "user_id": "alex",
  "version": "v2"
}'

Response

json
[
  {
    "id": "mem_01JF8ZS4Y0R0SPM13R5R6H32CJ",
    "event": "ADD",
    "data": {
      "memory": "The user is a vegetarian and is allergic to nuts."
    }
  }
]

Events return ADD, UPDATE, or DELETE enum values.


Get Memories (List/Filter)

POST /v2/memories/

Retrieve memories with advanced filtering using logical operators (AND, OR, NOT) and comparison queries.

Request Body

FieldTypeRequiredDescription
filtersobjectYesFilter conditions with logical/comparison operators.
fieldsarrayOptionalSpecific fields to return.
pageintegerOptionalPage number. Default: 1.
page_sizeintegerOptionalItems per page. Default: 100.
org_idstringOptionalOrganization identifier.
project_idstringOptionalProject identifier.
output_formatstringOptionalv1.1 includes graph memory with entity relationships.

Filter Fields

user_id, agent_id, app_id, run_id, created_at, updated_at, keywords, categories, metadata

Comparison Operators

OperatorDescription
inMatches specified values
gte / lteGreater/less than or equal
gt / ltGreater/less than
neNot equal
icontainsCase-insensitive containment
containsCase-sensitive containment
*Wildcard matching

Code Examples

python
from mem0 import MemoryClient

client = MemoryClient(api_key="your_api_key", org_id="your_org_id",
                      project_id="your_project_id")

memories = client.get_all(
    filters={
        "AND": [
            {"user_id": "alex"},
            {"created_at": {"gte": "2024-07-01", "lte": "2024-07-31"}}
        ]
    },
    version="v2"
)
print(memories)
javascript
import MemoryClient from 'mem0ai';
const client = new MemoryClient({ apiKey: "your-api-key" });

const filters = {
  AND: [
    { user_id: 'alex' },
    { created_at: { gte: '2024-07-01', lte: '2024-07-31' } }
  ]
};

client.getAll({ filters, api_version: 'v2' })
  .then(result => console.log(result))
  .catch(error => console.error(error));
bash
curl -X POST 'https://api.mem0.ai/v2/memories/' \
  -H 'Authorization: Token your-api-key' \
  -H 'Content-Type: application/json' \
  -d '{
  "filters": {
    "AND": [
      { "user_id": "alex" },
      { "created_at": { "gte": "2024-07-01", "lte": "2024-07-31" } }
    ]
  }
}'

Response

json
{
  "results": [
    {
      "id": "uuid",
      "memory": "Alex is a vegetarian.",
      "created_at": "2024-07-15T10:30:00Z",
      "updated_at": "2024-07-15T10:30:00Z",
      "metadata": {},
      "immutable": false,
      "expiration_date": null
    }
  ],
  "total": 1
}

Search Memories

POST /v2/memories/search/

Search memories with semantic queries and advanced filtering.

Request Body

FieldTypeRequiredDescription
querystringYesThe search query.
filtersobjectYesFilter conditions.
versionstringOptionalMemory version (use v2).
top_kintegerOptionalNumber of results. Default: 10.
fieldsarrayOptionalFields to include in response.
rerankbooleanOptionalRerank results. Default: false.
keyword_searchbooleanOptionalEnable keyword search. Default: false.
filter_memoriesbooleanOptionalApply filtering. Default: false.
thresholdnumberOptionalMinimum similarity threshold. Default: 0.3.
org_idstringOptionalOrganization identifier.
project_idstringOptionalProject identifier.
python
results = client.search(
    query="What food does Alex like?",
    filters={"user_id": "alex"},
    version="v2",
    top_k=5
)
javascript
const results = await client.search({
  query: "What food does Alex like?",
  filters: { user_id: "alex" },
  api_version: "v2",
  top_k: 5
});
bash
curl -X POST 'https://api.mem0.ai/v2/memories/search/' \
  -H 'Authorization: Token your-api-key' \
  -H 'Content-Type: application/json' \
  -d '{
  "query": "What food does Alex like?",
  "filters": {"user_id": "alex"},
  "version": "v2",
  "top_k": 5
}'

Get Memory (Single)

GET /v1/memories/{memory_id}/

Retrieve a single memory by its unique ID.

Path Parameters

ParameterTypeRequiredDescription
memory_idstring (UUID)YesThe unique memory identifier.

Response (200)

json
{
  "id": "uuid",
  "memory": "Alex is a vegetarian.",
  "user_id": "alex",
  "agent_id": null,
  "app_id": null,
  "run_id": null,
  "hash": "abc123",
  "metadata": {},
  "created_at": "2024-07-15T10:30:00Z",
  "updated_at": "2024-07-15T10:30:00Z"
}

Error (404)

json
{ "message": "Memory not found!" }

Update Memory

PUT /v1/memories/{memory_id}/

Update memory content and metadata.

Path Parameters

ParameterTypeRequiredDescription
memory_idstring (UUID)YesThe memory to update.

Request Body

FieldTypeDescription
textstringUpdated text content.
metadataobjectUpdated metadata.
python
client.update(memory_id="mem_id", data="Updated memory text")
javascript
await client.update("mem_id", { text: "Updated memory text" });
bash
curl --request PUT \
  --url https://api.mem0.ai/v1/memories/{memory_id}/ \
  --header 'Authorization: Token <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{"text": "Updated memory text"}'

Delete Memory (Single)

DELETE /v1/memories/{memory_id}/

Delete a single memory by ID.

Response (204)

json
{ "message": "Memory deleted successfully!" }
python
client.delete(memory_id="mem_id")
javascript
await client.delete("mem_id");
bash
curl --request DELETE \
  --url https://api.mem0.ai/v1/memories/{memory_id}/ \
  --header 'Authorization: Token <api-key>'

Delete Memories (Filtered)

DELETE /v1/memories/

Delete memories by filter. At least one filter is required.

Query Parameters

ParameterTypeDescription
user_idstringFilter by user ID (use * for all users).
agent_idstringFilter by agent ID.
app_idstringFilter by app ID.
run_idstringFilter by run ID.
metadataobjectJSON string filtering by metadata.
org_idstringOrganization identifier.
project_idstringProject identifier.

Response (204)

json
{ "message": "Memories deleted successfully!" }

Batch Update

PUT /v1/batch/

Update up to 1000 memories in a single request.

Request Body

json
{
  "memories": [
    { "memory_id": "uuid-1", "text": "Updated text 1" },
    { "memory_id": "uuid-2", "text": "Updated text 2" }
  ]
}

Response (200)

json
{ "message": "Successfully updated 2 memories" }
python
client.batch_update([
    {"memory_id": "id-1", "text": "Updated text 1"},
    {"memory_id": "id-2", "text": "Updated text 2"}
])
javascript
await client.batchUpdate([
  { memoryId: "id-1", text: "Updated text 1" },
  { memoryId: "id-2", text: "Updated text 2" }
]);

Batch Delete

DELETE /v1/batch/

Delete up to 1000 memories in a single request.

Request Body

json
{
  "memory_ids": ["uuid-1", "uuid-2"]
}

Response (200)

json
{ "message": "Successfully deleted 2 memories" }

Memory History

GET /v1/memories/{memory_id}/history/

Retrieve the full change history of a specific memory.

Response

Returns an array of history entries:

json
[
  {
    "id": "uuid",
    "memory_id": "uuid",
    "input": [{"role": "user", "content": "..."}],
    "old_memory": null,
    "new_memory": "Alex is a vegetarian.",
    "user_id": "alex",
    "event": "ADD",
    "metadata": null,
    "created_at": "2024-07-15T10:30:00Z",
    "updated_at": "2024-07-15T10:30:00Z"
  }
]

Event types: ADD, UPDATE, DELETE.


Feedback

POST /v1/feedback/

Submit feedback for a memory to improve quality.

Request Body

FieldTypeRequiredDescription
memory_idstringYesMemory to provide feedback for.
feedbackstringOptionalPOSITIVE, NEGATIVE, or VERY_NEGATIVE.
feedback_reasonstringOptionalReason for the feedback.

Response (200)

json
{
  "id": "uuid",
  "feedback": "POSITIVE",
  "feedback_reason": "Accurate memory"
}

Create Memory Export

POST /v1/exports/

Create a structured export of memories.

Request Body

FieldTypeRequiredDescription
schemaobjectYesSchema definition for the export (Pydantic-style).
filtersobjectOptionalFilter by user_id, agent_id, app_id, run_id.
org_idstringOptionalOrganization identifier.
project_idstringOptionalProject identifier.

Response (201)

json
{
  "message": "Memory export request received...",
  "id": "550e8400-e29b-41d4-a716-446655440000"
}

Get Memory Export

POST /v1/exports/get

Retrieve the latest structured memory export after submitting an export job.

Request Body

FieldTypeDescription
memory_export_idstringUnique export identifier.
org_idstringOrganization filter.
project_idstringProject filter.
filtersobjectOptional filters.

SOP Documentation Site for Mem0