Memory Signup
POST /v1/memory/signup
Register for the Memory API. Your API key will be sent to the provided email address. If you already have an account, your existing key will be resent.
This endpoint does not require an API key.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Your email address (5-256 characters) |
Example Request
curl -X POST https://api.ragionex.com/v1/memory/signup \ -H "Content-Type: application/json" \ -d '{ "email": "[email protected]" }'
Response
{
"success": true,
"message": "API key sent to your email. If you don't see it, check your spam folder."
}
Memory Write
POST /v1/memory/write
Store a new memory. The content is indexed asynchronously in the background.
Use the /v1/memory/status/{id} endpoint to check when indexing is complete.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| content | string | required | The memory content to store (max 50,000 characters) |
| project | string | required | Organizational label for the memory. Lowercase letters, digits, hyphens only. 1-50 characters. Pattern: ^[a-z0-9-]+$. New project names are created automatically on first write. |
Example Request
curl -X POST https://api.ragionex.com/v1/memory/write \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "content": "User prefers TypeScript over JavaScript. Always use strict mode and explicit types.", "project": "acme-app" }'
import requests response = requests.post( "https://api.ragionex.com/v1/memory/write", headers={"X-API-Key": "rgx_dp_xxxxxxxxxxxxxxxx"}, json={ "content": "User prefers TypeScript over JavaScript. Always use strict mode and explicit types.", "project": "acme-app" } ) data = response.json() print(f"Memory ID: {data['id']} (project: {data['project']})")
Response
{
"success": true,
"id": "mem_K7X2P9Q4R1",
"status": "processing",
"project": "acme-app"
}
{
"success": false,
"error": "Invalid project name. Allowed: lowercase letters, digits, hyphens; 1-50 chars."
}
{
"success": false,
"error": "Free tier limit reached (1000 total memories). Upgrade to Pro for higher limits."
}
The memory is indexed in the background. The status field will be
"processing" until indexing completes, then changes to "ready".
Memory Search
POST /v1/memory/search
Search your memories with a semantic query. Only memories with status: "ready"
are included in search results.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | required | The search query (10-512 characters) |
| scope | string | required | "segment" returns matching chunks, "full" returns complete memory content |
| results | integer | optional | Number of results to return (1-50) Default: 10 |
| project | string | optional | Filter results to a specific project. Omit to search across all projects (cross-project search). |
Example Request - Scoped to One Project
curl -X POST https://api.ragionex.com/v1/memory/search \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "query": "What programming language does the user prefer?", "scope": "segment", "results": 5, "project": "acme-app" }'
Example Request - Cross-Project Search
curl -X POST https://api.ragionex.com/v1/memory/search \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "query": "What programming language does the user prefer?", "scope": "segment" }'
Response
{
"success": true,
"results": [
{
"id": "mem_K7X2P9Q4R1",
"content": "User prefers TypeScript over JavaScript. Always use strict mode and explicit types.",
"project": "acme-app"
}
]
}
{
"success": false,
"error": "Project 'acme-ap' does not exist for this user.",
"available_projects": ["acme-app", "blog-backend", "mobile-app"]
}
When an invalid project name is passed, the response includes an
available_projects array. Your agent can read this list and retry
with the correct name - no extra API call required.
{
"success": false,
"error": "scope must be 'segment' or 'full'"
}
{
"success": false,
"error": "Free tier limit reached (10000 searches per month). Resets on 2026-05-01. Upgrade to Pro for higher limits."
}
Memory List
GET /v1/memory/list
List all memories for the authenticated user, ordered by creation date (newest first). Returns a preview of each memory (first 200 characters).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| project | string | optional | Filter to one project. Omit to list memories across all projects. |
Example Request
curl -X GET "https://api.ragionex.com/v1/memory/list?project=acme-app" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx"
Response
{
"success": true,
"memories": [
{
"id": "mem_K7X2P9Q4R1",
"preview": "User prefers TypeScript over JavaScript. Always use strict mode...",
"status": "ready",
"project": "acme-app",
"created_at": 1712880000
},
{
"id": "mem_A1B2C3D4E5",
"preview": "Project uses PostgreSQL for the main database...",
"status": "processing",
"project": "acme-app",
"created_at": 1712876400
}
]
}
Memory View
POST /v1/memory/view
Retrieve the full content of specific memories by their IDs. Non-owned IDs are silently ignored.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| ids | array | required | Array of memory IDs to retrieve (1-50 IDs) |
Example Request
curl -X POST https://api.ragionex.com/v1/memory/view \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "ids": ["mem_K7X2P9Q4R1", "mem_A1B2C3D4E5"] }'
Response
{
"success": true,
"memories": [
{
"id": "mem_K7X2P9Q4R1",
"content": "User prefers TypeScript over JavaScript. Always use strict mode and explicit types.",
"status": "ready",
"project": "acme-app",
"created_at": 1712880000
}
]
}
Memory Update
PUT /v1/memory/update
Update an existing memory. Supports partial updates: you can change the content only, the project only, or both. Content changes trigger re-indexing; project-only changes update metadata in place without re-indexing.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | required | The memory ID to update |
| content | string | optional | New memory content (max 50,000 characters). Triggers full re-index. |
| project | string | optional | Move the memory to a different project. No re-index - only metadata is updated. |
You must provide content, project, or both. Providing
only id returns a 400 error.
Example - Content Only (triggers re-index)
curl -X PUT https://api.ragionex.com/v1/memory/update \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "id": "mem_K7X2P9Q4R1", "content": "User now prefers Python over TypeScript for data science projects." }'
Example - Project Only (fast, no re-index)
curl -X PUT https://api.ragionex.com/v1/memory/update \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "id": "mem_K7X2P9Q4R1", "project": "acme-mobile" }'
Example - Both
curl -X PUT https://api.ragionex.com/v1/memory/update \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "id": "mem_K7X2P9Q4R1", "content": "Updated content for the mobile project context.", "project": "acme-mobile" }'
Response - Content Changed
{
"success": true,
"id": "mem_K7X2P9Q4R1",
"status": "processing",
"project": "acme-app"
}
Response - Project Only
{
"success": true,
"id": "mem_K7X2P9Q4R1",
"status": "ready",
"project": "acme-mobile"
}
{
"success": false,
"error": "Free tier limit reached (500 writes per month). Resets on 2026-05-01. Upgrade to Pro for higher limits."
}
A content update counts as one write (same indexing cost as a fresh write). A project-only update does NOT count toward the writes-per-month quota.
Memory Delete
DELETE /v1/memory/delete
Delete one or more memories permanently. This action cannot be undone.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| ids | array | required | Array of memory IDs to delete (1-50 IDs) |
Example Request
curl -X DELETE https://api.ragionex.com/v1/memory/delete \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "ids": ["mem_K7X2P9Q4R1"] }'
Response
{
"success": true,
"deleted": 1
}
Memory Status
GET /v1/memory/status/{memory_id}
Check the processing status of a specific memory.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| memory_id | string | required | The memory ID to check |
Example Request
curl -X GET https://api.ragionex.com/v1/memory/status/mem_K7X2P9Q4R1 \
-H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx"
Response
{
"success": true,
"id": "mem_K7X2P9Q4R1",
"status": "ready"
}
Status Values
| Status | Description |
|---|---|
| processing | Memory is being indexed. Not yet searchable. |
| ready | Memory is fully indexed and searchable. |
| failed | Indexing failed. Contact support. |
Memory Projects
GET /v1/memory/projects
List all distinct projects for the authenticated user, including the memory count for each project. Useful for AI agents to self-discover available project names before writing or searching.
Example Request
curl -X GET https://api.ragionex.com/v1/memory/projects \
-H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx"
Response
{
"success": true,
"projects": [
{ "name": "acme-app", "memory_count": 45 },
{ "name": "blog-backend", "memory_count": 12 },
{ "name": "mobile-app", "memory_count": 8 }
]
}
Rename Project
PATCH /v1/memory/projects/{name}
Bulk-rename a project. All memories with the current project name, plus their vector metadata, are updated atomically. No re-indexing - this is fast even for projects with thousands of memories.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | required | Current project name (the one being renamed) |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| new_name | string | required | New project name. Same format as project field (lowercase alphanumeric + hyphen, 1-50 chars). |
Example Request
curl -X PATCH https://api.ragionex.com/v1/memory/projects/acme-app \ -H "Content-Type: application/json" \ -H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx" \ -d '{ "new_name": "acme-mobile" }'
Response
{
"success": true,
"renamed": 45,
"from": "acme-app",
"to": "acme-mobile"
}
{
"success": false,
"error": "Project 'acme-app' does not exist for this user"
}
Delete Project
DELETE /v1/memory/projects/{name}
Delete a project and all its memories. This removes every memory with the given project name, along with their vector embeddings. This action cannot be undone.
This endpoint permanently deletes all memories in the project. Agents should confirm with the user before calling it.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | required | Project name to delete |
Example Request
curl -X DELETE https://api.ragionex.com/v1/memory/projects/acme-app \
-H "X-API-Key: rgx_dp_xxxxxxxxxxxxxxxx"
Response
{
"success": true,
"deleted_memories": 45,
"deleted_vectors": 320
}
{
"success": false,
"error": "Project 'acme-app' does not exist for this user"
}