HTTP REST API for non-MCP clients, web dashboards, cross-machine access, and OpenClaw agent tools. Required for OpenClaw integration — the memory plugin serves 5 agent tools (search, get, session_log, timeline, similar) via this API. See the OpenClaw plugin guide for details.
./bin/clawmem serve # localhost:7438, no auth
./bin/clawmem serve --port 8080 # custom port
CLAWMEM_API_TOKEN=secret ./bin/clawmem serve # with bearer token auth
Set CLAWMEM_API_TOKEN to require Authorization: Bearer <token> on all requests. If unset, access is open (localhost-only by default).
| Method | Path | Description |
|---|---|---|
| GET | /health |
Liveness probe — returns status, version, doc count |
| GET | /stats |
Full index statistics with collection list |
| Method | Path | Description |
|---|---|---|
| POST | /search |
Direct search with mode selection |
| POST | /retrieve |
Smart retrieve with auto-routing |
POST /search
{
"query": "authentication decisions",
"mode": "hybrid",
"collection": "notes",
"compact": true,
"limit": 10
}
Modes: auto, keyword, semantic, hybrid.
POST /retrieve
{
"query": "why did we choose JWT",
"mode": "auto",
"compact": true,
"limit": 10
}
Modes: auto, keyword, semantic, causal, timeline, hybrid.
Auto-routing classifies the query:
# Example: causal query
curl -X POST http://localhost:7438/retrieve \
-H 'Content-Type: application/json' \
-d '{"query": "why did we switch to JWT", "compact": true}'
# Example: keyword search
curl -X POST http://localhost:7438/search \
-H 'Content-Type: application/json' \
-d '{"query": "CLAWMEM_EMBED_URL", "mode": "keyword"}'
| Method | Path | Description |
|---|---|---|
| GET | /documents/:docid |
Single document by 6-char hash prefix |
| GET | /documents?pattern=... |
Multi-get by glob pattern |
curl http://localhost:7438/documents/a1b2c3
curl http://localhost:7438/documents?pattern=notes/*.md
| Method | Path | Description |
|---|---|---|
| GET | /timeline/:docid |
Temporal neighborhood (before/after) |
| GET | /sessions |
Recent session history |
curl http://localhost:7438/timeline/a1b2c3?before=3&after=3
curl http://localhost:7438/sessions?limit=5
| Method | Path | Description |
|---|---|---|
| GET | /graph/causal/:docid |
Causal chain traversal |
| GET | /graph/similar/:docid |
k-NN semantic neighbors |
| GET | /graph/evolution/:docid |
Document evolution timeline |
curl http://localhost:7438/graph/causal/a1b2c3?direction=both&depth=3
curl http://localhost:7438/graph/similar/a1b2c3?limit=5
| Method | Path | Description |
|---|---|---|
| GET | /lifecycle/status |
Active/archived/pinned/snoozed counts |
| POST | /lifecycle/sweep |
Archive stale docs (dry_run default) |
| POST | /lifecycle/restore |
Restore archived docs |
| Method | Path | Description |
|---|---|---|
| POST | /documents/:docid/pin |
Pin/unpin a document |
| POST | /documents/:docid/snooze |
Snooze until a date |
| POST | /documents/:docid/forget |
Deactivate a document |
| Method | Path | Description |
|---|---|---|
| GET | /collections |
List all collections |
| GET | /profile |
Get user profile |
| POST | /reindex |
Trigger re-scan |
| POST | /graphs/build |
Rebuild temporal + semantic graphs |
| GET | /export |
Full vault export as JSON |
All responses are JSON. Search/retrieve responses include:
{
"query": "authentication",
"mode": "hybrid",
"count": 3,
"results": [
{
"docid": "a1b2c3",
"path": "notes/auth.md",
"title": "Authentication Decision",
"score": 0.847,
"contentType": "decision",
"snippet": "We chose JWT for authentication because..."
}
]
}
When compact=false, results include modifiedAt, confidence, and full body instead of snippet.
For production deployments (especially OpenClaw), run the REST API as a persistent service instead of relying on the plugin’s spawnBackground():
cat > ~/.config/systemd/user/clawmem-serve.service << 'EOF'
[Unit]
Description=ClawMem REST API server
After=default.target
[Service]
Type=simple
ExecStart=%h/clawmem/bin/clawmem serve --port 7438
Restart=on-failure
RestartSec=5
Environment=CLAWMEM_API_TOKEN=your-secret-here
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now clawmem-serve.service
When running as a systemd service, set enableTools: true and servePort: 7438 in the OpenClaw plugin manifest — the plugin will connect to the existing server instead of spawning its own.
For remote GPU setups, add environment overrides (same pattern as the watcher service):
Environment=CLAWMEM_EMBED_URL=http://gpu-host:8088
Environment=CLAWMEM_LLM_URL=http://gpu-host:8089
Environment=CLAWMEM_LLM_MODEL=qwen3
Environment=CLAWMEM_RERANK_URL=http://gpu-host:8090
The server allows localhost:* origins for local frontend development.