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

# Toggle comment reaction

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Adds your reaction with an emoji to a comment, or removes it when you already reacted with that emoji. Calling it twice undoes the first call, so don't retry it blindly.

Any text of up to 16 characters is accepted as `emoji`. Anyone with the app open in the builder sees the change right away.

This is limited to 120 requests per minute per app, shared by every other comments endpoint. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit. Every request that counts against the limit gets `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time in seconds) headers, and a `429` also gets `Retry-After` in seconds. If the limiter itself is unavailable, requests go through without these headers.

<Note>Call this as an editor of the app, with a personal access token sent as a Bearer token or from a signed-in session. Viewers in the app's workspace, read-only tokens, and workspace API keys are refused.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}/reactions
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}/reactions:
    post:
      summary: Toggle comment reaction
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Adds your reaction with an emoji to a comment, or removes it when you
        already reacted with that emoji. Calling it twice undoes the first call,
        so don't retry it blindly.


        Any text of up to 16 characters is accepted as `emoji`. Anyone with the
        app open in the builder sees the change right away.


        This is limited to 120 requests per minute per app, shared by every
        other comments endpoint. A signed-in session has its own limit, and
        every personal access token for the workspace shares one. Some
        workspaces have a different limit. Every request that counts against the
        limit gets `X-RateLimit-Limit`, `X-RateLimit-Remaining` and
        `X-RateLimit-Reset` (Unix time in seconds) headers, and a `429` also
        gets `Retry-After` in seconds. If the limiter itself is unavailable,
        requests go through without these headers.


        <Note>Call this as an editor of the app, with a personal access token
        sent as a Bearer token or from a signed-in session. Viewers in the app's
        workspace, read-only tokens, and workspace API keys are refused.</Note>
      operationId: >-
        toggle_app_comment_reaction_api_apps__app_id__comments_threads__thread_id__messages__message_id__reactions_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app.
            title: App Id
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
        - name: thread_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of the comment thread, from `thread.id` in [List
              comments](/api-reference/list-comments) called with the same
              `branch_id`.
            title: Thread Id
          description: >-
            ID of the comment thread, from `thread.id` in [List
            comments](/api-reference/list-comments) called with the same
            `branch_id`.
          example: 68e2b7c1d4f0a9001c3e5a17
        - name: message_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of a comment in the thread: `comment.id` for the first comment
              or a `replies[].id`, from [List
              comments](/api-reference/list-comments).
            title: Message Id
          description: >-
            ID of a comment in the thread: `comment.id` for the first comment or
            a `replies[].id`, from [List
            comments](/api-reference/list-comments).
          example: 68e2b7c4d4f0a9001c3e5a1c
        - name: branch_id
          in: query
          required: false
          schema:
            type: string
            description: >-
              ID of the branch to work on, as returned by [List
              branches](/api-reference/list-branches). Omit it to work on the
              app's main branch.
            title: Branch Id
          description: >-
            ID of the branch to work on, as returned by [List
            branches](/api-reference/list-branches). Omit it to work on the
            app's main branch.
          example: 68f1a2b3c4d5e6f708192a3b
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ToggleReactionPayload'
      responses:
        '200':
          description: Who reacts with the emoji now.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReactionResult'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, you're a viewer in the
            app's workspace, the app is blocked, or your token is read-only or a
            workspace API key.
        '404':
          description: >-
            App, comment thread, or comment not found, or no branch you can see
            has this `branch_id`. A thread is found only with the `branch_id` it
            was created on, or with no `branch_id` for a thread on main.
        '409':
          description: Your workspace requires an unlocked SSO session.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            Rate limit exceeded. Wait the number of seconds in `Retry-After`
            before retrying.
      security:
        - PersonalAccessTokenAuth:
            - full_access
components:
  schemas:
    ToggleReactionPayload:
      properties:
        emoji:
          type: string
          maxLength: 16
          minLength: 1
          title: Emoji
          description: Emoji to toggle, up to 16 characters.
          example: 👍
      type: object
      required:
        - emoji
      title: ToggleReactionPayload
      description: The emoji reaction to toggle.
    ReactionResult:
      properties:
        emoji:
          type: string
          title: Emoji
          description: The emoji you toggled.
          example: 👍
        user_ids:
          items:
            type: string
          type: array
          title: User Ids
          description: >-
            IDs of everyone who now reacts with this emoji on the comment. Your
            ID is missing when you removed your reaction.
          example:
            - 6820f41be7b91d003c45a20a
      type: object
      required:
        - emoji
        - user_ids
      title: ReactionResult
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: >-
        Personal access token, sent as `Authorization: Bearer <token>`. Each
        operation lists the permission it needs: `read_only` or `full_access`. A
        full-access token can call every operation. A read-only token can call
        only the operations that list `read_only`; anything else returns 403
        `read_only_credential_route_not_allowed`.

````

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