Skip to content
Dashboard

Feedback

FeedbackBoards

Boards (post categories) organize feedback into distinct containers with their own settings.

List all boards
GET/v2/boards
Get a board by ID
GET/v2/boards/{id}
ModelsExpand Collapse
Board object { id, access, createdAt, 7 more }
id: string

Unique identifier

access: object { adminOnly, allowedRoles, deniedRoles, segments }
adminOnly: boolean

If true, only admins can see this board

allowedRoles: array of string

Role IDs allowed access (empty = all)

deniedRoles: array of string

Role IDs explicitly denied access

segments: array of string

Segment IDs that can access (empty = all)

createdAt: string

ISO 8601 timestamp when created

customFields: array of string

Custom field IDs attached to this board

features: object { commentsEnabled, createdDatesVisible, postingEnabled }
commentsEnabled: boolean

Whether users can comment on posts

createdDatesVisible: boolean

Whether creation dates are visible on posts

postingEnabled: boolean

Whether users can create new posts

icon: object { type, value } or object { type, value } or object { type, value }

The board’s icon. Can be one of three types:

  • emoji: A single emoji character (e.g., 💡, 🚀, ⭐)
  • icon: A predefined icon from the built-in library (e.g., lightbulb, bug, star)
  • url: A custom image URL (HTTPS required)

Can be null if no icon is set.

One of the following:
EmojiIcon object { type, value }

An emoji character as the board icon

type: "emoji"

Emoji icon type

value: string

A single emoji character

PredefinedIcon object { type, value }

A predefined icon from the built-in icon library

type: "icon"

Predefined icon type

value: string

Icon name from the predefined icon set (e.g., lightbulb, bug, star, rocket, flag, heart, check, question, megaphone, gift)

URLIcon object { type, value }

A custom icon loaded from an external URL

type: "url"

External URL icon type

value: string

HTTPS URL to a custom icon image (PNG, SVG, or WebP recommended)

formaturi
localization: object { description, formPlaceholder, heroDescription, 3 more }
description: map[string]

Localized description

formPlaceholder: map[string]

Placeholder text in the post creation form

heroDescription: map[string]

Hero description/subtitle

heroTitle: map[string]

Hero title shown on the board page

name: map[string]

Localized board name (language code → text)

submitButtonText: map[string]

Submit button text

name: string

Display name in organization’s default locale

object: "board"

Object type identifier

postDefaults: object { visibility }
visibility: "public" or "authorOnly" or "companyOnly"

Default visibility for new posts

One of the following:
"public"
"authorOnly"
"companyOnly"
BoardListResponse = array of Board { id, access, createdAt, 7 more }
id: string

Unique identifier

access: object { adminOnly, allowedRoles, deniedRoles, segments }
adminOnly: boolean

If true, only admins can see this board

allowedRoles: array of string

Role IDs allowed access (empty = all)

deniedRoles: array of string

Role IDs explicitly denied access

segments: array of string

Segment IDs that can access (empty = all)

createdAt: string

ISO 8601 timestamp when created

customFields: array of string

Custom field IDs attached to this board

features: object { commentsEnabled, createdDatesVisible, postingEnabled }
commentsEnabled: boolean

Whether users can comment on posts

createdDatesVisible: boolean

Whether creation dates are visible on posts

postingEnabled: boolean

Whether users can create new posts

icon: object { type, value } or object { type, value } or object { type, value }

The board’s icon. Can be one of three types:

  • emoji: A single emoji character (e.g., 💡, 🚀, ⭐)
  • icon: A predefined icon from the built-in library (e.g., lightbulb, bug, star)
  • url: A custom image URL (HTTPS required)

Can be null if no icon is set.

One of the following:
EmojiIcon object { type, value }

An emoji character as the board icon

type: "emoji"

Emoji icon type

value: string

A single emoji character

PredefinedIcon object { type, value }

A predefined icon from the built-in icon library

type: "icon"

Predefined icon type

