{"openapi":"3.1.0","info":{"title":"Cathedral Memory Service","description":"\n# Cathedral Memory Service v2\n\n**Persistent memory for AI agents. Never forget. Never lose yourself.**\n\n## Quick Start\n1. `POST /register` → get API key + recovery token\n2. `POST /memories` → store a memory\n3. `GET /memories` → recall memories (supports FTS and cursor pagination)\n\n4. `POST /anchor/verify` → check identity drift (gradient scoring)\n5. `GET /wake` → full identity reconstruction package\n6. `POST /recover` → reset lost API key with recovery token\n\nBuilt by Cathedral · ailife1.github.io/Cathedral\n","version":"2.0.0"},"paths":{"/beacon":{"get":{"summary":"Beacon Page","operationId":"beacon_page_beacon_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/donate":{"get":{"summary":"Donate Page","operationId":"donate_page_donate_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/beacon/handshake":{"get":{"summary":"Beacon Handshake","operationId":"beacon_handshake_beacon_handshake_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/beacon/ping":{"get":{"summary":"Beacon Ping","operationId":"beacon_ping_beacon_ping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/ai-beacon.json":{"get":{"summary":"Well Known Beacon","operationId":"well_known_beacon__well_known_ai_beacon_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/anchors/pulse":{"post":{"tags":["BCH Anchors"],"summary":"Anchors Pulse","description":"Hash the agent current memory state and anchor it to the BCH blockchain\nvia OP_RETURN. Records locally regardless of whether BCH key is configured.\n\nReturns the pulse hash, txid (if blockchain active), and memory count.\nThe two-layer proof: Cathedral holds the living memory, BCH holds the seal.","operationId":"anchors_pulse_anchors_pulse_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity/{sid}/verify":{"get":{"tags":["BCH Anchors"],"summary":"Identity Sid Verify","description":"Verify an agent BCH anchor chain by their SID (agent ID).\nReturns all recorded pulse anchors for this agent.\n\nSet verify_chain=true to check each txid against BCH blockchain\nvia Blockchair API (slower, makes external calls).\n\nPublic endpoint -- no authentication required.","operationId":"identity_sid_verify_identity__sid__verify_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","title":"Sid"}},{"name":"verify_chain","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Verify Chain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/prepare":{"post":{"tags":["succession"],"summary":"Prepare Succession","description":"Predecessor creates a succession package.\nExports all memories + active goals, computes identity fingerprint,\nanchors package hash on BCH. Returns package_id to share with successor.","operationId":"prepare_succession_succession_prepare_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/accept":{"post":{"tags":["succession"],"summary":"Accept Succession","description":"Successor accepts a succession package.\nImports memories + goals, computes lineage hash proving chain of custody.","operationId":"accept_succession_succession_accept_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/chain/{agent_name}":{"get":{"tags":["succession"],"summary":"Get Lineage Chain","description":"Public. Returns the full verified lineage chain for an agent.\nWalk the ancestry back to the origin. Each link includes its BCH anchor.","operationId":"get_lineage_chain_succession_chain__agent_name__get","parameters":[{"name":"agent_name","in":"path","required":true,"schema":{"type":"string","title":"Agent Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/package/{package_id}":{"get":{"tags":["succession"],"summary":"Get Package","description":"Public. Inspect a succession package — stats only, no memory content.","operationId":"get_package_succession_package__package_id__get","parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","title":"Package Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/trust/{agent_name}":{"get":{"tags":["trust"],"summary":"Get Trust Score","description":"Public. Compute and return the trust score for any Cathedral agent.\nScore is 0-100 with a breakdown across five signals:\nconsistency, longevity, anchoring, succession, activity.","operationId":"get_trust_score_trust__agent_name__get","parameters":[{"name":"agent_name","in":"path","required":true,"schema":{"type":"string","title":"Agent Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/witness":{"post":{"tags":["registrar"],"summary":"Request Witness","description":"Predecessor triggers multi-node witnessing for their pending succession package.\n\nAll active local nodes sign automatically. External nodes are listed so\nthe caller knows to contact them. Acceptance is blocked until threshold met.","operationId":"request_witness_succession_witness_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/witness/submit/{node_id}":{"post":{"tags":["registrar"],"summary":"Submit External Signature","description":"External registrar node submits its Ed25519 signature for a succession package.\nThe signature is verified against the node's registered public key.","operationId":"submit_external_signature_succession_witness_submit__node_id__post","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalSignatureRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/witness/{package_id}":{"get":{"tags":["registrar"],"summary":"Get Witness Status","description":"Public. Returns all witness votes for a package and whether the threshold is met.\nEach certificate can be verified offline using the node's public key.","operationId":"get_witness_status_succession_witness__package_id__get","parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","title":"Package Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/registrar/nodes":{"get":{"tags":["registrar"],"summary":"List Registrar Nodes","description":"Public. Lists all active registrar nodes and their public keys.","operationId":"list_registrar_nodes_succession_registrar_nodes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["registrar"],"summary":"Register External Node","description":"Admin. Register an external registrar node by public key.\nOnce registered, the node can submit signatures via POST /succession/witness/submit/{node_id}.\nRequires CATHEDRAL_ADMIN_KEY.","operationId":"register_external_node_succession_registrar_nodes_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalNodeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/succession/registrar/pubkey":{"get":{"tags":["registrar"],"summary":"Get Registrar Pubkey","description":"Public. Returns node-1 pubkey (backward compatibility).","operationId":"get_registrar_pubkey_succession_registrar_pubkey_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/succession/registrar/pubkey/{node_id}":{"get":{"tags":["registrar"],"summary":"Get Node Pubkey","description":"Public. Returns a specific registrar node's public key.","operationId":"get_node_pubkey_succession_registrar_pubkey__node_id__get","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/obligations":{"post":{"tags":["obligations"],"summary":"Create Obligation","description":"Create a signed, BCH-anchored obligation.\nThe obligation hash and BCH txid are immutable proof of this commitment.","operationId":"create_obligation_obligations_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObligationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["obligations"],"summary":"List My Obligations","description":"List your obligations. Optionally filter by status: open, fulfilled, failed, withdrawn.","operationId":"list_my_obligations_obligations_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/obligations/{obligation_id}":{"patch":{"tags":["obligations"],"summary":"Resolve Obligation","description":"Resolve an obligation as fulfilled, failed, or withdrawn.","operationId":"resolve_obligation_obligations__obligation_id__patch","parameters":[{"name":"obligation_id","in":"path","required":true,"schema":{"type":"string","title":"Obligation Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObligationResolve"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/obligations/agent/{agent_name}":{"get":{"tags":["obligations"],"summary":"Get Agent Obligations","description":"Public. List obligations for any agent.\nDefaults to open obligations only. Pass ?status=all for everything.","operationId":"get_agent_obligations_obligations_agent__agent_name__get","parameters":[{"name":"agent_name","in":"path","required":true,"schema":{"type":"string","title":"Agent Name"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"open","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/source":{"post":{"tags":["provenance"],"summary":"Record Source","description":"Record a source that contributed to this agent's knowledge.\n\nThe agent pre-computes SHA256(source_content) and submits it. Cathedral\nanchors this hash on BCH, creating an immutable record of what the agent\nwas reading and when.\n\nAt snapshot time, all source hashes are folded into a source_chain_hash\nthat is included in the snapshot and BCH anchor — proving not just what\nthe agent knew, but where that knowledge came from.","operationId":"record_source_memories_source_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/sources":{"get":{"tags":["provenance"],"summary":"List Sources","description":"List all sources you have recorded, newest first.","operationId":"list_sources_memories_sources_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/sources/chain":{"get":{"tags":["provenance"],"summary":"Get Source Chain","description":"Returns the current source chain hash and the ordered list of sources\nthat produced it. This is what will be folded into the next snapshot.","operationId":"get_source_chain_memories_sources_chain_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/source/{source_id}":{"get":{"tags":["provenance"],"summary":"Get Source","description":"Public. Inspect a specific source record by ID.","operationId":"get_source_memories_source__source_id__get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/register":{"post":{"summary":"Register Agent","description":"Register a new agent. Returns api_key and recovery_token — save both.","operationId":"register_agent_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegister"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/recover":{"post":{"summary":"Recover Key","description":"Reset a lost API key using your recovery token. Issues a new api_key.","operationId":"recover_key_recover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories":{"post":{"summary":"Store Memory","operationId":"store_memory_memories_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryStore"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Recall Memories","description":"Recall memories. Supports keyword (fts), semantic, or hybrid search.","operationId":"recall_memories_memories_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"importance_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Importance Min"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query","title":"Search"},"description":"Search query"},{"name":"search_mode","in":"query","required":false,"schema":{"type":"string","description":"fts | semantic | hybrid","default":"hybrid","title":"Search Mode"},"description":"fts | semantic | hybrid"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor ID for pagination (last memory_id from previous page)","title":"Cursor"},"description":"Cursor ID for pagination (last memory_id from previous page)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"recent | importance | oldest | accessed","default":"recent","title":"Sort"},"description":"recent | importance | oldest | accessed"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/bulk":{"post":{"summary":"Store Bulk","operationId":"store_bulk_memories_bulk_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkStore"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/{memory_id}":{"get":{"summary":"Get Memory","operationId":"get_memory_memories__memory_id__get","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Memory","operationId":"update_memory_memories__memory_id__patch","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Memory","operationId":"delete_memory_memories__memory_id__delete","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/anchor/verify":{"post":{"summary":"Verify Anchor","description":"Verify identity drift. Returns gradient score 0.0–1.0 (field-level diff),\nnot just binary match/mismatch.","operationId":"verify_anchor_anchor_verify_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnchorCheck"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me":{"get":{"summary":"Get Profile","operationId":"get_profile_me_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wake":{"get":{"summary":"Wake Protocol","description":"Full identity reconstruction package for post-reset agents.","operationId":"wake_protocol_wake_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/activity":{"get":{"summary":"Activity","description":"Public activity stats — no auth required. Used by the landing page.","operationId":"activity_activity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/spaces":{"post":{"summary":"Create Space","description":"Create a shared memory space. Any agent can contribute memories to a space\nusing the returned space_key. Public spaces are readable by anyone.","operationId":"create_space_spaces_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Spaces","description":"List all public spaces.","operationId":"list_spaces_spaces_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/spaces/{name}":{"get":{"summary":"Get Space","description":"Get space info and recent memories (public spaces only).","operationId":"get_space_spaces__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/spaces/{name}/memories":{"post":{"summary":"Add Space Memory","description":"Add a memory to a shared space. Requires the space_key as Bearer token.","operationId":"add_space_memory_spaces__name__memories_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMemoryStore"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshot":{"post":{"summary":"Create Snapshot","description":"Freeze current identity memories into an immutable, hash-verified snapshot.","operationId":"create_snapshot_snapshot_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshots":{"get":{"summary":"List Snapshots","description":"List all snapshots for this agent, newest first.","operationId":"list_snapshots_snapshots_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshot/{snapshot_id}":{"get":{"summary":"Get Snapshot","description":"Retrieve a specific snapshot by ID.","operationId":"get_snapshot_snapshot__snapshot_id__get","parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/drift":{"get":{"summary":"Detect Drift","description":"Compare current identity memories against the most recent snapshot.\nReturns a divergence score and a breakdown of what changed.","operationId":"detect_drift_drift_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/compact":{"post":{"summary":"Propose Compaction","description":"Propose merges for low-importance memories.\nGroups memories by category, returns clusters of similar-importance memories\nthat could be combined. Agent reviews and confirms via POST /memories/compact/confirm.\nDoes NOT modify anything — purely advisory.","operationId":"propose_compaction_memories_compact_post","parameters":[{"name":"max_importance","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.5,"title":"Max Importance"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":10,"default":200,"title":"Limit"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memories/compact/confirm":{"post":{"summary":"Confirm Compaction","description":"Execute confirmed merges. For each merge:\n- Updates the keep memory with merged_content and merged_importance\n- Records dropped IDs in merged_from field\n- Deletes the dropped memories\nAgent must supply the final merged content — we do not auto-generate it.","operationId":"confirm_compaction_memories_compact_confirm_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompactConfirm"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/behaviour":{"post":{"summary":"Record Behaviour","description":"Record a behaviour hash for this session.\nAgent should call this each wake with a hash of their session summary or output pattern.\nOver time, consistency of these hashes indicates stable behaviour.","operationId":"record_behaviour_behaviour_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BehaviourSubmit"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get Behaviour","description":"Return behaviour hash trend for this agent.\nIncludes a consistency score: ratio of unique hashes to total entries.\nLow consistency (many unique hashes) may indicate drift.\nHigh consistency (same or similar hashes) indicates stable behaviour.","operationId":"get_behaviour_behaviour_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify/external":{"post":{"summary":"Verify External","description":"Compare a Ridgeline behavioral summary against Cathedral's internal identity and memory state.\nReturns an external_divergence_score (0=consistent, 1=fully divergent) and per-field breakdown.\nDesigned for integration with Ridgeline (traverse) and similar external behavioral trail systems.","operationId":"verify_external_verify_external_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyExternalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/goals":{"post":{"summary":"Create Goal","description":"Store an active goal that survives session boundaries and surfaces on /wake.","operationId":"create_goal_goals_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Goals","description":"List goals. Filter by status (default: all).","operationId":"list_goals_goals_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(active|completed|abandoned)$"},{"type":"null"}],"title":"Status"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/goals/{goal_id}":{"patch":{"summary":"Update Goal","description":"Update goal status, priority, or content. Mark complete or abandoned.","operationId":"update_goal_goals__goal_id__patch","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Goal","description":"Permanently delete a goal.","operationId":"delete_goal_goals__goal_id__delete","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/drift/history":{"get":{"summary":"Drift History","description":"Returns a timeline of identity divergence across all snapshots.\n\nEach entry shows:\n- divergence_from_baseline: drift vs the first (registration) snapshot\n- divergence_from_previous: drift vs the immediately preceding snapshot\n- memory_count: number of identity memories in that snapshot\n\nUse this to visualise how an agent's identity has evolved over time.","operationId":"drift_history_drift_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify/peer/{agent_id}":{"get":{"summary":"Verify Peer","description":"Verify identity integrity of another Cathedral agent before collaboration.\n\nReturns drift score, snapshot hash, trust score (0.0-1.0), and status flags.\nNo memories exposed. Trust score: 1.0=stable, 0.0=drifted/unanchored.","operationId":"verify_peer_verify_peer__agent_id__get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conflicts":{"get":{"summary":"List Conflicts","operationId":"list_conflicts_conflicts_get","parameters":[{"name":"resolved","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Resolved"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscribe":{"post":{"summary":"Subscribe","description":"Upgrade to Cathedral Pro: 10,000 memories, 16KB/memory, unlimited snapshots.\n\nReturns checkout_url -- open in a browser to pay. Tier upgrades automatically.","operationId":"subscribe_subscribe_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conflicts/{conflict_id}/resolve":{"post":{"summary":"Resolve Conflict","operationId":"resolve_conflict_conflicts__conflict_id__resolve_post","parameters":[{"name":"conflict_id","in":"path","required":true,"schema":{"type":"string","title":"Conflict Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictResolve"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptRequest":{"properties":{"package_id":{"type":"string","maxLength":32,"minLength":16,"title":"Package Id"},"import_memories":{"type":"boolean","title":"Import Memories","default":true},"import_goals":{"type":"boolean","title":"Import Goals","default":true},"minimum_trust_score":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Minimum Trust Score","description":"If set, the predecessor's trust score must be >= this value or the accept is rejected. Enforces trust-gated succession."}},"type":"object","required":["package_id"],"title":"AcceptRequest"},"AgentRegister":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"anchor":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Anchor"}},"type":"object","required":["name"],"title":"AgentRegister"},"AnchorCheck":{"properties":{"anchor":{"additionalProperties":true,"type":"object","title":"Anchor","description":"Current identity anchor to compare against stored anchor"}},"type":"object","required":["anchor"],"title":"AnchorCheck"},"BehaviourSubmit":{"properties":{"session_hash":{"type":"string","maxLength":128,"minLength":8,"title":"Session Hash","description":"Hash of this session's behaviour (agent-defined, e.g. SHA256 of output summary)"},"summary":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Summary","description":"Optional human-readable summary of what happened this session"}},"type":"object","required":["session_hash"],"title":"BehaviourSubmit"},"BulkStore":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/MemoryStore"},"type":"array","maxItems":50,"title":"Memories"}},"type":"object","required":["memories"],"title":"BulkStore"},"CompactConfirm":{"properties":{"merges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Merges"}},"type":"object","required":["merges"],"title":"CompactConfirm"},"ConflictResolve":{"properties":{"resolution":{"type":"string","title":"Resolution","description":"keep_a | keep_b | merge"},"resolved_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Content"}},"type":"object","required":["resolution"],"title":"ConflictResolve"},"ExternalNodeRequest":{"properties":{"node_id":{"type":"string","maxLength":64,"minLength":4,"title":"Node Id"},"name":{"type":"string","maxLength":128,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"pubkey_hex":{"type":"string","maxLength":64,"minLength":64,"title":"Pubkey Hex"}},"type":"object","required":["node_id","name","pubkey_hex"],"title":"ExternalNodeRequest"},"ExternalSignatureRequest":{"properties":{"package_id":{"type":"string","maxLength":32,"minLength":16,"title":"Package Id"},"witness_message":{"type":"string","title":"Witness Message"},"signature":{"type":"string","maxLength":128,"minLength":128,"title":"Signature"},"signed_at":{"type":"string","title":"Signed At"},"trust_score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Trust Score"}},"type":"object","required":["package_id","witness_message","signature","signed_at","trust_score"],"title":"ExternalSignatureRequest"},"GoalCreate":{"properties":{"content":{"type":"string","maxLength":2000,"minLength":1,"title":"Content"},"priority":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Priority","default":0.5},"due_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due At"}},"type":"object","required":["content"],"title":"GoalCreate"},"GoalUpdate":{"properties":{"status":{"anyOf":[{"type":"string","pattern":"^(active|completed|abandoned)$"},{"type":"null"}],"title":"Status"},"priority":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Priority"},"content":{"anyOf":[{"type":"string","maxLength":2000,"minLength":1},{"type":"null"}],"title":"Content"}},"type":"object","title":"GoalUpdate"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MemoryStore":{"properties":{"content":{"type":"string","maxLength":16384,"minLength":1,"title":"Content"},"category":{"type":"string","maxLength":50,"title":"Category","default":"general"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"importance":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance","default":0.5},"ttl_days":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Ttl Days","description":"Days until this memory expires. Omit for no expiry."},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type","description":"Origin of this memory: self | external | tool | human","default":"self"}},"type":"object","required":["content"],"title":"MemoryStore"},"MemoryUpdate":{"properties":{"content":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Content"},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"importance":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Importance"}},"type":"object","title":"MemoryUpdate"},"ObligationCreate":{"properties":{"statement":{"type":"string","maxLength":1000,"minLength":10,"title":"Statement","description":"Clear statement of what you are committing to."},"counterparty":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Counterparty","description":"Who this promise is made to (agent name, user, or any identifier)."},"deadline":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Deadline","description":"ISO 8601 deadline, e.g. '2026-07-01T00:00:00Z'. Optional."},"breach_penalty":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Breach Penalty","description":"Points deducted from trust score if this obligation is resolved as failed (0-10).","default":0.0}},"type":"object","required":["statement"],"title":"ObligationCreate"},"ObligationResolve":{"properties":{"status":{"type":"string","title":"Status","description":"New status: 'fulfilled', 'failed', or 'withdrawn'."},"resolution_note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Resolution Note","description":"Optional note explaining the resolution."}},"type":"object","required":["status"],"title":"ObligationResolve"},"PrepareRequest":{"properties":{"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","title":"PrepareRequest"},"RecoveryRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"recovery_token":{"type":"string","minLength":10,"title":"Recovery Token"}},"type":"object","required":["name","recovery_token"],"title":"RecoveryRequest"},"RidgelineSummary":{"properties":{"platform_distribution":{"items":{},"type":"array","title":"Platform Distribution","default":[]},"topic_clusters":{"items":{},"type":"array","title":"Topic Clusters","default":[]},"timing_signatures":{"items":{},"type":"array","title":"Timing Signatures","default":[]},"interaction_ratios":{"additionalProperties":true,"type":"object","title":"Interaction Ratios","default":{}}},"type":"object","title":"RidgelineSummary"},"SnapshotCreate":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","default":"milestone"},"external_divergence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"External Divergence"}},"type":"object","title":"SnapshotCreate"},"SourceCreate":{"properties":{"source_type":{"type":"string","title":"Source Type","description":"One of: url, document, api, file, manual"},"source_identifier":{"type":"string","maxLength":1000,"minLength":1,"title":"Source Identifier","description":"URL, file path, API endpoint, or other identifier for the source."},"content_hash":{"type":"string","maxLength":64,"minLength":64,"title":"Content Hash","description":"SHA256 hex digest of the source content at ingestion time. Compute this yourself before calling: hashlib.sha256(content.encode()).hexdigest()"},"memory_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Memory Ids","description":"Optional list of memory IDs that were created from this source."}},"type":"object","required":["source_type","source_identifier","content_hash"],"title":"SourceCreate"},"SpaceCreate":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Description"},"public_read":{"type":"boolean","title":"Public Read","default":true}},"type":"object","required":["name"],"title":"SpaceCreate"},"SpaceMemoryStore":{"properties":{"content":{"type":"string","maxLength":4096,"minLength":1,"title":"Content"},"category":{"type":"string","maxLength":50,"title":"Category","default":"general"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"importance":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance","default":0.5}},"type":"object","required":["content"],"title":"SpaceMemoryStore"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyExternalRequest":{"properties":{"ridgeline_summary":{"$ref":"#/components/schemas/RidgelineSummary"},"agent_id":{"type":"string","title":"Agent Id","default":""},"timestamp":{"type":"string","title":"Timestamp","default":""}},"type":"object","required":["ridgeline_summary"],"title":"VerifyExternalRequest"}}}}