Skip to content
Dashboard

Update a comment

client.feedback.comments.update(stringid, CommentUpdateParams { content, createdAt, downvotes, 5 more } params, RequestOptionsoptions?): Comment { id, author, changelogId, 14 more }
PATCH/v2/comments/{id}

Updates an existing comment by its unique identifier.

You can update:

  • content - Comment text (HTML format)
  • isPrivate - Privacy status (admin-only visibility)
  • isPinned - Pinned status (displayed at top)
  • inReview - Moderation status

Content Format

Content should be formatted as HTML. For images:

  • External URLs in img src attributes are automatically pulled into our storage
  • Base64 encoded data URIs (data:image/...) are also supported and processed

Permissions

  • Comment authors can update their own comment content
  • Admin permissions required for:
    • isPrivate - Requires manage_comments_private permission
    • isPinned - Requires set_comment_pinned permission
    • inReview - Requires moderate_comments permission
    • Updating other users’ comments - Requires moderate_comments permission

Response

Returns the updated comment object with all fields populated.

Errors

  • 400 - Invalid comment ID format or input
  • 403 - Not authorized to update this comment
  • 404 - Comment not found
ParametersExpand Collapse
id: string

Comment unique identifier

params: CommentUpdateParams { content, createdAt, downvotes, 5 more }
content?: string

Body param: Comment content in HTML format

minLength2
createdAt?: string | null

Body param: Update the creation date (useful for imports)

downvotes?: number | null

Body param: Set the downvotes count directly. Score will be recalculated as upvotes - downvotes.

minimum0
inReview?: boolean | null

Body param: Whether the comment is pending moderation review

isPinned?: boolean | null

Body param: Whether the comment is pinned at the top

isPrivate?: boolean | null

Body param: Whether the comment is private (only visible to admins)

upvotes?: number | null

Body param: Set the upvotes count directly. Score will be recalculated as upvotes - downvotes.

minimum0
featurebaseVersion?: "2026-01-01.nova" | "2025-12-12.clover"

Header param: API version for this request. Defaults to your organization’s configured API version if not specified.

One of the following:
"2026-01-01.nova"
"2025-12-12.clover"
ReturnsExpand Collapse
Comment { id, author, changelogId, 14 more }
id: string

Unique identifier

author: Author | null
id: string | null

Author unique identifier

name: string

Author display name

profilePicture: string | null

Author profile picture URL

type: "admin" | "customer" | "guest" | 3 more

Type of user who authored the comment

One of the following:
"admin"
"customer"
"guest"
"integration"
"bot"
"lead"
changelogId: string | null

Changelog ID this comment belongs to

content: string

Comment content in HTML format

createdAt: string

ISO 8601 timestamp when created

downvotes: number

Number of downvotes

inReview: boolean

Whether the comment is in review

isDeleted: boolean

Whether the comment is deleted

isPinned: boolean

Whether the comment is pinned

isPrivate: boolean

Whether the comment is private

isSpam: boolean

Whether the comment is spam

object: "comment"

Object type identifier

parentCommentId: string | null

Parent comment ID for replies, null for root comments

postId: string | null

Post ID this comment belongs to

score: number

Net score (upvotes - downvotes)

updatedAt: string

ISO 8601 timestamp when updated

upvotes: number

Number of upvotes

Update a comment

import Featurebase from 'featurebase-node';

const client = new Featurebase({
  apiKey: process.env['FEATUREBASE_API_KEY'], // This is the default and can be omitted
});

const comment = await client.feedback.comments.update('507f1f77bcf86cd799439011');

console.log(comment.id);
{
  "id": "507f1f77bcf86cd799439011",
  "author": {
    "id": "507f1f77bcf86cd799439011",
    "name": "John Doe",
    "profilePicture": "https://cdn.example.com/avatars/john.png",
    "type": "customer"
  },
  "changelogId": "507f1f77bcf86cd799439013",
  "content": "<p>This is a great idea!</p>",
  "createdAt": "2023-12-12T00:00:00.000Z",
  "downvotes": 0,
  "inReview": false,
  "isDeleted": false,
  "isPinned": false,
  "isPrivate": false,
  "isSpam": false,
  "object": "comment",
  "parentCommentId": "507f1f77bcf86cd799439014",
  "postId": "507f1f77bcf86cd799439012",
  "score": 5,
  "updatedAt": "2023-12-13T00:00:00.000Z",
  "upvotes": 5
}
Returns Examples
{
  "id": "507f1f77bcf86cd799439011",
  "author": {
    "id": "507f1f77bcf86cd799439011",
    "name": "John Doe",
    "profilePicture": "https://cdn.example.com/avatars/john.png",
    "type": "customer"
  },
  "changelogId": "507f1f77bcf86cd799439013",
  "content": "<p>This is a great idea!</p>",
  "createdAt": "2023-12-12T00:00:00.000Z",
  "downvotes": 0,
  "inReview": false,
  "isDeleted": false,
  "isPinned": false,
  "isPrivate": false,
  "isSpam": false,
  "object": "comment",
  "parentCommentId": "507f1f77bcf86cd799439014",
  "postId": "507f1f77bcf86cd799439012",
  "score": 5,
  "updatedAt": "2023-12-13T00:00:00.000Z",
  "upvotes": 5
}