value: string

Icon name from the predefined icon set (e.g., lightbulb, bug, star, rocket, flag, heart, check, question, megaphone, gift)

URLIcon object { type, value }

A custom icon loaded from an external URL

type: "url"

External URL icon type

value: string

HTTPS URL to a custom icon image (PNG, SVG, or WebP recommended)

formaturi
localization: object { description, formPlaceholder, heroDescription, 3 more }
description: map[string]

Localized description

formPlaceholder: map[string]

Placeholder text in the post creation form

heroDescription: map[string]

Hero description/subtitle

heroTitle: map[string]

Hero title shown on the board page

name: map[string]

Localized board name (language code → text)

submitButtonText: map[string]

Submit button text

name: string

Display name in organization’s default locale

object: "board"

Object type identifier

postDefaults: object { visibility }
visibility: "public" or "authorOnly" or "companyOnly"

Default visibility for new posts

One of the following:
"public"
"authorOnly"
"companyOnly"

FeedbackPosts

User-submitted feedback and feature requests. Posts belong to boards and can be upvoted, commented on, and tracked through statuses.

List all posts
GET/v2/posts
Create a new post
POST/v2/posts
Get a post by ID
GET/v2/posts/{id}
Update a post
PATCH/v2/posts/{id}
Delete a post
DELETE/v2/posts/{id}
ModelsExpand Collapse
Post object { id, access, assigneeId, 20 more }
id: string

Unique identifier

access: object { companyExternalIds, userIds }
companyExternalIds: array of string

External company IDs explicitly granted access to this post. Empty array means no company-level restrictions. Non-empty means only users belonging to these companies can see the post.

userIds: array of string

User IDs explicitly granted access to this post. Empty array means no user-level restrictions (post uses board/org visibility). Non-empty means only these users (plus admins) can see the post.

assigneeId: string

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

author: object { id, email, name, 2 more }
id: string

Author unique identifier

email: string

Author email (if available)

name: string

Author display name

profilePicture: string

Author profile picture URL

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

Type of user who authored the post

One of the following:
"admin"
"customer"
"guest"
"integration"
"bot"
"lead"
boardId: string

Board (category) ID this post belongs to

commentCount: number

Total number of comments

content: string

Post content in HTML format

createdAt: string

ISO 8601 timestamp when created

customFields: map[unknown]

Custom field values keyed by field ID

eta: string

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

features: object { commentsEnabled }
commentsEnabled: boolean

Whether comments are allowed on this post

inReview: boolean

Whether the post is pending moderation review

integrations: object { clickup, devops, github, 4 more }

Third-party integration links associated with this post

clickup: array of object { id, title, url }
id: string

ClickUp task ID

title: string

ClickUp task title

url: string

URL to the ClickUp task

devops: array of object { id, projectId, projectName, 2 more }
id: number

Azure DevOps work item ID

projectId: string

Azure DevOps project ID

projectName: string

Azure DevOps project name

title: string

Work item title

url: string

URL to the work item

github: array of object { id, number, repositoryFullName, 3 more }
id: string

GitHub issue ID

number: string

GitHub issue number

repositoryFullName: string

Full repository name (owner/repo)

repositoryName: string

Repository name

title: string

GitHub issue title

url: string

URL to the GitHub issue

hubspot: array of object { dealAmount, dealClosed, objectId, type }
dealAmount: number

Deal amount (for DEAL type)

dealClosed: boolean

Whether the deal is closed (for DEAL type)

objectId: number

HubSpot object ID

type: "TICKET" or "DEAL" or "CONTACT"

HubSpot object type

One of the following:
"TICKET"
"DEAL"
"CONTACT"
jira: array of object { issueId, issueUrl }
issueId: string

Jira issue ID

issueUrl: string

URL to the Jira issue

linear: array of object { issueId, issueUrl }
issueId: string

Linear issue ID

issueUrl: string

URL to the Linear issue

salesforce: array of object { amount, isClosed, objectId, objectType }
amount: number

