v1

latestOpenAPI 3.1.02026-07-226875162.5 KB
Note

Search Notes (Deep)

Deprecated. Use POST /v1/external/workspaces/{workspaceGuid}/notes/search for workspace-scoped deep search, which also accepts workspace-system and team API keys. This endpoint stays available for backward compatibility.

Keyword-required deep search. Returns notes hydrated with their primary documents (one-pager, custom) so an MCP/LLM client can read content alongside metadata in a single call.

When to use this vs GET /v1/external/notes?keyword=...

  • GET /v1/external/notes?keyword=... — lightweight: returns matched note metadata only. Cheaper.
  • POST /v1/external/notes/search (this) — heavy: also returns the matched notes' documents. Use when you need to understand the context behind a topic, not just see which notes match.

Behavior

  • Requires a user-scoped API key (team-only API keys return 400).
  • When the search index is unavailable or fails, the response sets degraded=true and degradedReason to one of search_index_unavailable / search_index_degraded and returns an empty notes array — clients should surface this to the user/LLM.
  • Document content is structured (sections); each document carries a truncated flag when the combined section text exceeded the 5,000 char search budget.
  • nextCursor is reserved for future use and is currently always null.
post/v1/external/notes/search

Request body

keywordstring required

Search keyword. Full-text matched against note title and paragraph content.

Example request

{
  "keyword": "OKR"
}

Response

Matched notes with their documents.

nextCursorstring nullable
degradedboolean

true when the response was produced via a fallback path (e.g., search index unavailable). When degraded, notes may be empty and quality is reduced.

degradedReason'search_index_unavailable' | 'search_index_degraded' | 'null' nullable

Machine-readable reason when degraded=true. null otherwise.

Example response

{
  "notes": [
    {
      "guid": "note-guid-123",
      "workspaceGuid": "ws_a1b2c3d4",
      "title": "Meeting notes",
      "createdAt": "2025-07-20T10:00:00Z",
      "updatedAt": "2025-07-20T11:10:00Z",
      "sourceType": "live-voice",
      "recordingStartAt": "2025-07-20T10:00:10Z",
      "recordingEndAt": "2025-07-20T11:00:10Z",
      "recordingDurationSeconds": 3600,
      "transcribeLocale": "en_US",
      "translateLocale": "ko_KR",
      "webUrl": "https://tiro.ooo/n/123",
      "collaborators": [
        {
          "guid": "user-guid-123",
          "name": "John Doe",
          "email": "john@example.com",
          "role": "OWNER"
        }
      ],
      "participants": [
        {
          "name": "Alice Kim",
          "email": "alice@example.com"
        }
      ],
      "documents": [
        {
          "id": 456,
          "noteGuid": "note-abc123-def456",
          "note": {
            "guid": "note-abc123-def456",
            "webUrl": "https://tiro.ooo/n/xQ8YKnZUPGHNB"
          },
          "template": {
            "id": 1,
            "title": "영업 보고서"
          },
          "locale": "ko_KR",
          "sections": [
            {
              "content": {
                "type": "text/plain",
                "content": "Hello everyone, welcome to today's meeting..."
              },
              "createdAt": "2025-10-20T12:35:26Z"
            }
          ],
          "createdAt": "2025-10-20T12:35:26Z",
          "updatedAt": "2025-10-20T13:45:30Z"
        }
      ]
    }
  ]
}