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

# Update Chat Note

> Replace the text of a chat note. Any note of the chat can be edited, including notes written by agents.

**Required token scopes:** `Edit and delete notes of all chats`

The original `author` stays as it is. Your API token becomes the note's `lastEditor`, with `customName` when you send one.

Sending the same text as the saved text changes nothing and returns the note as it is. The editor name can change only together with the text: the same text with a different `customName` returns 400.


## OpenAPI

````yaml api-reference/openapi.json PATCH /chats/{chatId}/chat-notes/{noteId}
openapi: 3.1.0
info:
  title: Texter API V2
  version: 2.0.0
  description: >-
    The **Texter API** lets your developers control the Texter platform
    programmatically:


    - Manage and send your WhatsApp template messages

    - Retrieve chats by ID or by various filters

    - Assign and resolve conversations

    - Send session messages into active chats

    - Manage labels

    - Monitor and resolve channel health issues

    - Subscribe to real-time webhook events

    - Manage quick replies (coming soon)


    For any questions please contact [Texter
    Support](https://wa.me/972586640430).


    ### Using the playground


    On any endpoint page: set **projectID** under *Server* to your project
    subdomain (if your Texter URL is `https://demo.texterchat.com`, the
    projectID is `demo`) and paste your API token into the **Authorization**
    field - both persist while you browse. Create tokens under **gear icon →
    Developers → API Tokens** with the scopes each endpoint lists.
  contact:
    name: Texter Support
    url: https://wa.me/972586640430
servers:
  - url: https://{projectID}.texterchat.com/server/api/v2
    description: Your Texter environment. Replace projectID with your project subdomain
    variables:
      projectID:
        default: demo
        description: >-
          Your unique project subdomain. If your environment URL is
          https://demo.texterchat.com, your projectID is "demo"
security:
  - bearerAuth: []
tags:
  - name: Manage Templates
    description: >-
      Create, localize, submit, update, delete and send WhatsApp template
      messages, and retrieve approved templates for your connected WhatsApp
      accounts.


      **Suggested token for this group** - create one API token with the scopes:
      *Send template messages*, *View template messages*, *Manage WhatsApp
      templates*, *Manage all chats*, *List all chats* (the last two also cover
      the Templates Subscriptions group). Each endpoint below also lists the
      exact scopes it needs.
  - name: Templates Subscriptions
    description: >-
      Manage recipient subscriptions for WhatsApp template messages -
      unsubscribe or resubscribe recipients, and list unsubscribed users across
      all channels or for a specific account.


      **Suggested token for this group** - scopes: *Manage all chats*, *List all
      chats*. Each endpoint below also lists the exact scopes it needs.
  - name: Messages
    description: >-
      Retrieve message history from a chat, or send new session messages - text,
      media, buttons, lists, contact cards and locations - within the active
      WhatsApp 24-hour session window.


      **Suggested token for this group** - scopes: *Send session message*, *View
      all chats*. Each endpoint below also lists the exact scopes it needs.
  - name: Chats
    description: >-
      Fetch chat details, search conversations, update chat properties, assign
      or resolve chats, and manage their CRM metadata.


      **Suggested token for this group** - scopes: *Manage all chats*, *List all
      chats*, *Send session message*. Each endpoint below also lists the exact
      scopes it needs.
  - name: Labels
    description: >-
      Create and edit labels, assign or remove them from chats, retrieve label
      data, or delete labels from your inbox.


      **Suggested token for this group** - scopes: *Manage labels*, *Manage all
      chats* (needed for managing labels on chats). Each endpoint below also
      lists the exact scopes it needs.
  - name: Chat Notes
    description: >-
      Read and write the internal notes of a chat. Agents see notes in the inbox
      next to the conversation; the contact never sees them. Notes record who
      wrote them (an agent, a bot, a scenario or an API token) and can show a
      custom author name. See The Chat Note object for the fields.


      **Suggested token for this group** - scopes: *View notes of all chats*,
      *Add notes to all chats*, *Edit and delete notes of all chats*. Each
      endpoint below also lists the exact scopes it needs.
  - name: Channels
    description: >-
      Monitor and maintain the health of connected messaging channels - retrieve
      active channel health problems, filter them by severity or account, and
      mark issues as resolved.


      **Suggested token for this group** - scopes: *Manage channels*. Each
      endpoint below also lists the exact scopes it needs.
  - name: Quick Replies
    description: >-
      Manage quick replies - prepared messages agents can send into matching
      chats with one click. Quick replies marked with `aiQuickReply` client
      metadata appear as **AI suggestions** in the Texter inbox (see Create
      Quick Reply for the full flow).


      **Suggested token for this group** - scopes: *View quick replies*, *Manage
      quick replies*. Each endpoint below also lists the exact scopes it needs.
  - name: Files
    description: >-
      Generate public access links to media files stored in Texter.


      **Suggested token for this group** - scopes: *View all files*, *View all
      chats* (both required). Each endpoint below also lists the exact scopes it
      needs.
  - name: Subscribe to Events
    description: >-
      Register webhooks for events occurring in your Texter environment. Under
      the hood this uses **Scenarios** - a workflow automation feature within
      Texter. To make integration easy, pre-defined templates are provided:
      import a scenario JSON, plug in your webhook URL and user UID, and the
      subscription is active.


      See the **Webhook Events** pages for the payload your URL receives for
      each event.


      **Suggested token for this group** - scopes: *View scenarios*, *Create
      scenarios*, *Delete scenarios*, *Activate/inactivate scenarios*, *Manage
      scenarios on behalf of user*. Each endpoint below also lists the exact
      scopes it needs.


      If the provided templates don't satisfy your needs, contact [Texter
      Support](https://wa.me/972586640430) and we'll gladly help modify any
      triggers, conditions or actions for your webhook.
  - name: Scenarios (Advanced)
    description: >-
      Full programmatic control over scenarios for advanced automations: create
      scenarios from scratch, copy them, edit drafts, publish revisions, inspect
      execution runs, and discover the available building blocks (events,
      conditions, loaders, actions). For plain webhook subscriptions, the
      **Subscribe to Events** group with its ready-made templates is the simpler
      path.


      **Suggested token for this group** - scopes: *View scenarios*, *Create
      scenarios*, *Edit scenarios*, *Delete scenarios*, *Activate/inactivate
      scenarios*, *Manage scenarios on behalf of user*, *View scenarios runs*.
      Each endpoint below also lists the exact scopes it needs.
paths:
  /chats/{chatId}/chat-notes/{noteId}:
    patch:
      tags:
        - Chat Notes
      summary: Update Chat Note
      description: >-
        Replace the text of a chat note. Any note of the chat can be edited,
        including notes written by agents.


        **Required token scopes:** `Edit and delete notes of all chats`



        The original `author` stays as it is. Your API token becomes the note's
        `lastEditor`, with `customName` when you send one.


        Sending the same text as the saved text changes nothing and returns the
        note as it is. The editor name can change only together with the text:
        the same text with a different `customName` returns 400.
      operationId: update-chat-note
      parameters:
        - name: chatId
          in: path
          required: true
          schema:
            type: string
          description: >-
            The unique identifier of the chat. You can obtain this value by
            using the Search Chats endpoint with the contact's phone number
          example: 67a87067aeed4dee1271cb4d
        - name: noteId
          in: path
          required: true
          schema:
            type: string
          description: >-
            The unique identifier of the note (`_id`). You can obtain it from
            List Chat Notes or from the response of Create Chat Note
          example: 6731f0c2a1b2c3d4e5f60718
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                text:
                  type: string
                  maxLength: 4096
                  description: The new note text, up to 4096 characters
                customName:
                  type: string
                  maxLength: 50
                  description: >-
                    Editor name shown in the inbox instead of the default. Up to
                    50 characters, must contain a visible character
              required:
                - text
              additionalProperties: false
            examples:
              Replace the text:
                value:
                  text: Refund approved, order 1234
              Replace the text with an editor name:
                value:
                  text: Refund approved, order 1234
                  customName: Refunds system
      responses:
        '200':
          description: The updated note
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatNote'
              example:
                _id: 6731f0c2a1b2c3d4e5f60718
                chatId: 67a87067aeed4dee1271cb4d
                text: Refund approved, order 1234
                messageId: 6731efa0a1b2c3d4e5f60701
                author:
                  actor:
                    type: jwt
                    issuer: https://texterchat.com/demo
                    kid: a1b2c3
                  customName: Refunds system
                createdAt: 1762851000000
                updatedAt: 1762851300000
                lastEditor:
                  actor:
                    type: jwt
                    issuer: https://texterchat.com/demo
                    kid: a1b2c3
        '400':
          description: Invalid body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                Missing text:
                  value:
                    error: data must have required property 'text'
                Name change without a text change:
                  value:
                    error: >-
                      Changing the custom editor name requires changing the note
                      text
        '401':
          description: Missing or invalid token, or missing required scope
        '404':
          description: Chat or note not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                Chat not found:
                  value:
                    error: Chat 67a87067aeed4dee1271cb4d not found
                Note not found:
                  value:
                    error: Note 6731f0c2a1b2c3d4e5f60718 not found
components:
  schemas:
    ChatNote:
      type: object
      description: An internal note on a chat
      properties:
        _id:
          type: string
          description: Unique note ID
          example: 6731f0c2a1b2c3d4e5f60718
        chatId:
          type: string
          description: ID of the chat the note belongs to
          example: 67a87067aeed4dee1271cb4d
        text:
          type: string
          description: The note text
        messageId:
          type: string
          description: >-
            ID of the chat message the note is attached to. Missing when the
            chat had no messages
        author:
          $ref: '#/components/schemas/ChatNoteAttribution'
          description: Who wrote the note. Kept as it is on every edit
        lastEditor:
          $ref: '#/components/schemas/ChatNoteAttribution'
          description: Who made the last text edit. Missing on notes that were never edited
        createdAt:
          type: integer
          description: Creation time, Unix milliseconds
          example: 1762851000000
        updatedAt:
          type: integer
          description: Last change time, Unix milliseconds
          example: 1762851000000
      required:
        - _id
        - chatId
        - text
        - author
        - createdAt
        - updatedAt
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
      required:
        - error
    ChatNoteAttribution:
      type: object
      description: Author or editor of a note
      properties:
        actor:
          $ref: '#/components/schemas/ChatNoteActor'
        customName:
          type: string
          description: >-
            Name shown in the inbox instead of the default name for the actor.
            Missing when none was set
      required:
        - actor
    ChatNoteActor:
      type: object
      description: Who wrote or edited a note. The fields depend on `type`
      properties:
        type:
          type: string
          enum:
            - user
            - system
            - jwt
            - legacyToken
            - unknown
          description: >-
            `user`: an agent in the inbox. `system`: a bot or a scenario (see
            `component`). `jwt` / `legacyToken`: an API token. `unknown`: not
            known
        uid:
          type: string
          description: '`user` only. The agent''s user ID'
        email:
          type: string
          description: '`user` only, optional. The agent''s email'
        name:
          type: string
          description: '`user` only, optional. The agent''s name'
        component:
          type: string
          enum:
            - bot
            - scenario
            - cron
          description: '`system` only. The part of Texter that wrote the note'
        issuer:
          type: string
          description: '`jwt` only. The token issuer'
        kid:
          type: string
          description: '`jwt` only, optional. The token key ID'
        tokenSha256:
          type: string
          description: '`legacyToken` only. SHA-256 hash of the token'
      required:
        - type
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API token generated in Texter: gear icon → Developers → API Tokens. When
        creating a token, assign it the scopes required by the endpoints you
        plan to call - each endpoint lists its required scopes.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.