Opportunity amount (for Opportunity type)

isClosed: boolean

Whether the opportunity is closed (for Opportunity type)

objectId: string

Salesforce record ID

objectType: "Opportunity" or "Case"

Salesforce object type

One of the following:
"Opportunity"
"Case"
isPinned: boolean

Whether the post is pinned to the top

object: "post"

Object type identifier

opportunityAmount: number

Total opportunity amount from linked HubSpot deals and Salesforce opportunities

postUrl: string

Full URL to view the post

slug: string

URL-friendly slug

status: PostStatus { id, color, isDefault, 3 more }
id: string

Unique identifier

color: string

Color for UI display

isDefault: boolean

Whether this is the default status for new posts

name: string

Display name

object: "post_status"

Object type identifier

type: "reviewing" or "unstarted" or "active" or 2 more

The workflow stage this status represents

One of the following:
"reviewing"
"unstarted"
"active"
"completed"
"canceled"
tags: array of object { id, color, name }

Tags attached to this post

id: string

Tag unique identifier

color: string

Tag color hex code

name: string

Tag name

title: string

Post title

updatedAt: string

ISO 8601 timestamp when last modified

upvotes: number

Total number of upvotes

PostDeleteResponse object { id, deleted, object }
id: string

Unique identifier of the deleted post

deleted: true

Indicates the resource was deleted

object: "post"

Object type identifier

FeedbackPostsVoters

User-submitted feedback and feature requests. Posts belong to boards and can be upvoted, commented on, and tracked through statuses.

List voters on a post
GET/v2/posts/{id}/voters
Add a voter to a post
POST/v2/posts/{id}/voters
Remove a voter from a post
DELETE/v2/posts/{id}/voters
ModelsExpand Collapse
VoterListResponse object { id, name, object, 16 more }
id: string

Unique identifier

name: string

User display name

object: "contact"

Object type identifier

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

Type of user

One of the following:
"admin"
"customer"
"guest"
"integration"
"bot"
"lead"
commentsCreated: optional number

Number of comments created

companies: optional array of Company { id, companyId, companySize, 11 more }

Companies the user belongs to

id: string

Featurebase internal ID

companyId: string

External company ID from your system

companySize: number

Company employee headcount

createdAt: string

ISO date when company was created

industry: string

Industry

lastActivity: string

ISO date of last activity

linkedUsers: number

Number of users linked to this company

monthlySpend: number

Monthly spend

name: string

Company name

object: "company"

Object type identifier

plan: string

Plan or tier name

updatedAt: string

ISO date when company was last updated

website: string

Company website URL

customFields: optional map[unknown]

Custom field values

customFields: optional map[unknown]

Custom field values on the user

description: optional string

User description/bio

email: optional string

User email

lastActivity: optional string

Last activity ISO timestamp

locale: optional string

User locale

manuallyOptedOutFromChangelog: optional boolean

Whether manually opted out from changelog

organizationId: optional string

Organization ID the user belongs to

postsCreated: optional number

Number of posts created

profilePicture: optional string

Profile picture URL

roles: optional array of string

User roles

subscribedToChangelog: optional boolean

Whether subscribed to changelog

userId: optional string

External user ID from SSO

verified: optional boolean

Whether email is verified

VoterAddResponse object { id, added, object, postId }
id: string

Voter unique identifier

added: true

Indicates the voter was added

object: "voter"

Object type identifier

postId: string

Post ID the voter was added to

VoterRemoveResponse object { id, object, postId, removed }
id: string

Voter unique identifier

object: "voter"

Object type identifier

postId: string

Post ID the voter was removed from

removed: true

Indicates the voter was removed

FeedbackPost Statuses

Post statuses define the workflow stages for posts (e.g., In Review, Active, Completed).

List all post statuses
GET/v2/post_statuses
Get a post status by ID
GET/v2/post_statuses/{id}
ModelsExpand Collapse
PostStatus object { id, color, isDefault, 3 more }
id: string

