Memory API
Below is a comprehensive REST API documentation for managing Vector Stores (referred to as “memory” or “store” in the code).
Note: This API is part of a system that leverages oab-vector-store-style storage and embeddings. Typically, you must provide valid API credentials (and a database-id-hash) to access or modify stores.
1. Overview
This API allows you to:
- Create and list vector stores using the
/api/memory/createand/api/memory/queryendpoints. - Get or delete specific stores (by
filename) via/api/memory/[filename]. - List, query, and store vector records within a specific store using the
/api/memory/[filename]/recordsendpoint. - Delete a specific record by
recordIdvia/api/memory/[filename]/records/[recordId]. - Generate embeddings for arbitrary text using
/api/memory/embeddings.
2. Mandatory Request Headers
-
Authorization: Bearer <OPEN_AGENT_BUILDER_API_KEY>
Used for authentication. Replace<OPEN_AGENT_BUILDER_API_KEY>with your actual API key. -
database-id-hash: <YOUR_DATABASE_ID_HASH>
A constant key per user’s database.- Obtain this from your administration or environment settings.
Example:
Authorization: Bearer abc1234exampleKeydatabase-id-hash: 35f5c5b139a6b569d4649b788c1851831eb44d8e32b716b8411ec6431af8121d3. Data Schema & Validation Rules
3.1 Vector Store
- A store is a collection of vector records saved in a JSON file on disk (plus its indexing structures).
storeName(used asfilenamein the URL) must:- Not be empty or only whitespace
- Not contain invalid filesystem characters (
<>:"/\\|?*) - Not start/end with a space or dot (
.) - Not exceed 255 characters
- Must be unique (cannot create a store that already exists)
3.2 Vector Store Record
Each record in a vector store is validated via the VectorStoreEntry schema:
export const vectorStoreEntrySchema = z.object({ id: z.string(), content: z.string(), embedding: z.array(z.number()), metadata: z.record(z.unknown()), createdAt: z.string().optional(), updatedAt: z.string().optional(),});Key points:
id: A unique identifier string for the record. Required.content: The raw text (or data) the embedding is generated from. Required.embedding: An array of numbers representing the vector embedding. Required.metadata: A freeform object (key/value pairs) for any additional data about this record. Optional.createdAt,updatedAt: Timestamps assigned internally; typically optional.
4. Endpoints & Usage
4.1 CREATE /api/memory/create
Method: POST
Description: Create a new vector store.
- Request Body:
{"storeName": "<string>"}
storeNameis required and must be unique. If a store already exists with this name, a400is returned.
Example Request (cURL):
curl -X POST \ https://app.example.com/api/memory/create \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..." \ -H "Content-Type: application/json" \ -d '{ "storeName": "my-new-store" }'Success Response (HTTP 200):
{ "message": "Store created successfully"}Error Response (HTTP 400 for validation issues, 500 for internal server errors):
{ "error": "Store already exists"}or
{ "error": "Store name contains invalid characters..."}4.2 QUERY /api/memory/query
Method: GET
Description: List available vector stores and their metadata, optionally with pagination and text filtering.
- Query Parameters:
limit(default: 10)offset(default: 0)query– a partial store name to match (case-insensitive)
Example Request:
curl -X GET \ "https://app.example.com/api/memory/query?limit=10&offset=0&query=my" \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..."Success Response (HTTP 200):
{ "files": [ { "file": "my-new-store", "displayName": "my-new-store", "itemCount": 5, "createdAt": "2025-03-20T12:45:01.000Z", "updatedAt": "2025-03-20T12:46:22.000Z", "lastAccessed": "2025-03-21T08:00:00.000Z" }, { "file": "my-other-store", "displayName": "my-other-store", "itemCount": 17, "createdAt": "...", "updatedAt": "...", "lastAccessed": "..." } ], "limit": 10, "offset": 0, "hasMore": false, "total": 2}4.3 STORES /api/memory/[filename]
Endpoints for one specific vector store identified by [filename].
4.3.1 GET /api/memory/[filename]
- Description: Fetches all records (
items) stored infilenameas raw JSON.- Does not perform vector-based search.
- Returns an array of stored items (full embeddings included).
Example:
curl -X GET \ https://app.example.com/api/memory/my-new-store \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..."Success Response (HTTP 200):
[ { "id": "record-123", "content": "Some content here...", "embedding": [0.12, -0.08, ...], "metadata": { "source": "docs" } }, { "id": "record-456", "content": "Another piece of text", "embedding": [...], "metadata": {} }]Error Response (HTTP 404 if store not found):
{ "error": "Store not found"}4.3.2 DELETE /api/memory/[filename]
- Description: Permanently deletes the entire store (the JSON file and its index). All records in that store are removed.
Example:
curl -X DELETE \ https://app.example.com/api/memory/my-new-store \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..."Success Response (HTTP 200):
{ "message": "Store deleted successfully", "status": 200}Error Response (HTTP 404 if store not found, or 500 on server error):
{ "message": "Store 'my-new-store' not found", "status": 404}4.4 RECORDS /api/memory/[filename]/records
Endpoints for managing records within a specific store [filename].
4.4.1 GET /api/memory/[filename]/records
- Description: List or vector-search the records in
[filename].- If
embeddingSearchis provided, a vector similarity search is performed on the server. - Otherwise, it returns a paginated list of records (with partial embeddings shown).
- If
Query Parameters:
limit(default: 10)offset(default: 0)embeddingSearch: a string to vectorize and search.topK(default: 5 ifembeddingSearchis used): how many top results to return.
Examples:
-
List records:
Terminal window curl -X GET \"https://app.example.com/api/memory/my-new-store/records?limit=10&offset=0" \-H "Authorization: Bearer abc1234exampleKey" \-H "database-id-hash: 35f5c5b139a6b569..."Success:
{"rows": [{"id": "record-123","metadata": {...},"content": "Some content...","embeddingPreview": [0.12, -0.08, ...] // only first 8 numbers},{"id": "record-456","...": "..."}],"total": 2} -
Vector search:
Terminal window curl -X GET \"https://app.example.com/api/memory/my-new-store/records?embeddingSearch=climate+change&topK=3" \-H "Authorization: Bearer abc1234exampleKey" \-H "database-id-hash: 35f5c5b139a6b569..."Success:
{"rows": [{"id": "record-789","content": "Text related to climate change","embeddingPreview": [...],"similarity": 0.89234,"metadata": { "category": "environment" }},...],"total": 3,"vectorSearchQuery": "climate change"}
Possible Error (HTTP 500 on internal errors):
{ "error": "Failed to fetch records"}4.4.2 POST /api/memory/[filename]/records
- Description: Insert a new record into the store.
Request Body:
{ "id": "record-123", "content": "Hello world", "metadata": { "language": "en" }, "embedding": [0.12, -0.07, 0.99, ...]}id: Unique ID for this record.content: Main text.embedding: Numerically generated vector (e.g., from an embedding model).metadata: Optional object with custom fields.
Example:
curl -X POST \ https://app.example.com/api/memory/my-new-store/records \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..." \ -H "Content-Type: application/json" \ -d '{ "id": "intro-text-01", "content": "Introduction to vector stores", "embedding": [0.12345, 0.54321, ...], "metadata": { "category": "tutorial" } }'Success Response (HTTP 200):
{ "success": true}Validation Error (HTTP 400 if id/content/embedding missing):
{ "error": "Missing required fields"}4.5 RECORD DELETION /api/memory/[filename]/records/[recordId]
Method: DELETE
Description: Deletes a single record from a specific store.
Example:
curl -X DELETE \ https://app.example.com/api/memory/my-new-store/records/intro-text-01 \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..."Success Response (HTTP 200):
{ "message": "Record deleted successfully"}Error Response (HTTP 404 if store or record not found):
{ "error": "Store not found"}or
{ "error": "Record not found"}(The exact message depends on whether the store or record is missing.)
4.6 GENERATE EMBEDDINGS /api/memory/embeddings
Method: POST
Description: Generates an embedding array using OpenAI (or a configured provider) for the supplied text content. This is a convenience endpoint if you want the server to handle embedding generation.
Request Body:
{ "content": "Text to embed"}Example:
curl -X POST \ https://app.example.com/api/memory/embeddings \ -H "Authorization: Bearer abc1234exampleKey" \ -H "database-id-hash: 35f5c5b139a6b569..." \ -H "Content-Type: application/json" \ -d '{ "content": "Hello world" }'Success Response (HTTP 200):
{ "embedding": [0.12345, -0.0321, ...]}Error Response (HTTP 400 if content missing, or 500 on internal failure):
{ "error": "Content is required"}5. Error Handling
Common error responses and their meanings:
-
400 Bad Request
- Typically means a validation issue (missing
id, invalidstoreName, etc.).
- Typically means a validation issue (missing
-
404 Not Found
- The requested store or record does not exist.
-
500 Internal Server Error
- Server-side exceptions (file I/O issues, embedding generation failures, etc.).
All error responses generally follow the pattern:
{ "error": "<description>", "status": <numericCode> // optional}or
{ "message": "<description>", "status": <numericCode>}6. Additional Notes
- Embedding: The server can create embeddings automatically if you use the
POST /api/memory/embeddingsendpoint. Otherwise, you must supply your own numerical vectors. - Store Deletion: Deleting a store is irreversible, and all records in that store are lost.
- Record Deletion: Deleting a record removes it permanently from that store’s underlying JSON file and index.
- Pagination: For listing records or stores, always consider using
limitandoffsetfor performance with large data sets. - Usage Quotas: In SaaS mode, creating too many stores or records may be restricted if you exceed your plan limits. Expect
403or similar errors in such cases.
7. Summary of Endpoints
-
POST
/api/memory/create- Create a new vector store.
-
GET
/api/memory/query- List existing stores (with metadata, pagination, and optional name filter).
-
POST
/api/memory/embeddings- Generate vector embeddings for a given text.
-
GET
/api/memory/[filename]- Retrieve all records from a specific store as raw JSON.
-
DELETE
/api/memory/[filename]- Delete an entire store (its file and index).
-
GET
/api/memory/[filename]/records- Paginated listing or vector search of records in a single store.
-
POST
/api/memory/[filename]/records- Create (insert) a new record into a single store.
-
DELETE
/api/memory/[filename]/records/[recordId]- Delete a single record by its
idfrom a store.
- Delete a single record by its
End of Documentation