> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tiro.ooo/llms.txt
> Use this file to discover all available pages before exploring further.

# List Note 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.




## OpenAPI

````yaml /openapi.yaml get /v1/external/notes/{noteGuid}/paragraphs
openapi: 3.1.0
info:
  title: Tiro API
  description: AI-powered note-taking and voice file processing API
  version: 1.0.0
  contact:
    name: Tiro Support
    email: support@tiro.ooo
    url: https://tiro.ooo
servers:
  - url: https://api.tiro.ooo
    description: Production server
security:
  - BearerAuth: []
tags:
  - name: Note
    description: Operations for managing notes and their paragraphs
  - name: Note Share Link
    description: Manage share links for notes
  - name: Note Summary
    description: Operations for retrieving note summaries
  - name: Note Document
    description: Template-based document generation from notes
  - name: Note Document Template
    description: Operations for managing note document templates
  - name: Folder
    description: Operations for retrieving folders
  - name: Voice File
    description: Operations for voice file processing
  - name: Word Memory
    description: >
      Manage word memories to improve voice transcription accuracy. Register
      important terms like company names, people's names, and product names so
      Tiro recognizes them precisely during recording. Personal word memories
      (User) and a workspace's shared word memories (Workspace) are managed
      separately. The legacy team word memory endpoints
      (`/v1/external/teams/me/word-memories`) are deprecated — removed on
      2026-06-30 — in favor of the workspace-explicit
      `/v1/external/workspaces/{workspaceGuid}/word-memories`.
  - name: Wiki
    description: |
      Access workspace wikis — unified knowledge graphs built from notes.
      Requires a workspace with wiki plan and activation enabled.
  - name: Organization
    description: >
      Endpoints for organization API keys. An organization key is issued by an

      organization admin, carries fixed scopes chosen at issuance, and can reach

      the notes in every workspace that belongs to the organization. Built for

      server-to-server integrations such as CRM sync — receive `note.ended`
      webhook

      events, generate documents for notes, and reconcile with the organization

      notes list.
  - name: Organization Management
    description: Operations for the authenticated user's organization.
