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

# Update Note

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

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
      - `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.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)
