Skip to main content

Overview

search_notes is the deep tier of note discovery. It takes a required keyword and returns matching notes hydrated with their primary documents (one-pager, custom). Use this when the LLM needs to understand the context behind a topic — its decisions, action items, or conclusions — not just see which notes match. For lightweight metadata-only listing (e.g., “which notes are in folder X”), use list_notes instead. Primary Use Cases:
  • “What did the team decide about OKR Q2?” — search by topic, read documents inline.
  • “Where is the source note for this decision?” — keyword finds the note, documents give the context.
  • “Show me everything we wrote about 네이버” — Korean keyword search with content.
Key Features:
  • Keyword required; results ordered by full-text relevance with createdAt desc as tiebreaker.
  • Each matched note carries its primary documents inline (one-pager, custom).
  • HTML stripped from document content; documents larger than 5,000 chars are truncated and flagged.
  • Graceful degradation when the search index is unavailable.
A workspace-scoped API key narrows the results. A workspace-scoped key searches only notes in folders shared with all members, so a note in a private folder drops out of the results even when your keyword matches it. Use a user-scoped key if you need to search notes in private folders too (What notes a system key reads).
Heavier than list_notes. Each result includes document content (~1,500 tokens per note). Default page size is 50, max 200. If you only need metadata, use list_notes.

Parameters

keyword (required)

The search term. Tokenized server-side; Korean text is morphologically analyzed (e.g., 네이버[네, 버]). Empty or whitespace-only keywords return 400. Keyword search accepts both user-scoped and workspace-scoped API keys. Omit workspaceGuid to search across every workspace you can access — a workspace-scoped key automatically searches its own workspace. Pass an explicit workspaceGuid (see Parameters) to scope the search to a specific workspace.

filter.folderId (optional)

Same semantics as list_notes — recursive folder scope, authorized server-side.

pagination (optional)

{ cursor, size }. Default size: 50, max 200. The cap reflects the higher per-result cost (each note carries its documents).

Response Format

Success Response

Field Descriptions:
Don’t discriminate on templateTitle. It’s a display label, not an enum. For boolean checks (“is this a one-pager?”) use templateId against a known managed-template id, or surface both fields and let your UI choose by label.

Degraded Response

When the search index is unavailable, the response sets degraded=true and returns an empty notes array:
degradedReason is one of:
  • search_index_unavailable — the search index is disabled in this environment.
  • search_index_degraded — the search index threw an error mid-query.
Surface this to the LLM/user so retries can be deferred or the result interpreted appropriately.

Usage Examples

Request:
Returns the 10 most relevant notes mentioning OKR, each with its primary documents inline.

Example 2: Folder-scoped Korean keyword

Request:
Searches 네이버 only inside folder 455765 (and descendants). Korean morphological analysis runs server-side. Request:

Best Practices

Use list_notes first to find which notes match. If the LLM still needs document content to answer, switch to search_notes for the same keyword. This is the cheapest progressive-disclosure path.
A folder-scoped search is faster and returns better-ranked results because the relevance space is smaller. Pair with list_notes(filter.folderId) to find folder candidates first.
The deep-search endpoint currently emits nextCursor: null. If 30 results aren’t enough, refine the keyword (more specific) or scope by folderId/dateRange instead of paginating.
A degraded=true response is honest — the search index couldn’t run. Don’t treat the empty notes array as “no matches”; instead, surface the degradation to the user/LLM so retries can be timed appropriately.

Common Errors

Empty keyword

Token Usage

Per Note (with documents): ~1,500 tokens average. Truncated documents cap at ~1,500 tokens regardless of source size.
Compared to get_note_transcript (~3,000–5,000 tokens per hour of meeting), search_notes returns curated documents that are typically 10× more compact and cover the same key decisions. Reach for transcripts only when you need exact spoken words.