Skip to main content
POST
Search Memory

Body

application/json

Request body for POST /api/v1/memory/search.

Callers identify the memory owner via user_id XOR agent_id — exactly one must be set. Internally the manager + compile_filters keep using owner_id / owner_type (the storage tables' columns); those are exposed as derived properties so the rename only affects the wire contract, not the internal recall plumbing.

query
string
required
Minimum string length: 1
user_id
string | null
Minimum string length: 1
agent_id
string | null
Minimum string length: 1
app_id
string
default:default
project_id
string
default:default
method
enum<string>
default:hybrid

Public method enum. RRF / LR / vector_anchored are hidden under HYBRID.

Available options:
keyword,
vector,
hybrid,
agentic
top_k
integer
default:-1
radius
number | null
Required range: 0 <= x <= 1
min_score
number | null
Required range: 0 <= x <= 1
include_profile
boolean
default:false
enable_llm_rerank
boolean
default:false

Opt-in LLM rerank pass for HYBRID. Applies to agent_case and agent_skill fusion only; the episode hierarchy path has built-in fact eviction and ignores this flag. Ignored by keyword / vector / agentic.

filters
FilterNode · object | null

One Filters DSL node.

Recursive AND / OR arrays mix with arbitrary scalar fields at the same level. Pydantic only checks the combinators; field-level safety is enforced when compiling the node to a LanceDB where string in :mod:everos.memory.search.filters.

Response

Successful Response

Top-level response envelope.

request_id
string
required
data
SearchData · object
required

Body of response.data.

All five arrays are always present so client code can iterate without branching on owner_type. Routes not applicable to the request's owner type stay as []. unprocessed_messages is filled only when filters.session_id is present as a top-level eq scalar — in-flight buffer rows are scope-tagged but unattributed (no user_id), so session is the only meaningful query dimension.