Skip to main content
Posts

Update a post

Updates an existing post. Only provided fields will be modified.

PATCH
/v2/posts/{id}

Updatable Fields

  • title - Post title (minimum 2 characters)
  • content - Post content in HTML format
  • boardId - Move post to a different board
  • statusId - Update post status
  • tags - Replace existing tags with new set
  • commentsEnabled - Enable/disable comments
  • inReview - Put post in/out of moderation queue
  • customFields - Update custom field values
  • eta - Set estimated completion date (null to clear)
  • createdAt - Update creation date (for backdating)
  • assigneeId - Admin ID to assign this post to (null to unassign)
  • visibility - Post-level restriction: 'public', 'authorOnly' (author and admins) or 'companyOnly' (the author's company). Board and organization access controls still apply.
  • author - Change post attribution (id, userId, email, name, profilePicture)

Status Update Notifications

  • sendStatusUpdateEmail - When changing status, optionally send email notification to voters (default: false)

Response

Returns the updated post object with all fields populated.

Authorizationstringheaderrequired

API key as Bearer token. Use: Authorization: Bearer sk_...

idstringrequired

Post unique identifier

Example: 507f1f77bcf86cd799439011
Featurebase-Versionenum<string>header

API version for this request. Defaults to your organization's configured API version if not specified.

Available options: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Example: 2026-08-19.orbit

Body

application/json
assigneeIdstring | null

Admin ID to assign this post to (null to unassign)

Example: 507f1f77bcf86cd799439013
authorobject

Author to attribute the post to. If not provided, uses the authenticated user — unless source is given, in which case a guest author is synthesised from source.label (or the channel name), because a relayed request belongs to the customer who said it. Supports multiple identification methods: id (Featurebase ID), userId (external SSO ID), or email.

boardIdstring

Board ID to move post to

Example: 507f1f77bcf86cd799439011
commentsEnabledboolean | null

Whether comments are enabled on this post

Example: true
contentstring

Post content (HTML)

Example: <p>Updated content with more details.</p>
createdAtstring | null

Creation date (for backdating)

Example: 2025-01-15T10:30:00.000Z
customFieldsobject

Custom field values keyed by field ID (ObjectId). Send each value in the form its field type takes: text: a string; number: a number or a numeric string ("5"); checkbox: true/false or "true"/"false"; date: an ISO 8601 string; select: an option label or id; multi-select: an option label or id, or an array of them. null clears a field. A value the field type cannot take is rejected with a 400.

etastring | null

Estimated completion date (null to clear)

Example: 2025-12-31T23:59:59.000Z
inReviewboolean | null

Whether post is pending moderation

Example: false
sendStatusUpdateEmailboolean | null

Whether to send status update email to voters

Example: false
statusIdstring

Status ID to set

Example: 507f1f77bcf86cd799439012
tagsstring | string[]

Tag names to set (replaces existing)

titlestring

Post title

Required string length: 2 - 512
Example: Updated: Add dark mode support
upvotesinteger | null

Set the upvotes count directly. Use with caution as this overrides the actual vote count.

Required range: 0 <= x
Example: 10
visibilityenum<string>

Post visibility. 'public' = visible to all users, 'authorOnly' = only visible to the author and admins, 'companyOnly' = only visible to users in the same company as the author

Available options: public, authorOnly, companyOnly
Example: public

Response

application/json

Success

accessobjectrequired
anchorobject | nullrequired

When kind is 'insight', where exactly the insight points back into its origin: an insight source record with character ranges into its fullText, or the native conversation/message/comment/post ids.

assigneeIdstring | nullrequired

ID of the admin assigned to this post, null if unassigned

Example: 507f1f77bcf86cd799439013
authorobject | nullrequired
boardIdstringrequired

Board (category) ID this post belongs to

Example: 507f1f77bcf86cd799439011
commentCountnumberrequired

Total number of comments

Example: 5
contentstringrequired

Post content in HTML format

Example: <p>It would be great to have a dark mode option for the dashboard.</p>
createdAtstringrequired

ISO 8601 timestamp when created

Example: 2023-12-12T00:00:00.000Z
customFieldsobjectrequired

Custom field values keyed by field ID

dedupedenum<boolean>

Present and true only on POST /v2/posts, when the request carried a source.externalId that already had a post. The existing post is returned unchanged with HTTP 200; a newly created post returns HTTP 201 without this field.

Available options: true
Example: true
etastring | nullrequired

Estimated completion time as ISO 8601 timestamp, null if not set

Example: 2025-01-01T00:00:00.000Z
featuresobjectrequired
groupKeystring | nullrequired

When kind is 'insight', the triage grouping key (source record id, conversation id, origin post id, or the insight's own id for singletons). Legacy insights may be null and group as singletons.

idstringrequired

Unique identifier

Example: 507f1f77bcf86cd799439011
inReviewbooleanrequired

Whether the post is pending moderation review

Example: false
insightSourceobject | nullrequired

Provenance of an insight: which channel it came from and how it was captured.

intakeModeenum<string>

Present only on POST /v2/posts: the intakeMode the post was processed under ('request' when the request named none). On an idempotent replay (deduped: true) this is the mode the post was ORIGINALLY created with.

Available options: request, feedback
Example: request
integrationsobjectrequired

Third-party integration links associated with this post

isPinnedbooleanrequired

Whether the post is pinned to the top

Example: false
kindenum<string>required

Discriminates an actionable work item ('issue') from a customer submission whose claims were extracted into insights ('record' — not a work item). Defaults to 'issue' for all pre-existing posts. Default list responses return issues only; pass kind='record' to opt in. Raw signal ('insight') is never returned by the posts resource — insights are served by /v2/insights.

Available options: issue, insight, record
Example: issue
linkedInsightCountnumberrequired

Number of insights linked to this issue as supporting evidence. Only meaningful when kind is 'issue'.

Example: 0
linkedIssueIdstring | nullrequired

When kind is 'insight', the ID of the issue this insight supports. Null when the insight is unlinked or when kind is 'issue'.

objectenum<string>required

Object type identifier

Available options: post
Example: post
opportunityAmountnumber | nullrequired

Total opportunity amount from linked HubSpot deals and Salesforce opportunities

Example: 30000
portalHiddenbooleanrequired

True when the issue is hidden from portal/public surfaces. Missing stored values are returned as false.

Example: false
postUrlstringrequired

Full URL to view the post

Example: https://feedback.example.com/p/add-dark-mode-support
processingobject

On POST /v2/posts — queued: a processing run (claim extraction or the Organize rewrite) was enqueued and its result lands asynchronously on the post. skipped: nothing was enqueued; reason says which gate decided ('request_mode' for every intakeMode: 'request' create). existing: the create was an idempotent replay and the post was not processed again. On GET /v2/posts/{id} this field is present only for posts created with intakeMode: 'feedback' and reports how far that processing has got ('queued', 'processing', 'complete', 'needs_review', or 'skipped' with the same reason the create returned), with results listing what was made of the submission once the run has finished.

slugstringrequired

URL-friendly slug

Example: add-dark-mode-support
statusobjectrequired
tagsobject[]required

Tags attached to this post

titlestringrequired

Post title

Example: Add dark mode support
updatedAtstringrequired

ISO 8601 timestamp when last modified

Example: 2023-12-13T00:00:00.000Z
upvotesnumberrequired

Total number of upvotes

Example: 42