Files
mem0/docs/api-reference/memory/search-memories.mdx
T
kartik-mem0 bbfe0f9bb2 docs(api-reference): align API docs and openapi schema with v3 spec
- create-memory-export.mdx: replace `session_id` filter with `app_id`
  (spec: /v1/exports/ filters = user_id, agent_id, app_id, run_id)
- get-memory-export.mdx: replace stale filter list (session_id removed)
  with correct fields: user_id, agent_id, app_id, run_id, created_at, updated_at
- search-memories.mdx: fix comparison table — rerank V1/V2 default was
  `true`, spec shows `false`; threshold V1 is absent (not "No default"),
  V2 default is 0.3 (not absent)
- organizations-projects.mdx: rewrite Key Capabilities bullet — org/project
  are NOT init params; they resolve automatically from the API key via /v1/ping/
- openapi.json DELETE /v1/batch/: fix request schema from {memory_ids:[uuid]}
  to {memories:[{memory_id:uuid}]} to match Python client.batch_delete()
- openapi.json PUT /v1/batch/: make `text` optional (remove from required),
  add optional `metadata` property — matches Python client.batch_update() docstring
2026-06-25 12:01:24 +05:30

118 lines
3.1 KiB
Plaintext

---
title: 'Search Memories'
description: "Search memories with hybrid retrieval (semantic + BM25 + entity matching) and advanced filtering using logical and comparison operators."
openapi: post /v3/memories/search/
---
Relevance-ranked hybrid search across stored memories. V3 uses multi-signal retrieval — semantic, BM25 keyword, and entity matching scored in parallel and fused. The returned `score` is a combined `[0, 1]` value.
Entity IDs (`user_id`, `agent_id`, `app_id`, `run_id`) **must** be passed inside the `filters` object — top-level entity IDs are rejected with 400. At least one entity ID is required.
The `filters` object supports complex logical operations (AND, OR, NOT) and comparison operators:
- `in`: Matches any of the values specified
- `gte`: Greater than or equal to
- `lte`: Less than or equal to
- `gt`: Greater than
- `lt`: Less than
- `ne`: Not equal to
- `icontains`: Case-insensitive containment check
- `*`: Wildcard character that matches everything
### Search parameter defaults
| Parameter | V1/V2 | V3 |
| --- | --- | --- |
| `top_k` | Supported (default 10) | Supported (1-1000, default 10) |
| `threshold` | V1: not supported / V2: default `0.3` | Default `0.1` (pass `0.0` to disable) |
| `rerank` | Default `false` | Default `false` (pass `true` to enable) |
<CodeGroup>
```python Platform API Example
related_memories = client.search(
query="What are Alice's hobbies?",
filters={
"OR": [
{
"user_id": "alice"
},
{
"agent_id": {"in": ["travel-agent", "sports-agent"]}
}
]
},
)
```
```json Output
{
"results": [
{
"id": "ea925981-272f-40dd-b576-be64e4871429",
"memory": "Likes to play cricket and plays cricket on weekends.",
"user_id": "alice",
"metadata": {
"category": "hobbies"
},
"score": 0.82,
"created_at": "2024-07-26T10:29:36.630547-07:00",
"updated_at": null,
"categories": ["hobbies"]
}
]
}
```
</CodeGroup>
<CodeGroup>
```python Wildcard Example
# Using wildcard to match all run_ids for a specific user
all_memories = client.search(
query="What are Alice's hobbies?",
filters={
"AND": [
{
"user_id": "alice"
},
{
"run_id": "*"
}
]
},
)
```
</CodeGroup>
<CodeGroup>
```python Categories Filter Examples
# Example 1: Using 'contains' for partial matching
finance_memories = client.search(
query="What are my financial goals?",
filters={
"AND": [
{ "user_id": "alice" },
{
"categories": {
"contains": "finance"
}
}
]
},
)
# Example 2: Using 'in' for exact matching
personal_memories = client.search(
query="What personal information do you have?",
filters={
"AND": [
{ "user_id": "alice" },
{
"categories": {
"in": ["personal_information"]
}
}
]
},
)
```
</CodeGroup>