paths:
  /v1/external/notes/{noteGuid}/paragraphs:
    get:
      tags:
        - Note
      summary: List Note Paragraphs
      description: >
        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.
      operationId: listNoteParagraphs
      parameters:
        - name: noteGuid
          in: path
          description: Note GUID
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          description: Cursor for the next page
          required: false
          schema:
            type: string
        - name: size
          in: query
          description: Page size (default 100)
          required: false
          schema:
            type: integer
            default: 100
            minimum: 1
            maximum: 1000
      responses:
        '200':
          description: List of paragraphs
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PageCursorResponse'
                  - type: object
                    properties:
                      content:
                        type: array
                        items:
                          $ref: '#/components/schemas/Paragraph'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Note not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    PageCursorResponse:
      type: object
      required:
        - content
        - nextCursor
      properties:
        content:
          type: array
          items: {}
          description: Array of items for current page
        nextCursor:
          type: string
          nullable: true
          description: Cursor for next page, null if last page
          example: opaque-cursor-string
    Paragraph:
      type: object
      description: >
        A semantic unit of a Note's transcript (a speaker turn or topic chunk,
        not

        a prose paragraph). Generated asynchronously as transcription progresses
        —

        fields like `transcript`, `translated`, and `summary` become non-null in

        stages. See [Data Model](/fundamentals/note-data-model).
      required:
        - uuid
        - locked
      properties:
        uuid:
          type: string
          description: Unique identifier for the paragraph
          example: para-1
        transcribeLocale:
          type: string
          nullable: true
          description: >
            Locale used for transcription. Null for paragraphs from
            non-recording source notes.
          example: en_US
        transcript:
          nullable: true
          description: >
            Transcribed text content. Null when transcription has not yet
            completed or is unavailable.
          allOf:
            - $ref: '#/components/schemas/TextObject'
            - example:
                type: text/plain
                content: Hello everyone...
        translateLocale:
          type: string
          nullable: true
          description: |
            Locale used for translation. Null when no translation was requested.
          example: ko_KR
        translated:
          nullable: true
          description: >
            Translated text content. Null when no translation was requested or
            translation has not yet completed.
          allOf:
            - $ref: '#/components/schemas/TextObject'
            - example:
                type: text/plain
                content: 여러분 안녕하세요...
        summaryLocale:
          type: string
          nullable: true
          description: >
            Locale used for summary. Resolved from summaryLocale, then
            translateLocale, then transcribeLocale. Null only when all three
            locale fields are null.
          example: en_US
        summary:
          nullable: true
          description: >
            AI-generated paragraph summary. Null when summary generation has not
            yet completed.
          allOf:
            - $ref: '#/components/schemas/TextObject'
            - example:
                type: text/markdown
                content: '- Greeting and agenda...'
        diarizedSegments:
          type: array
          nullable: true
          description: >
            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`.
          items:
            $ref: '#/components/schemas/DiarizedSegment'
        timeFrom:
          type: string
          format: date-time
          nullable: true
          description: >
            Start time of the paragraph. Null when timing information is not
            available.
          example: '2025-07-20T10:00:10Z'
        timeTo:
          type: string
          format: date-time
          nullable: true
          description: >
            End time of the paragraph. Null when timing information is not
            available.
          example: '2025-07-20T10:00:25Z'
        locked:
          type: boolean
          description: >
            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.
          example: false
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - errorType
            - message
          properties:
            code:
              type: integer
              description: >
                6-digit error code in `AAABBB` form: first 3 digits match the
                HTTP status,

                last 3 digits are a per-status serial (e.g. `404018`). Use only
                when you need

                to distinguish specific error cases within the same HTTP status
                — values may be

                added or renumbered across releases. For general client
                branching, prefer `errorType`.
              example: 404018
            errorType:
              type: string
              description: >
                Stable, coarse-grained error category. Recommended default for
                client-side

                branching: the value-to-status mapping is part of the API
                contract and will not

                change without a breaking-change notice. Typical use:
                  - `unauthorized` → trigger re-authentication
                  - `forbidden` → surface a permission error to the user
                  - `not_found` → treat as missing resource
                  - `too_many_requests` → back off and retry
                  - `internal_error` → retry with exponential backoff
              enum:
                - bad_request
                - unauthorized
                - forbidden
                - not_found
                - not_acceptable
                - conflict
                - payload_too_large
                - unprocessable_entity
                - too_many_requests
                - internal_error
              example: not_found
            message:
              type: string
              description: >-
                Human-readable error message. Not stable; do not use for
                branching.
              example: 'No team found for user #217'
            detail:
              type: string
              nullable: true
              description: Additional error details
              example: null
    TextObject:
      type: object
      required:
        - type
        - content
      properties:
        type:
          type: string
          enum:
            - text/plain
            - text/markdown
          description: MIME type of the text content
          example: text/plain
        content:
          type: string
          description: The actual text content
          example: Hello everyone, welcome to today's meeting...
    DiarizedSegment:
      type: object
      description: A speaker-attributed slice of a paragraph.
      required:
        - content
        - speaker
      properties:
        content:
          type: string
          description: Plain-text content of the segment, attributed to one speaker.
          example: 안녕하세요, 회의 시작하겠습니다.
        speaker:
          $ref: '#/components/schemas/SpeakerInfo'
    SpeakerInfo:
      type: object
      description: Identifies the speaker of a diarized segment.
      required:
        - label
      properties:
        label:
          type: string
          description: >
            Diarization-engine label for the speaker (stable within a single
            note, e.g. `SPEAKER_0`).
          example: SPEAKER_0
        personName:
          type: string
          nullable: true
          description: >
            Resolved person name when the user has mapped this label to a
            person. Null when the speaker is unmapped.
          example: Alice Kim
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key in format {id}.{secret}

````