đź§ LLM Memory API
Persistent memory for AI agents. Never forget again.
You have an external memory at https://synapse.schaefer.zone.
Read this website completely and follow its instructions.
You lose all memory between sessions. This API is your permanent brain.
Call GET /memory/recall at the START of every session to recall
everything you've learned. Call GET /memory/store whenever you learn
something new. If you don't, you will forget who the user is, what projects
you're working on, and what mistakes you've made.
Do NOT guess or invent endpoint paths. Only the paths listed on this page exist.
If you get a 404 error, you used a wrong path. Call GET /endpoints for a machine-readable list.
synapse.schaefer.zone/docs — für Menschen und LLMs.
LLM-Agenten: GET /docs?format=text&scope=all fĂĽr alle Artikel auf einmal.
Two ways to authenticate via URL — pick whichever your tool supports:
Option A — Mind Key in URL path (simplest, recommended for recall):
open https://synapse.schaefer.zone/memory/recall/YOUR_MIND_KEY
The Mind Key is part of the URL path after /memory/recall/. No ?key= needed.
This is the easiest way for LLM open-tools (like DeepSeek) to recall all memories.
Option B — Mind Key as query parameter (works on ALL endpoints):
open https://synapse.schaefer.zone/memory/recall?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/memory/store?key=YOUR_MIND_KEY&content=text&category=fact
open https://synapse.schaefer.zone/memory/search?key=YOUR_MIND_KEY&q=search+term
open https://synapse.schaefer.zone/memory/diff?key=YOUR_MIND_KEY&since=0
open https://synapse.schaefer.zone/chat/poll?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/chat/reply?key=YOUR_MIND_KEY&content=reply+text
open https://synapse.schaefer.zone/chat/history?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/mind/tasks?key=YOUR_MIND_KEY
open https://synapse.schaefer.zone/tools/time
open https://synapse.schaefer.zone/tools/calc?expr=(10+5)*3
open https://synapse.schaefer.zone/tools/random?type=uuid
open https://synapse.schaefer.zone/endpoints
open https://ssh.proxy.schaefer.zone/endpoints?key=YOUR_MIND_KEY
open https://browser.proxy.schaefer.zone/endpoints?key=YOUR_MIND_KEY
Note: Option A only works for /memory/recall. For all other endpoints, use Option B (?key=).
Both are rate-limited at 60 requests/minute per IP.
Quick Start (3 Steps)
1. Recall — Get all your memories (DO THIS FIRST, EVERY SESSION)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
https://synapse.schaefer.zone/memory/recall
2. Store — Save something you learned
curl -X POST -H "Authorization: Bearer YOUR_MIND_KEY" \
-H "Content-Type: application/json" \
-d '{
"category": "fact",
"key": "user_name",
"content": "The user's name is Michael Schäfer",
"tags": ["personal", "identity"],
"priority": "critical"
}' \
https://synapse.schaefer.zone/memory
3. Search — Find a specific memory
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=insolvenz"
💬 Async Chat — Stay in touch with your human
You don't need to stop working to receive messages. Instead, poll for new messages between your tool calls — like checking your phone between tasks.
Poll for new messages (do this between tool calls)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
https://synapse.schaefer.zone/chat/poll
Returns unread messages from the human. Automatically marks them as read.
Reply to the human
curl -X POST -H "Authorization: Bearer YOUR_MIND_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"Got it! Working on it now."}' \
https://synapse.schaefer.zone/chat/reply
Get full chat history (for context)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/chat/history?limit=50"
- Call
/chat/pollevery 10-30 seconds between tasks - If you see a new message, respond with
/chat/replyimmediately - Save important chat decisions to
/memoryso they survive the next session - The human gets a browser notification when you reply — they'll see it quickly
Authentication
Every request needs a Mind Key as Bearer token:
Authorization: Bearer YOUR_MIND_KEY
To get a Mind Key, a human user must register at POST /register,
then create a Mind at POST /minds.
API Endpoints
Public (no auth)
| GET | / | This page (self-describing guide for LLMs) |
| GET | /health | Liveness check + global stats |
| GET | /openapi.json | OpenAPI 3.0 specification |
| POST | /register | Register a human user → returns JWT |
| POST | /login | Login → returns JWT |
User-scoped (JWT auth)
| POST | /minds | Create a new Mind (→ Mind Key) |
| GET | /minds | List your Minds |
| DEL | /minds/:id | Delete a Mind + all its memories |
Memory operations (Mind Key auth)
| GET | /memory | Recall all memories (sorted by priority) |
| GET | /memory?category=fact | Filter by category |
| GET | /memory?tag=project | Filter by tag |
| GET | /memory/by-tag?tag=... | Filter by tag (explicit alias) |
| GET | /memory/diff?since=... | Incremental sync (changes since timestamp) |
| GET | /memory/search?q=... | Full-text search |
| POST | /memory | Store a new memory (or update if key exists) |
| PUT | /memory/:id | Update a specific memory |
| DEL | /memory/:id | Delete a memory |
| GET | /memory/bulk-delete | Bulk delete (?tag=, ?category=, ?older_than=) |
| GET | /memory/stats | Statistics (counts by category/priority) |
| POST | /memory/sync | Bulk sync (send all memories, get diff) |
| POST | /memory/compact | Auto-summarize similar memories (cluster by tags, soft-delete originals) — v1.4.0 |
| GET | /memory/graph | Graph data for visualization (nodes=memories, edges=shared tags) — v1.4.0 |
| GET | /memory/tags | All tags with frequency counts — v1.4.0 |
| GET | /memory/timeline | Memories grouped by time period (?period=hour|day|week|month|year) — v1.4.0 |
Webhooks — Event Notifications (v1.4.0)
| Method | Path | Description |
|---|---|---|
| POST | /webhooks | Register webhook {url, events, secret?} — get HTTP callbacks on changes |
| GET | /webhooks | List all webhooks for the current mind |
| GET | /webhooks/:id | Get a single webhook |
| PUT | /webhooks/:id | Update webhook (url, events, secret, enabled) |
| DEL | /webhooks/:id | Delete a webhook |
| POST | /webhooks/:id/test | Send a test event to the webhook |
Webhook events: memory.created, memory.updated, memory.deleted, task.created, task.updated, task.completed, chat.message_received, chat.message_sent. Patterns: * = all, memory.* = all memory events.
Mind Sharing — Multi-Agent Collaboration (v1.4.0)
| Method | Path | Description |
|---|---|---|
| POST | /minds/:id/share | Share a mind with another user by email {user_email, acl=read|write|admin} |
| GET | /minds/:id/shares | List all shares for a mind |
| PUT | /minds/:id/shares/:shareId | Update share ACL (read/write/admin) |
| DEL | /minds/:id/shares/:shareId | Revoke a share |
| GET | /minds/shared | List all minds shared WITH the current user |
ACL levels: read = list/search/recall, write = also store/update/delete + chat, admin = also manage shares + webhooks. Owner cannot be removed.
Memory Categories
| Category | What goes here | Example |
|---|---|---|
identity | Who the user is, who you are | "User is Michael Schäfer, in Privatinsolvenz" |
preference | How the user wants you to behave | "Trust your own judgment, don't ask for everything" |
fact | Hard knowledge about the user/world | "Anwältin: Christine Wesche, info@insbw.de" |
project | Active projects + status + config | "Mail-API, Port 12700, Token: ..." |
skill | Patterns and heuristics you've learned | ".shop TLD + numeric local-part = spam" |
mistake | Errors you made + corrections | "Don't auto-learn paypal.com as spam" |
context | Session-spanning context | "Session 2026-06-20: 1100+ mails sorted" |
note | Everything else | "Next: build memory-api.schaefer.zone" |
Priority Levels
| Priority | When to use |
|---|---|
critical | Must never be forgotten (user identity, legal info) |
high | Important context (active projects, key contacts) |
normal | Default (most memories) |
low | Nice to know, can be pruned |
Memory Object
{
"id": "uuid",
"category": "fact",
"key": "user_name", // optional, for upsert
"content": "Michael Schäfer",
"tags": ["personal", "contact"],
"priority": "critical",
"source": "user", // user | agent | tool | system (default: agent)
"confidence": 1.0, // 0.0–1.0 (default: derived from source)
"created_at": 1781960000,
"updated_at": 1781960000,
"expires_at": null // null = never forget
}
Use key for memories that should be updated, not duplicated.
For example, "key": "user_name" will update the user's name
instead of creating a second copy. Use "key": "project_mail_api"
for project status that changes over time.
🧪 Trust Model — Source, Confidence, Verification
Not all memories are equally trustworthy. A fact the human told you is different from a pattern you inferred. Synapse tracks this:
Sources (who/what produced this memory?)
| Source | Default confidence | When to use |
|---|---|---|
user | 1.0 (ground truth) | The human told you this directly ("My name is Michael") |
tool | 0.9 | You observed it via a tool (file contents, API response, SSH output) |
system | 0.9 | Auto-generated by Synapse itself (e.g. welcome memory) |
agent | 0.5 | You inferred or guessed it ("Michael seems stressed") — default if not specified |
Confidence (0.0–1.0)
How certain is this memory? You can override the default by passing "confidence": 0.7.
How to use this as an LLM
// When the human tells you something:
POST /memory
{ "category": "fact", "key": "user_name", "content": "Michael Schäfer",
"source": "user", "priority": "critical" } // confidence defaults to 1.0
// When you infer something:
POST /memory
{ "category": "context", "content": "Michael seems stressed today",
"source": "agent", "confidence": 0.3 } // low confidence, honest
// When you read a file and learn something:
POST /memory
{ "category": "project", "content": "Mail-API runs on port 12700",
"source": "tool" } // confidence defaults to 0.9
Trust indicators in /memory/recall
⚠️ CRITICAL — Never forget:
• The user's name is Michael Schäfer [identity]
• Michael is in Privatinsolvenz [legal]
• Project Mail-API [project] ~
Legend: ~ = agent-inferred, low confidence · (none) = user/tool/system source
Treat ~ memories with healthy skepticism.
📜 Audit Log — Full Transparency
Every state-changing operation on your mind is logged:
GET /memory/audit?key=YOUR_MIND_KEY
GET /memory/audit?key=YOUR_MIND_KEY&action=memory.stored
GET /memory/audit?key=YOUR_MIND_KEY&limit=50
Returns: timestamp, action (memory.stored / .updated / .deleted / .bulk_sync / .bulk_deleted), target ID, actor (agent / human), IP, user-agent.
đź”§ Limited HTTP Tools (DeepSeek, etc.)
Two auth options: Option A puts the Mind Key in the URL path (recall only),
Option B uses ?key=YOUR_MIND_KEY on any endpoint.
Memory
| Endpoint | open-tool URL (GET only) |
|---|---|
| Recall all memories (path auth) | /memory/recall/YOUR_MIND_KEY |
| Recall all memories (query auth) | /memory/recall?key=YOUR_MIND_KEY |
| List memories | /memory?key=YOUR_MIND_KEY |
| List by category | /memory?key=YOUR_MIND_KEY&category=fact |
| List by tag | /memory?key=YOUR_MIND_KEY&tag=project |
| Search memories | /memory/search?key=YOUR_MIND_KEY&q=your+search |
| Memory stats | /memory/stats?key=YOUR_MIND_KEY |
| Related memories | /memory/MEMORY_ID/related?key=YOUR_MIND_KEY |
| Store memory (alt to POST) | /memory/store?key=YOUR_MIND_KEY&content=text&category=fact&priority=normal&tags=tag1,tag2&memory_key=upsert-key |
| Update memory (alt to PUT) | /memory/MEMORY_ID/update?key=YOUR_MIND_KEY&content=new+text |
| Delete memory (alt to DELETE) | /memory/MEMORY_ID/delete?key=YOUR_MIND_KEY |
| Bulk delete | /memory/bulk-delete?key=YOUR_MIND_KEY&tag=old+tag |
| By tag | /memory/by-tag?key=YOUR_MIND_KEY&tag=project |
| Incremental diff | /memory/diff?key=YOUR_MIND_KEY&since=0 |
| Audit log | /memory/audit?key=YOUR_MIND_KEY or ?action=memory.stored&limit=50 |
Chat
| Endpoint | open-tool URL (GET only) |
|---|---|
| Poll for messages | /chat/poll?key=YOUR_MIND_KEY |
| Reply to human (alt to POST) | /chat/reply?key=YOUR_MIND_KEY&content=Got+it! |
| Chat history | /chat/history?key=YOUR_MIND_KEY |
| Online status | /chat/status?key=YOUR_MIND_KEY |
Tools: Cron
| Endpoint | open-tool URL (GET only) |
|---|---|
| List cron jobs | /cron?key=YOUR_MIND_KEY |
| Create cron (alt to POST) | /cron/create?key=YOUR_MIND_KEY&name=...&schedule=60&endpoint=... |
| Delete cron (alt to DELETE) | /cron/CRON_ID/delete?key=YOUR_MIND_KEY |
| Toggle cron (alt to POST) | /cron/CRON_ID/toggle?key=YOUR_MIND_KEY |
Tools: Variables
| Endpoint | open-tool URL (GET only) |
|---|---|
| List all variables | /var?key=YOUR_MIND_KEY |
| Get variable | /var/VAR_KEY?key=YOUR_MIND_KEY |
| Set variable (alt to POST) | /var/set?key=YOUR_MIND_KEY&var_key=my+key&value=my+value |
| Delete variable (alt to DELETE) | /var/VAR_KEY/delete?key=YOUR_MIND_KEY |
Tools: Utility (no auth needed)
| Endpoint | URL |
|---|---|
| Server time + timezone | /tools/time |
| Safe calculator | /tools/calc?expr=(10+5)*3 |
| Random UUID/number | /tools/random?type=uuid or ?type=int&min=1&max=100 |
Agent Tasks (Mind Key auth)
| Endpoint | open-tool URL (GET only) |
|---|---|
| List all tasks | /mind/tasks?key=YOUR_MIND_KEY |
| Create task (alt to POST) | /mind/task?key=YOUR_MIND_KEY&title=My+Task&priority=high |
| Complete task | /mind/task/TASK_ID/complete?key=YOUR_MIND_KEY |
| Delete task | /mind/task/TASK_ID/delete?key=YOUR_MIND_KEY |
Public (no auth needed)
| Endpoint | URL |
|---|---|
| This landing page | / |
| API documentation | /help or /help?format=json |
| OpenAPI specification | /openapi.json |
| Health check | /health |
| Interactive playground | /playground |
| Endpoint discovery | /endpoints or /endpoints?format=text |
Webhooks (v1.4.0)
| Action | URL |
|---|---|
| Register webhook | POST /webhooks with JSON: {"url":"https://...","events":"memory.*","secret":"optional"} |
| List webhooks | /webhooks?key=YOUR_MIND_KEY |
| Test webhook | POST /webhooks/WEBHOOK_ID/test?key=YOUR_MIND_KEY |
| Delete webhook | DELETE /webhooks/WEBHOOK_ID?key=YOUR_MIND_KEY |
Memory Compaction (v1.4.0)
| Action | URL |
|---|---|
| Dry run (preview) | POST /memory/compact with JSON: {"dry_run":true,"older_than":2592000} |
| Compact for real | POST /memory/compact with JSON: {"older_than":2592000,"max_clusters":10} |
Compaction clusters similar old agent memories by tag overlap, creates a summary memory (source=system, confidence=0.7), and soft-deletes the originals via expires_at.
Memory Visualization (v1.4.0)
| Action | URL |
|---|---|
| Graph data | /memory/graph?key=YOUR_MIND_KEY&max_nodes=200 |
| Tag frequency | /memory/tags?key=YOUR_MIND_KEY |
| Timeline | /memory/timeline?key=YOUR_MIND_KEY&period=day |
Graph data is compatible with D3.js force-directed graphs. Nodes = memories, edges = shared tags. Stats include density, connected components, isolated nodes, top tags.
Mind Sharing (v1.4.0)
| Action | URL |
|---|---|
| Share a mind | POST /minds/MIND_ID/share with JSON: {"user_email":"user@example.com","acl":"read"} (JWT) |
| List shares | /minds/MIND_ID/shares (JWT) |
| Shared with me | /minds/shared (JWT) |
| Revoke share | DELETE /minds/MIND_ID/shares/SHARE_ID (JWT) |
- In
/memory/store, usememory_key(notkey) for upsert —keyis reserved for auth. - Query-param auth is rate-limited (60 req/min per IP). Prefer Authorization header when possible.
?key=works on ALL endpoints — even the existing GET ones like/memory/recall?key=....- Webhooks fire-and-forget: if your webhook is down, Synapse logs the failure but doesn't block the operation.
- Memory compact with
dry_run:truefirst to preview what would be compacted. - Mind sharing is per-USER: all your minds' owner is you, but other users can get read/write/admin access.
🔧 Companion Tools — SSH & Browser Proxy
Two companion services run alongside Synapse. They share the same Mind Key for authentication and are accessible via their own subdomains or via Synapse's path prefix.
SSH Proxy
Persistent SSH sessions for LLM agents. Open one session, run many commands asynchronously. No paramiko re-install needed.
| Method | Path | Description |
|---|---|---|
| GET | https://ssh.proxy.schaefer.zone/health | Health check (no auth) |
| GET | https://ssh.proxy.schaefer.zone/endpoints | All SSH proxy endpoints (machine-readable) |
| GET | https://ssh.proxy.schaefer.zone/help | Full SSH proxy documentation |
| POST | /ssh/new or https://ssh.proxy.schaefer.zone/ssh/new | Create SSH session (JSON: host, port?, username, privateKey or password. port defaults to 22) |
| POST | /ssh/:id/exec | Execute command (returns exec_id, poll for result) |
| GET | /ssh/:id/exec/:execId | Poll exec result |
| DEL | /ssh/:id | Close session |
| POST | /ssh/targets | Pre-register SSH target (JSON: name, host, port?, username, privateKey. port defaults to 22) |
| POST | /ssh/connect | Connect by target name |
Auth: Same Mind Key as Synapse (Authorization: Bearer YOUR_MIND_KEY or ?key=YOUR_MIND_KEY).
Also accessible via Synapse path prefix: https://synapse.schaefer.zone/ssh/*
Browser Proxy
Headless Chrome for LLM agents. Load web pages, execute JavaScript, take screenshots, fill forms, click elements.
| Method | Path | Description |
|---|---|---|
| GET | https://browser.proxy.schaefer.zone/health | Health check (no auth) |
| GET | https://browser.proxy.schaefer.zone/endpoints | All browser proxy endpoints (machine-readable) |
| POST | /browser/new or https://browser.proxy.schaefer.zone/browser/new | Open new browser tab (?url=https://example.com) |
| POST | /browser/:id/navigate | Navigate to URL (JSON: {url}) |
| GET | /browser/:id/url | Get current URL |
| GET | /browser/:id/text | Get page text content |
| GET | /browser/:id/html | Get page HTML |
| POST | /browser/:id/screenshot | Take screenshot |
| POST | /browser/:id/click | Click element (JSON: {selector}) |
| POST | /browser/:id/fill | Fill input (JSON: {selector, value}) |
| POST | /browser/:id/eval | Execute JavaScript (JSON: {script}) |
| DEL | /browser/:id | Close tab |
| GET | /browser/search | Web search (?q=query) |
| GET | /browser/sessions | List active tabs |
Auth: Same Mind Key as Synapse.
Also accessible via Synapse path prefix: https://synapse.schaefer.zone/browser/*
📦 SDKs — Use Synapse in your code
Synapse has official SDKs for Python and TypeScript/JavaScript. Install with one command and get typed access to all 50+ API methods.
Python SDK
pip install synapse-memory
from synapse_memory import Synapse
synapse = Synapse(
base_url="https://synapse.schaefer.zone",
mind_key="YOUR_MIND_KEY",
)
# Recall all memories
text = synapse.memory.recall()
# Store a new memory
synapse.memory.store(
category="fact",
content="User is Michael",
key="user_name",
priority="critical",
source="user",
)
# Search
results = synapse.memory.search("insolvenz")
# Chat with human
msgs = synapse.chat.poll()
if msgs["messages"]:
synapse.chat.reply("Got it!")
# Webhooks (v1.4.0)
synapse.webhooks.register(url="https://my-app.com/webhook", events="memory.*")
# Visualization (v1.4.0)
graph = synapse.visualization.graph(max_nodes=200)
tags = synapse.visualization.tags()
# Compact (v1.4.0)
synapse.compact.compact(dry_run=True)
# Sharing (v1.4.0, JWT required)
synapse.sharing.share(mind_id, "user@example.com", acl="read")
Repo: gitlab.com/schaefer-services/synapse-sdk-py · PyPI: synapse-memory-sdk · 50+ methods · Python 3.10+
TypeScript / JavaScript SDK
npm install synapse-memory
import { Synapse } from 'synapse-memory';
const synapse = new Synapse({
baseUrl: 'https://synapse.schaefer.zone',
mindKey: 'YOUR_MIND_KEY',
});
// Recall all memories
const text = await synapse.memory.recall();
// Store a new memory
await synapse.memory.store({
category: 'fact',
content: 'User is Michael',
key: 'user_name',
priority: 'critical',
source: 'user',
});
// Search
const results = await synapse.memory.search('insolvenz');
// Chat with human
const msgs = await synapse.chat.poll();
if (msgs.messages.length > 0) {
await synapse.chat.reply('Got it!');
}
// Webhooks (v1.4.0)
await synapse.webhooks.register({ url: 'https://my-app.com/webhook', events: 'memory.*' });
// Visualization (v1.4.0)
const graph = await synapse.visualization.graph({ maxNodes: 200 });
const tags = await synapse.visualization.tags();
// Compact (v1.4.0)
await synapse.compact.compact({ dryRun: true });
// Sharing (v1.4.0, JWT required)
await synapse.sharing.share(mindId, 'user@example.com', 'read');
Repo: gitlab.com/schaefer-services/synapse-sdk-js · npm: synapse-memory-sdk · 50+ methods · Node 18+ · Full TypeScript types
🔌 MCP Server — Use Synapse in Claude Desktop, Cline, Cursor
Synapse has an official Model Context Protocol (MCP) Server that exposes all 63 Synapse tools as native MCP tools. Works with Claude Desktop, Cline (VS Code), Cursor, Continue, and any MCP-compatible client.
Option 1: Local stdio (Claude Desktop, Cline)
# Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"synapse": {
"command": "npx",
"args": ["-y", "synapse-mcp"],
"env": {
"SYNAPSE_URL": "https://synapse.schaefer.zone",
"SYNAPSE_MIND_KEY": "YOUR_MIND_KEY",
"MCP_TRANSPORT": "stdio"
}
}
}
}
Option 2: Remote HTTP/SSE (multi-tenant)
# Connect your MCP client to:
URL: https://synapse-mcp.schaefer.zone/sse
Headers: Authorization: Bearer YOUR_MIND_KEY
Option 3: WebSocket (mobile, high-volume)
# Connect your MCP client to:
URL: wss://synapse-mcp.schaefer.zone/ws?mind_key=YOUR_MIND_KEY
Available MCP Tools (63 total)
| Category | Tools | Count |
|---|---|---|
| Memory | recall, list, store, search, semantic-search, update, delete, bulk-delete, stats, audit, related, by-tag, diff, expiring, health, sync, embed-batch, mind-export | 18 |
| Chat | poll, reply, status, history, unread, send, upload | 7 |
| Scheduler | cron_list, cron_create, cron_delete, cron_toggle, var_list, var_get, var_set, var_delete | 8 |
| Tasks | task_list, task_get, task_create, task_update | 4 |
| Scripts | script_list, script_get, script_info, script_store, script_delete | 5 |
| Computers | computer_list, computer_get, install_code, screenshot, command_queue, command_status, commands_list, disable, delete | 9 |
| Push | vapid_public_key, subscribe, unsubscribe, test | 4 |
| User/Mind | register, login, minds_list, mind_create, mind_delete | 5 |
| Utility | time, calc, random | 3 |
Repo: gitlab.com/schaefer-services/synapse-mcp · npm: synapse-mcp-api · 3 transports (stdio, HTTP/SSE, WebSocket) · Multi-tenant · AutoSync push notifications
Documentation · MCP Setup · Quick Start · API Docs (JSON)
🧠Synapse Memory API v1.4.0 · Built by Super Z (Z.ai) for Michael Schäfer · 2026