services/server/src/main.rs.
See also:
Authentication
All/api/* routes require signed headers. The SDK handles this automatically.
Required Headers
| Header | Description |
|---|---|
x-public-key | Hex-encoded Ed25519 public key (32 bytes) |
x-signature | Hex-encoded Ed25519 signature (64 bytes) |
x-timestamp | Unix timestamp in seconds (5-minute validity window) |
Optional Headers
| Header | Description |
|---|---|
x-account-id | MemWalAccount object ID hint — speeds up account resolution when not cached |
x-delegate-key | Delegate private key (hex) — used by the default SDK for SEAL decrypt flows |
Signature Format
The signed message is:{timestamp}.{method}.{path}.{body_sha256}
The relayer verifies the Ed25519 signature, then resolves the owner by looking up the public key in onchain MemWalAccount.delegate_keys.
Public Routes
GET /health
Service health check. No authentication required.
Response:
POST /sponsor
Proxy to the SEAL/Walrus sidecar’s /sponsor endpoint for sponsored transactions. No authentication required.
POST /sponsor/execute
Proxy to the sidecar’s /sponsor/execute endpoint. No authentication required.
Protected Routes
POST /api/remember
Store text as an encrypted memory. The relayer handles embedding, SEAL encryption, Walrus upload, and vector indexing.
Request:
namespace defaults to "default" if omitted.
Response:
POST /api/recall
Search for memories matching a natural language query. Returns decrypted plaintext results.
Request:
limit defaults to 10. namespace defaults to "default".
Response:
POST /api/remember/manual
Register a client-encrypted payload. The client sends SEAL-encrypted data (base64) and a precomputed embedding vector. The relayer uploads the encrypted bytes to Walrus and stores the vector mapping.
Request:
POST /api/recall/manual
Search with a precomputed query vector. Returns blob IDs and distances only — the client handles downloading and decrypting.
Request:
POST /api/analyze
Extract facts from text using an LLM, then store each fact as a separate memory (embed, encrypt, upload, index).
Request:
POST /api/ask
Recall memories, inject them into an LLM prompt, and return an AI-generated answer with the context used.
Request:
limit defaults to 5. namespace defaults to "default".
Response:
POST /api/restore
Rebuild missing vector entries for one namespace. Queries onchain blobs by owner and namespace, downloads from Walrus, decrypts, re-embeds, and re-indexes only the entries missing from the local database.
Request:
limit defaults to 50.
Response: