Skip to main content

Documentation Index

Fetch the complete documentation index at: https://api-docs.tiro.ooo/llms.txt

Use this file to discover all available pages before exploring further.

Overview

get_note fetches detailed metadata for a specific note and optionally includes summary, transcript, and/or generated documents in a single parallel call. Use the include parameter to request additional content; all requested resources are fetched concurrently, so one failure does not block the rest of the response. This is the consolidated content fetcher that replaced the removed list_note_summaries, get_note_summary, list_note_documents, and get_note_document tools as of 2026-05-06. Primary Use Cases:
  • Fetch metadata only when you just need note basics (participants, dates, duration).
  • Include summary to get the AI-generated summary’s full content.
  • Include transcript to get the full conversation text (timestamped paragraphs joined as one string).
  • Include documents to retrieve every generated document on the note (one-pager, custom, etc.) with full content inline.
Key Features:
  • Parallel fetch using Promise.allSettled — if one resource fails, others still return.
  • include is an optional array enum: ["summary"], ["transcript"], ["documents"], or any combination.
  • The documents option returns full content for every document on the note (unlike search_notes which caps at 5KB).
  • Empty/omitted include returns metadata only.
Note: get_note returns full document content by design — heavier than search_notes which caps at 5KB per document. For a content preview, use search_notes instead.

Parameters

ParameterTypeRequiredDescription
noteGuidstringYesUnique note identifier — typically from list_notes or search_notes.
includearrayOptionalArray of content options: "summary", "transcript", "documents". All are optional and additive. Omit or pass empty array for metadata only.

noteGuid (required)

The unique identifier of the note. Example:
{
  "noteGuid": "abc-123-def"
}

include (optional)

Array of content types to fetch in parallel. Valid options:
  • "summary" — Fetch the note’s first available AI-generated summary (full content).
  • "transcript" — Fetch the full conversation transcript (paragraphs joined with \n\n).
  • "documents" — Fetch all generated documents on the note (one-pager, custom, etc.) with complete content.
Examples:
// Metadata only
{}

// With summary
{ "include": ["summary"] }

// With transcript and documents
{ "include": ["transcript", "documents"] }

// All three
{ "include": ["summary", "transcript", "documents"] }

Response Format

Success Response

{
  "noteGuid": "abc-123-def",
  "guid": "abc-123-def",
  "title": "Q2 OKR Planning",
  "webUrl": "https://platform.tiro.ooo/notes/abc-123-def",
  "participants": [
    { "name": "Alice Kim", "email": "alice@example.com" },
    { "name": "Bob Park", "email": null }
  ],
  "createdAt": "2026-04-15T10:00:00Z",
  "updatedAt": "2026-04-15T11:30:00Z",
  "recordingDurationSeconds": 3625,
  "sourceType": "live-voice",
  "summary": {
    "content": "## Key Decisions\n- Q2 roadmap prioritizes...\n## Action Items\n- Alice: finalize spec by...",
    "format": "MARKDOWN",
    "summaryId": "summary-id-123"
  },
  "transcript": "[10:00:05] Alice: Let's start with Q2 planning.\n[10:00:18] Bob: Sure, here's what...",
  "documents": [
    {
      "documentId": 42,
      "templateId": 1,
      "templateTitle": "One Pager",
      "locale": "en",
      "sections": [
        {
          "content": "## OKR Goals\nGoal 1: ...",
          "format": "MARKDOWN"
        }
      ],
      "createdAt": "2026-04-15T11:30:00Z"
    }
  ]
}
Field Descriptions:
FieldTypeDescription
noteGuid / guidstringNote identifier (both fields present for backward compatibility).
titlestringNote title.
webUrlstringDirect link to the note in the Tiro web app.
createdAtstringISO 8601 creation timestamp.
updatedAtstringISO 8601 last-update timestamp.
recordingDurationSecondsnumberRecording length in seconds.
sourceTypestringOne of live-voice, recording, text, video, webpage, offline-mode, onboarding.
participants[]array{ name, email } per participant. Either may be null.
summary (when included)object{ content, format, summaryId } if a summary exists, or null if none.
summary.contentstringSummary text (HTML-stripped, markdown-friendly).
summary.formatstringMARKDOWN or PLAIN_TEXT.
summary.summaryIdstringIdentifier of the summary.
transcript (when included)stringFull transcript with [HH:MM:SS] prefixed lines, joined with \n\n. null if no transcript available.
documents (when included)arrayArray of document objects, or null if none. Empty array [] when include: ["documents"] is requested but the note has no documents.
documents[].documentIdnumberStable document identifier.
documents[].templateIdnumberNumeric template id (use this for discrimination, not templateTitle).
documents[].templateTitlestringDisplay label (locale-sensitive, user-editable for custom templates).
documents[].localestringLocale of the document (e.g., "en", "ko").
documents[].sections[]arrayArray of { content, format } sections.
documents[].sections[].contentstringSection text (HTML-stripped).
documents[].sections[].formatstringContent format (MARKDOWN, PLAIN_TEXT, etc.).
documents[].createdAtstringISO 8601 document creation timestamp.
When a requested resource is not available (e.g., no summary exists), the field is set to null rather than omitted. This allows callers to distinguish “not included in request” from “included but unavailable”.

