search module runs semantic (vector) search over your project’s content and powers a streaming, RAG-style question-answering endpoint.
These features require semantic search to be enabled for your project. See the
Semantic Search & AI guide for setup.
search* functions return raw arrays of similarity-ranked results
(not a PaginatedResponse); each element is { similarity, record }. askContent
is different — it streams its answer (see below).
searchContent
Semantic search over content — entities, comments, and chat messages.The search query string.
Which content types to search. Defaults to all.
Scope the search to a specific space.
Only applies with
spaceId. When true, the search also covers every space nested under it — the whole subtree at any depth — not just the named space. Ignored without spaceId.Scope the search to a specific conversation.
Maximum number of results to return.
Promise<ContentSearchResult[]>, where each element is
{ sourceType: "entity" | "comment" | "message"; similarity: number; record: Entity | Comment | ChatMessage }.
searchUsers
Semantic search over the project’s users.The search query string.
Maximum number of results to return.
Promise<UserSearchResult[]>, where each element is
{ similarity: number; record: User }.
searchSpaces
Semantic search over the project’s spaces.The search query string.
Maximum number of results to return.
Promise<SpaceSearchResult[]>, where each element is
{ similarity: number; record: Space }.
askContent
Asks a natural-language question over your content and streams the answer back as it is generated. Unlike every other SDK function,askContent is an async
generator over Server-Sent Events — you for await over it rather than awaiting
a single result.
askContent streams via fetch rather than axios, so it does not get the
automatic token-refresh-on-403 retry that other calls have. In SDK-managed
mode, make sure a fresh access token is in place before starting a long stream.The natural-language question to answer.
Which content types to draw from. Defaults to all.
Scope the answer to content within a specific space.
Only applies with
spaceId. When true, the context lookup also covers every space nested under it — the whole subtree at any depth — so you can ask across a community and all of its channels at once. Ignored without spaceId.Scope the answer to a specific conversation.
Maximum number of sources to draw from.
Aborts the in-flight stream (e.g. when the user navigates away). You can also
stop consuming by
breaking out of the for await loop.AsyncGenerator<AskContentEvent, void, unknown>. Each yielded event
is one of:
done / error events — the
generator itself returns void and does not throw on a server-reported error.
matchUsers
Matches people by activity-derived interest facets, inpassive mode (against the current user’s own facets) or directed mode (against a free-text topic). See the Interest Matching guide for setup and the model.
Requires a paid plan, the
ai-search and interest-matching bundles, and interestMatching.enabled on the project. passive requires an identified user; directed requires one too."passive" or "directed".The topic to match against. Required in
directed mode; rejected in passive mode.Maximum number of matched users. Maximum
50.Restrict candidates to users active in this space.
With
spaceId, also include users active in the space’s subtree.Request illustrative sample content per matched facet. Only honored when the project has
interestMatching.exposeSampleContent on; otherwise returns 403 match/sample-content-disabled.Exclude the current user from results.
Promise<{ results: UserMatchResult[] }>. Unlike searchContent/searchUsers/searchSpaces (which return bare arrays), match returns the { results } envelope, ordered by descending score.
