---
title: "Update Note"
method: PATCH
path: "/v1/external/notes/{noteGuid}"
tags: ["Note"]
---

# Update Note

`PATCH /v1/external/notes/{noteGuid}`

## Request

- Base URL: `https://api.tiro.ooo`
- URL: `https://api.tiro.ooo/v1/external/notes/{noteGuid}`
- Auth: HTTP bearer

Update a note's metadata (partial update). Currently only the note `title`
can be changed. Requires the `note:write` scope.

This follows the [AIP-134](https://google.aip.dev/134) field-mask convention:
the required `updateMask` query parameter lists which fields to change, and
only those fields are touched. A field named in `updateMask` but absent from
the body (or sent as `null`) is treated as an error for `title`, since the
title cannot be blank.

## Path parameters

- `noteGuid` string, required

## Query parameters

- `updateMask` string, required

## Request body

- PatchNoteRequest: Partial update for a note. Include only the fields named in `updateMask`.
  - `title` string: New note title. Must not be blank and is limited to 100 characters.

## Response `200`

Note updated

- Note: The top-level container for a single recording session. A Note holds its transcribed content as Paragraphs, and can be summarized into NoteSummary or rendered into a NoteDocument. See [Data Model](/fundamentals/note-data-model) for the full structure.
  - `guid` string, required: Unique identifier for the note
  - `workspaceGuid` string, nullable: GUID of the workspace this note belongs to. `null` for notes not associated with a workspace.
  - `title` string, required: Note title
  - `createdAt` string, date-time, required: ISO-8601 creation timestamp
  - `updatedAt` string, date-time, required: ISO-8601 last update timestamp
  - `sourceType` 'onboarding' | 'text' | 'live-voice' | 'recording' | 'offline-mode' | 'webpage' | 'video', required: Source type of the note: - `live-voice`: Real-time voice recording - `recording`: Uploaded audio file - `text`: Text-only note - `video`: Video recording - `webpage`: Web page content - `offline-mode`: Offline recording - `onboarding`: Onboarding sample note
  - `recordingStartAt` string, date-time, nullable: Actual recording start timestamp. Null for non-recording source types.
  - `recordingEndAt` string, date-time, nullable: Actual recording end timestamp. Null for non-recording source types.
  - `recordingDurationSeconds` integer, required: Actual recording length in seconds. Returns `0` for non-recording source types.
  - `transcribeLocale` string, nullable: Language locale used for transcription. Null for non-recording source types.
  - `translateLocale` string, nullable: Language locale used for translation. Null when no translation was requested.
  - `webUrl` string, uri, required: Web URL to access the note
  - `collaborators` Collaborator[], required: Array of collaborators with their roles
    - `guid` string, required: Unique identifier for the collaborator
    - `name` string, required: Collaborator's name
    - `email` string, email, required: Collaborator's email address
    - `role` 'OWNER' | 'EDITOR' | 'VIEWER', required: Collaborator's role
  - `participants` Participant[], required: Array of meeting participants tagged in the note
    - `name` string, nullable: Participant's name. Null when the name was not provided or is blank.
    - `email` string, email, nullable: Participant's email address. Null when the email was not provided or is blank.
  - `matchedSnippets` string[], nullable: Highlight snippets for the keyword that matched this note. Present only on responses to the deep-search endpoints (`POST /v1/external/workspaces/{workspaceGuid}/notes/search` or the deprecated `POST /v1/external/notes/search`); absent (`null`) on plain list responses.
  - `documents` NoteDocument[], nullable: Note's primary documents (one-pager / custom). Present only on responses to the deep-search endpoints (`POST /v1/external/workspaces/{workspaceGuid}/notes/search` or the deprecated `POST /v1/external/notes/search`); absent (`null`) on plain list responses. Each item's `truncated` flag indicates whether the deep-search budget was exceeded.
    - `id` integer, required: Document ID
    - `noteGuid` string, required: The GUID of the note this document belongs to
    - `note` NoteRef, required: Note reference with minimal information
      - `guid` string, required: Note GUID
      - `webUrl` string, uri, required: Web URL to access the note
    - `template` NoteDocumentTemplateSummary, required: Summary information of a note document template
      - `id` integer, required: Template ID
      - `title` string, required: Template title
    - `locale` 'ko_KR' | 'en_US' | 'de_DE' | 'ja_JP' | 'es_ES' | 'fr_FR' | 'id_ID' | 'vi_VN' | 'tr_TR' | 'uk_UA' | 'ru_RU' | 'hi_IN' | 'it_IT' | 'zh_CN' | 'ms_MY' | 'th_TH' | 'sv_SE', required: Supported language locale
    - `sections` NoteDocumentSection[], required: Array of document sections
      - `templateSectionId` integer, required: ID of the template section this content was generated from
      - `content` object, required: Generated section content
        - `type` 'text/plain' | 'text/markdown', required: MIME type of the text content
        - `content` string, required: The actual text content
      - `createdAt` string, date-time, required: Section creation timestamp
    - `createdAt` string, date-time, required: Document creation timestamp
    - `updatedAt` string, date-time, required: Document last update timestamp
    - `truncated` boolean: `true` when the document was emitted as part of a deep-search response and its combined section text exceeded the search budget (5,000 chars). Plain document fetches always emit `false`.

## Other responses

- `400`: Bad request — empty `updateMask`, unknown field, or a blank/too-long title
- `401`: Unauthorized — missing API key
- `403`: Forbidden — the API key lacks the `note:write` scope
- `404`: Note not found

---

[API](https://skmtc.dev/tiro/apis/tiro-api-2.md) · [All operations](https://skmtc.dev/tiro/apis/tiro-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/tiro/apis/tiro-api-2/revisions/dc1a260c6771?raw)