Usage Examples

Example 1: Metadata only

Request:
{
  "noteGuid": "abc-123-def"
}
Response:
{
  "noteGuid": "abc-123-def",
  "title": "Q2 Planning",
  "participants": [{ "name": "Alice Kim", "email": "alice@example.com" }],
  "createdAt": "2026-04-15T10:00:00Z",
  "recordingDurationSeconds": 3625,
  "sourceType": "live-voice"
}

Example 2: With summary only

Request:
{
  "noteGuid": "abc-123-def",
  "include": ["summary"]
}
Response:
{
  "noteGuid": "abc-123-def",
  "title": "Q2 Planning",
  "participants": [{ "name": "Alice Kim", "email": "alice@example.com" }],
  "createdAt": "2026-04-15T10:00:00Z",
  "recordingDurationSeconds": 3625,
  "sourceType": "live-voice",
  "summary": {
    "content": "## Key Decisions\n- OKR prioritizes feature X...\n## Action Items\n- Alice: finalize spec",
    "format": "MARKDOWN",
    "summaryId": "summary-id-123"
  }
}

Example 3: With transcript and documents

Request:
{
  "noteGuid": "abc-123-def",
  "include": ["transcript", "documents"]
}
Response:
{
  "noteGuid": "abc-123-def",
  "title": "Q2 Planning",
  "participants": [{ "name": "Alice Kim", "email": "alice@example.com" }],
  "createdAt": "2026-04-15T10:00:00Z",
  "recordingDurationSeconds": 3625,
  "sourceType": "live-voice",
  "transcript": "[10:00:05] Alice: Let's start with Q2 planning...\n[10:00:18] Bob: Sure...",
  "documents": [
    {
      "documentId": 42,
      "templateId": 1,
      "templateTitle": "One Pager",
      "locale": "en",
      "sections": [
        { "content": "## OKR Goals\n...", "format": "MARKDOWN" }
      ],
      "createdAt": "2026-04-15T11:30:00Z"
    }
  ]
}

Example 4: All content in one call

Request:
{
  "noteGuid": "abc-123-def",
  "include": ["summary", "transcript", "documents"]
}
Returns metadata, summary, full transcript, and all documents in parallel. If any one fails (e.g., no summary exists), the field is null but the others still populate.

Best Practices

Only request the content you need. Metadata is ~50 tokens; adding summary adds ~200 tokens; transcript adds ~3,000–5,000 tokens per hour; documents vary by size.Start with metadata, switch to get_note(include: ["summary"]) if you need a quick overview, or get_note(include: ["documents"]) for action items / key takeaways.
For a quick peek at what’s in a note, use search_notes first — it returns matched notes with documents capped at 5KB. Use get_note(include: ["documents"]) only when you need the full document content.
When include: ["summary"] is set but no summary exists, summary will be null. Your code should handle this — don’t assume the field is always populated just because it was requested.
Progressive disclosure pattern: list_notessearch_notesget_note(include: [...]). Most workflows stop at step 2; only use step 3 when you need full content or when earlier tools don’t give you enough.

Common Errors

Note not found

Solution: Verify the noteGuid is correct. Use list_notes or search_notes to find valid note identifiers.

Insufficient scope

Solution: Ensure your API key has mcp:notes:read scope. See Setup to configure scopes.

Token Usage

ModeTokens
Metadata only~50
Metadata + summary~250
Metadata + transcript~3,000–5,000 per hour
Metadata + documents~1,000–5,000 (varies by document size)
All three~4,000–10,000 (varies)
Consolidation savings: The old list_note_summaries + get_note_summary chain now fits into a single get_note(include: ["summary"]) call. Same for list_note_documents + get_note_documentget_note(include: ["documents"]).
  • search_notes — When you need to find notes by keyword AND read their documents. Returns up to 10 matched notes with document content capped at 5KB per document.
  • list_notes — When you just need to know which notes exist. Lightest tier; metadata only.
  • get_note_transcript — For raw transcript with timestamps (fallback; use include: ["transcript"] on this tool instead for parallel fetch).
  • list_document_templates — Discover available document template types before requesting documents.