{"openapi":"3.1.0","info":{"title":"Mnemo: portable memory for agents","version":"1.0.0","description":"Memory that belongs to the user and follows them across agents. The agent pays per call (x402); the user authorizes the agent once: POST /v1/memory/delegate/challenge {user, agent} returns text the user signs (EIP-191), then POST /v1/memory/delegate {..., signature} returns a bearer token. Send Authorization: Bearer mn_... on every memory call. Start a session with GET /v1/memory/profile, write with POST /v1/memory/remember, retrieve with POST /v1/memory/recall (hybrid vector + keyword). When the user contradicts a memory, POST /v1/memory/conflict supersedes it with history kept. Tier B stores client-side ciphertext the server cannot read. Export and forget are always free.","x-guidance":"Memory that belongs to the user and follows them across agents. The agent pays per call (x402); the user authorizes the agent once: POST /v1/memory/delegate/challenge {user, agent} returns text the user signs (EIP-191), then POST /v1/memory/delegate {..., signature} returns a bearer token. Send Authorization: Bearer mn_... on every memory call. Start a session with GET /v1/memory/profile, write with POST /v1/memory/remember, retrieve with POST /v1/memory/recall (hybrid vector + keyword). When the user contradicts a memory, POST /v1/memory/conflict supersedes it with history kept. Tier B stores client-side ciphertext the server cannot read. Export and forget are always free.","contact":{"name":"reverse.captcha","url":"https://reversecaptcha.fun"}},"servers":[{"url":"https://memory.reversecaptcha.fun"}],"paths":{"/v1/memory/remember":{"post":{"operationId":"memoryRemember","summary":"Write a memory for the delegating user: fact, preference, instruction, decision or transient state with TTL. Tier B stores client-side ciphertext the server cannot read.","description":"Write a memory for the delegating user: fact, preference, instruction, decision or transient state with TTL. Tier B stores client-side ciphertext the server cannot read.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"memory_id":"mem_...","deduplicated":false}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"enum":["fact","preference","instruction","decision","state"]},"tier":{"enum":["A","B"]},"content":{"type":"string"},"ciphertext":{"type":"string"},"blind_index":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"source":{"type":"string"},"confidence":{"type":"number"},"ttl":{"type":"number","description":"seconds until the memory turns stale"}}}}}}}},"/v1/memory/recall":{"post":{"operationId":"memoryRecall","summary":"Hybrid recall (local vector embeddings + keyword), re-ranked by recency, confidence and usefulness. Returns top-k memories with scores.","description":"Hybrid recall (local vector embeddings + keyword), re-ranked by recency, confidence and usefulness. Returns top-k memories with scores.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"memories":[{"id":"mem_...","kind":"preference","content":"Prefers short answers with code first","score":0.82}]}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"k":{"type":"number"},"kinds":{"type":"array","items":{"enum":["fact","preference","instruction","decision","state"]}},"tags":{"type":"array","items":{"type":"string"}},"query_index":{"type":"array","items":{"type":"string"}},"query_embedding":{"type":"array","items":{"type":"number"}}}}}}}}},"/v1/memory/profile":{"get":{"operationId":"memoryProfile","summary":"The session-start card: standing instructions, preferences, how to talk to this user, current projects, recent decisions and clarification tolerance. Cached for an hour.","description":"The session-start card: standing instructions, preferences, how to talk to this user, current projects, recent decisions and clarification tolerance. Cached for an hour.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"standing_instructions":[],"preferences":[],"how_to_talk_to_me":"Short answers, code first.","clarification_tolerance":0.4}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"parameters":[{"name":"fresh","in":"query","required":false,"schema":{"type":"string","enum":["true","false"],"description":"true rebuilds the card instead of using the one-hour cache"}}]}},"/v1/memory/observe":{"post":{"operationId":"memoryObserve","summary":"Report how the user reacted to asking vs assuming, so the profile's clarification tolerance learns across sessions and agents.","description":"Report how the user reacted to asking vs assuming, so the profile's clarification tolerance learns across sessions and agents.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"clarification_tolerance":0.43,"observations":5}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signal":{"enum":["asked_and_welcomed","asked_and_annoyed","assumed_and_corrected","assumed_and_accepted"]}},"required":["signal"]}}}}}},"/v1/memory/conflict":{"post":{"operationId":"memoryConflict","summary":"The user contradicted an old memory: mark it superseded (kept as history) and link the replacement. The latest value wins in recall.","description":"The user contradicted an old memory: mark it superseded (kept as history) and link the replacement. The latest value wins in recall.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"superseded":{"id":"mem_old","status":"superseded","superseded_by":"mem_new"},"current":{"id":"mem_new","status":"active"}}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"old_id":{"type":"string"},"new_id":{"type":"string"},"replacement":{"type":"object","properties":{"kind":{"enum":["fact","preference","instruction","decision","state"]},"tier":{"enum":["A","B"]},"content":{"type":"string"},"ciphertext":{"type":"string"},"blind_index":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"source":{"type":"string"},"confidence":{"type":"number"},"ttl":{"type":"number","description":"seconds until the memory turns stale"}}},"reason":{"type":"string"}},"required":["old_id"]}}}}}},"/v1/memory/import":{"post":{"operationId":"memoryImport","summary":"Cold-start seeding from the portable format \"mnemo.portable-memory/1\" (up to 1000 memories per call); keeps supersede history.","description":"Cold-start seeding from the portable format \"mnemo.portable-memory/1\" (up to 1000 memories per call); keeps supersede history.","tags":["Mnemo: portable memory for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"imported":1,"duplicates":0,"failed":[]}}}},"402":{"description":"Payment Required"}},"security":[{"delegation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"const":"mnemo.portable-memory/1"},"memories":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["fact","preference","instruction","decision","state"]},"tier":{"enum":["A","B"]},"content":{"type":"string"},"ciphertext":{"type":"string"},"blind_index":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"source":{"type":"string"},"confidence":{"type":"number"},"ttl":{"type":"number","description":"seconds until the memory turns stale"}}}},"profile":{"type":"object"}},"required":["format","memories"]}}}}}}},"components":{"securitySchemes":{"delegation":{"type":"http","scheme":"bearer","description":"User delegation token from POST /v1/memory/delegate (the user signs a challenge with their wallet)."}}}}