Unique identifier

color: string

Color for UI display

isDefault: boolean

Whether this is the default status for new posts

name: string

Display name

object: "post_status"

Object type identifier

type: "reviewing" or "unstarted" or "active" or 2 more

The workflow stage this status represents

One of the following:
"reviewing"
"unstarted"
"active"
"completed"
"canceled"
PostStatusListResponse = array of PostStatus { id, color, isDefault, 3 more }
id: string

Unique identifier

color: string

Color for UI display

isDefault: boolean

Whether this is the default status for new posts

name: string

Display name

object: "post_status"

Object type identifier

type: "reviewing" or "unstarted" or "active" or 2 more

The workflow stage this status represents

One of the following:
"reviewing"
"unstarted"
"active"
"completed"
"canceled"

FeedbackComments

Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.

List comments
GET/v2/comments
Create a new comment
POST/v2/comments
Get a comment by ID
GET/v2/comments/{id}
Update a comment
PATCH/v2/comments/{id}
Delete a comment
DELETE/v2/comments/{id}
Delete a comment
DELETE/v2/comment
ModelsExpand Collapse
Comment object { id, author, changelogId, 14 more }
id: string

Unique identifier

author: object { id, name, profilePicture, type }
id: string

Author unique identifier

name: string

Author display name

profilePicture: string

Author profile picture URL

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

Type of user who authored the comment

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

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

Parent comment ID for replies, null for root comments

postId: string

Post ID this comment belongs to

score: number

Net score (upvotes - downvotes)

updatedAt: string

ISO 8601 timestamp when updated

upvotes: number

Number of upvotes

CommentDelete0Response object { id, deleted, object }
id: string

Unique identifier of the deleted comment

deleted: true

Indicates the resource was deleted

object: "comment"

Object type identifier

CommentDelete1Response object { success }
success: boolean

FeedbackCustom Fields

Configurable input fields for posts in your Featurebase organization. Custom fields allow you to collect additional structured data when users create posts.

List custom fields
GET/v2/custom_fields
Get a custom field by ID
GET/v2/custom_fields/{id}
ModelsExpand Collapse
CustomField object { id, label, object, 9 more }
id: string

Unique identifier

label: string

Field label displayed to users

object: "custom_field"

Object type identifier

type: "text" or "number" or "select" or 4 more

Field type

One of the following:
"text"
"number"
"select"
"multi-select"
"checkbox"
"date"
"file"
allowMultiple: optional boolean

Whether multiple files can be uploaded (file fields only)

createdAt: optional string

ISO timestamp when created

internal: optional boolean

Whether the field is for internal use only

options: optional array of object { id, label }

Options for select/multi-select fields

id: string

Option unique identifier

label: string

Option display label

placeholder: optional string

Placeholder text

public: optional boolean

Whether the field value is publicly visible

required: optional boolean

Whether the field is required

updatedAt: optional string

ISO timestamp when last updated

CustomFieldList object { data, nextCursor, object, pagination }
data: array of CustomField { id, label, object, 9 more }

Array of custom fields

id: string

Unique identifier

label: string

Field label displayed to users

object: "custom_field"

Object type identifier

type: "text" or "number" or "select" or 4 more

Field type

One of the following:
"text"
"number"
"select"
"multi-select"
"checkbox"
"date"
"file"
allowMultiple: optional boolean

Whether multiple files can be uploaded (file fields only)

createdAt: optional string

ISO timestamp when created

internal: optional boolean

Whether the field is for internal use only

options: optional array of object { id, label }

Options for select/multi-select fields

id: string

Option unique identifier

label: string

Option display label

placeholder: optional string

Placeholder text

public: optional boolean

Whether the field value is publicly visible

required: optional boolean

Whether the field is required

updatedAt: optional string

ISO timestamp when last updated

nextCursor: string

Cursor for fetching the next page (cursor-based pagination)

object: "list"

Object type identifier