Memory store endpoints
In shortReference for /v1/store — storing, searching, listing, updating, deleting, and forgetting memories through the 10xGraph API server.
- 4 min read
- 8 sections
- Updated
- v0.9.2
- Markdown
The memory store endpoints are available only when a store is configured in
10xgraph.json. They provide cross-thread, semantic-search-enabled memory.
Base path: /v1/store
Every request body extends a common base, so all endpoints accept these two optional fields in addition to their own:
| Field | Type | Description |
|---|---|---|
config |
object | Configuration values forwarded to the store backend (for example user_id, agent_id, or backend-specific keys). Defaults to {}. |
options |
object | Extra keyword arguments forwarded verbatim to the store backend. |
Scoping a memory to a user or agent is done through config, not through
top-level fields.
POST /v1/store/memories
Store a memory record. Requires store:write.
Request body:
{
"content": "User prefers concise responses.",
"memory_type": "episodic",
"category": "preference",
"metadata": {"source": "chat"},
"config": {"user_id": "user-123"}
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
content |
string or Message |
yes | Memory text, or a structured Message object |
|
memory_type |
string | no | episodic |
Memory classification used by the backend |
category |
string | no | general |
Category label |
metadata |
object | no | null |
Arbitrary metadata stored with the memory |
Response:
{
"success": true,
"message": "Memory stored successfully",
"data": {"memory_id": "mem_abc123"}
}POST /v1/store/search
Search memories by semantic similarity. Requires store:read.
Request body:
{
"query": "How does this user like to receive information?",
"category": "preference",
"limit": 5,
"config": {"user_id": "user-123"}
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query |
string | yes | Search query. Empty or whitespace-only returns 422 |
|
memory_type |
string | no | null |
Filter by memory type |
category |
string | no | null |
Filter by category |
limit |
integer | no | 10 |
Maximum results. Must be between 1 and 100 |
score_threshold |
float | no | null |
Minimum similarity score for a result to be returned |
filters |
object | no | null |
Additional store-specific filters |
retrieval_strategy |
string | no | similarity |
Retrieval strategy used by the backend |
distance_metric |
string | no | cosine |
Distance metric applied during similarity search |
max_tokens |
integer | no | 4000 |
Token budget used for truncation during similarity search. At most 16000 |
Response:
{
"success": true,
"data": {
"results": [
{
"memory_id": "mem_abc123",
"content": "User prefers concise responses.",
"score": 0.91,
"metadata": {"category": "preference"}
}
]
}
}POST /v1/store/memories/list
List stored memories. Requires store:read.
This is a POST because the request carries a config object; there is no
GET variant.
Request body (optional):
{
"limit": 50,
"config": {"user_id": "user-123"}
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
integer | no | 100 |
Maximum memories to return, between 1 and 1000. Other values return 422 |
Sending no body at all is valid and applies the defaults.
Response:
{
"success": true,
"data": {
"memories": [
{
"memory_id": "mem_abc123",
"content": "User prefers concise responses.",
"metadata": {"category": "preference"}
}
]
}
}POST /v1/store/memories/{memory_id}
Get a single memory by ID. Requires store:read.
The body is optional and carries only config and options. An empty or
whitespace-only memory_id returns 422.
Response:
{
"success": true,
"data": {
"memory": {
"memory_id": "mem_abc123",
"content": "User prefers concise responses.",
"metadata": {}
}
}
}PUT /v1/store/memories/{memory_id}
Update a stored memory. Requires store:write.
Request body:
{
"content": "Updated memory content.",
"metadata": {"updated": true}
}| Field | Type | Required | Description |
|---|---|---|---|
content |
string or Message |
yes | Replacement content |
metadata |
object | no | Replacement metadata |
Response:
{
"success": true,
"message": "Memory updated successfully",
"data": {"success": true}
}DELETE /v1/store/memories/{memory_id}
Delete one memory record. Requires store:delete.
The body is optional and carries only config and options.
Response:
{
"success": true,
"message": "Memory deleted successfully",
"data": {"success": true}
}POST /v1/store/memories/forget
Delete every memory matching the given filters. Requires store:delete.
Request body:
{
"memory_type": "episodic",
"category": "preference",
"filters": {"source": "chat"},
"config": {"user_id": "user-123"}
}| Field | Type | Required | Description |
|---|---|---|---|
memory_type |
string | no | Restrict deletion to one memory type |
category |
string | no | Restrict deletion to one category |
filters |
object | no | Additional backend filters |
Response:
{
"success": true,
"message": "Memories removed successfully",
"data": {"success": true}
}Permissions
| Operation | Required permission |
|---|---|
| Store, update | store:write |
| Search, get, list | store:read |
| Delete, forget | store:delete |