---
title: "List Note Paragraphs"
method: GET
path: "/v1/external/notes/{noteGuid}/paragraphs"
tags: ["Note"]
---

# List Note Paragraphs

`GET /v1/external/notes/{noteGuid}/paragraphs`

Returns a note's transcript as paragraphs — the "conversation notes"
/ transcript content (a speaker turn or topic chunk per paragraph).

**Paywall masking (free / unpaid notes).** When a note exceeds the free
usage limit and is not on a paid plan, the paragraphs past the limit are
returned with their text content masked instead of withheld. Such
paragraphs have `locked: true`. The first locked paragraph keeps a short
readable preview (about the first 80 characters of `transcript`, and the
summary header plus its first bullet); every locked paragraph after it is
fully masked. Masking preserves length, whitespace, and structure but
replaces the words with placeholder characters, so masked text reads as
gibberish rather than the real transcript. Unlocked paragraphs
(`locked: false`) are always returned in full. Starting a paid plan
unlocks the note and removes the masking. A response where the transcript
"cuts off partway" is almost always this masking, not a bug.

## Path parameters

- `noteGuid` string, required

## Query parameters

- `cursor` string
- `size` integer

## Response `200`

List of paragraphs

- object
  - `content` Paragraph[], required — Array of items for current page
    - `uuid` string, required — Unique identifier for the paragraph
    - `transcribeLocale` string, nullable — Locale used for transcription. Null for paragraphs from non-recording source notes.
    - `transcript` object, nullable — Transcribed text content. Null when transcription has not yet completed or is unavailable.
      - `type` 'text/plain' | 'text/markdown', required — MIME type of the text content
      - `content` string, required — The actual text content
    - `translateLocale` string, nullable — Locale used for translation. Null when no translation was requested.
    - `translated` object, nullable — Translated text content. Null when no translation was requested or translation has not yet completed.
      - `type` 'text/plain' | 'text/markdown', required — MIME type of the text content
      - `content` string, required — The actual text content
    - `summaryLocale` string, nullable — Locale used for summary. Resolved from summaryLocale, then translateLocale, then transcribeLocale. Null only when all three locale fields are null.
    - `summary` object, nullable — AI-generated paragraph summary. Null when summary generation has not yet completed.
      - `type` 'text/plain' | 'text/markdown', required — MIME type of the text content
      - `content` string, required — The actual text content
    - `diarizedSegments` DiarizedSegment[], nullable — Speaker-attributed segments. Backend applies userDiarizedTranscript → diarizedTranscript precedence and resolves user-mapped person names. Null when the paragraph has no diarization data — callers should fall back to `transcript`.
      - `content` string, required — Plain-text content of the segment, attributed to one speaker.
      - `speaker` SpeakerInfo, required — Identifies the speaker of a diarized segment.
        - `label` string, required — Diarization-engine label for the speaker (stable within a single note, e.g. `SPEAKER_0`).
        - `personName` string, nullable — Resolved person name when the user has mapped this label to a person. Null when the speaker is unmapped.
    - `timeFrom` string, date-time, nullable — Start time of the paragraph. Null when timing information is not available.
    - `timeTo` string, date-time, nullable — End time of the paragraph. Null when timing information is not available.
    - `locked` boolean, required — Whether the paragraph is behind the paywall. `true` means the paragraph is past the note's free usage limit on a free or unpaid plan, and its text content (`transcript`, `translated`, `summary`) is returned masked — length and structure are preserved but the words are replaced with placeholder characters. Starting a paid plan unlocks the note and returns these paragraphs in full.
  - `nextCursor` string, nullable, required — Cursor for next page, null if last page

## Other responses

- `401` — Unauthorized
- `404` — Note not found

---

[API](https://skmtc.net/tiro/apis/tiro-api.md) · [All operations](https://skmtc.net/tiro/apis/tiro-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tiro/tiro-api/revisions/ae18d7961aa4/schema)
