Skip to content
Last updated

Topic types

Featurebase webhooks support the following event topics. Subscribe to the topics you need when registering your webhook.

Available topics

Feedback & changelog topics

TopicDescription
post.createdA new post was created
post.updatedAn existing post was updated
post.deletedA post was successfully deleted
post.votedA post received a vote
changelog.publishedA new changelog entry was published
comment.createdA new comment was created
comment.updatedAn existing comment was updated
comment.deletedA comment was successfully deleted

Conversation topics

TopicDescription
conversation.user.createdA user started a new conversation
conversation.user.repliedA user (contact) replied to a conversation
conversation.admin.repliedAn admin replied to a conversation
conversation.admin.notedAn admin added an internal note to a conversation
conversation.admin.closedAn admin closed a conversation
conversation.admin.openedAn admin reopened a conversation
conversation.admin.snoozedAn admin snoozed a conversation
conversation.admin.unsnoozedA conversation was unsnoozed (manually or automatically)
conversation.admin.assignedA conversation was assigned to an admin or team
conversation.priority.updatedA conversation's priority was changed
conversation.handover_requestedAn AI agent requested handover to a human agent
conversation.deletedA conversation was deleted
conversation.contact.attachedA contact was added as a participant to a conversation
conversation.contact.detachedA contact was removed from a conversation
conversation.readA conversation was marked as read
conversation_part.redactedA conversation part (message) was redacted

Post events

post.created

Triggered when a user or admin creates a new post (feedback, feature request, bug report, etc.).

Payload includes:

  • object: 'post' - Type identifier
  • Full post details (title, content, status, boardId)
  • author object with user details
  • Post metadata (slug, createdAt, upvotes)

post.updated

Triggered when any field on a post is modified, including:

  • Title or content changes
  • Status changes (e.g., "In Review" → "Completed")
  • Board changes
  • Tag modifications

The changes array in the payload shows exactly what was modified. Field names use Nova conventions (e.g., boardId, status).

post.deleted

Triggered when a post is permanently deleted from the system.

Payload includes:

  • Full post details at the time of deletion
  • author information

post.voted

Triggered when a user upvotes or removes their upvote from a post.

Payload includes:

  • object: 'post_vote' - Type identifier
  • action: Either "add" or "remove"
  • postId: The post ID that was voted on
  • voter: The user who voted (either { object: 'admin', ... } or { object: 'contact', ... })

Changelog events

changelog.published

Triggered when a changelog entry is published (made live).

Payload includes:

  • object: 'changelog' - Type identifier
  • Full changelog details (title, content, featuredImage)
  • Locale information
  • firstPublishInLocale: Whether this is the first publish in this locale
  • categories array with notification settings

Comment events

comment.created

Triggered when a new comment is posted on any post.

Payload includes:

  • object: 'comment' - Type identifier
  • Comment content and metadata
  • author object with user information
  • postId: Parent post reference
  • parentCommentId: For replies, the parent comment ID (flat structure)
  • isPrivate: Privacy setting

comment.updated

Triggered when a comment's content is modified.

Payload includes:

  • Updated comment content
  • The changes array showing what was modified

comment.deleted

Triggered when a comment is permanently deleted.

Payload includes:

  • Full comment details at the time of deletion

Conversation events

Conversation webhooks include conversationId and conversationUrl fields in the top-level envelope alongside the standard fields. These topics are split into two categories based on what data.item contains.

Conversation-level topics

These topics send a full Conversation object as data.item, excluding the conversationParts array (individual messages are not included — use the Conversations API to fetch them if needed). Topics that represent a state change also include a data.changes array showing what fields were modified.

The data.changes array contains objects with field, oldValue, and newValue properties. Fields like updatedAt, lastActivityAt, and waitingSince are excluded from the diff.

conversation.user.created

Triggered when a user (contact or lead) starts a new conversation through the messenger or email.

data.item: Conversation object
data.changes: Not included

conversation.admin.closed

Triggered when an admin closes a conversation.

data.item: Conversation object (with state: "closed")
data.changes: Included (e.g., state changed from "open" to "closed")

conversation.admin.opened

Triggered when an admin reopens a previously closed or snoozed conversation.

data.item: Conversation object (with state: "open")
data.changes: Included (e.g., state changed to "open")

conversation.admin.snoozed

Triggered when an admin snoozes a conversation until a specific time.

data.item: Conversation object (with state: "snoozed" and snoozedUntil timestamp)
data.changes: Included (e.g., state changed to "snoozed")

conversation.admin.unsnoozed

Triggered when a snoozed conversation is unsnoozed, either manually by an admin or automatically when the snooze timer expires.

data.item: Conversation object (with state: "open")
data.changes: Included (e.g., state changed from "snoozed" to "open")

conversation.admin.assigned

Triggered when a conversation is assigned to an admin or team, or when the assignment changes.

data.item: Conversation object
data.changes: Included (e.g., adminAssigneeId or teamAssigneeId changed)

conversation.priority.updated

Triggered when a conversation's priority flag is changed.

data.item: Conversation object
data.changes: Included (e.g., priority changed from false to true)

conversation.handover_requested

Triggered when the AI agent determines it cannot handle the conversation and requests handover to a human agent.

data.item: Conversation object (with botConversationState: "handed_off_to_human")
data.changes: Included (e.g., botConversationState changed)

conversation.deleted

Triggered when a conversation is permanently deleted.

data.item: Conversation object at the time of deletion
data.changes: Not included

conversation.contact.attached

Triggered when a contact is added as a participant to an existing conversation.

data.item: Conversation object
data.changes: Included (e.g., participants changed)

conversation.contact.detached

Triggered when a contact is removed from a conversation's participants.

data.item: Conversation object
data.changes: Included (e.g., participants changed)

conversation.read

Triggered when read receipts are updated on a conversation.

data.item: Conversation object (with updated readReceipts)
data.changes: Included (e.g., readReceipts changed)

Message-level topics

These topics send a single ConversationPart object as data.item. The specific variant depends on the partType discriminator. These topics never include data.changes.

conversation.user.replied

Triggered when a contact replies to an existing conversation.

data.item: ConversationPart — either a UserMessagePart (partType: "user_msg") or an EmailMessagePart (partType: "email_msg" from a contact)

conversation.admin.replied

Triggered when an admin or bot sends a reply visible to the user in a conversation.

data.item: ConversationPart — an AdminMessagePart (partType: "admin_msg"), BotMessagePart (partType: "bot_msg"), or EmailMessagePart (partType: "email_msg" from an admin)

conversation.admin.noted

Triggered when an admin adds an internal note to a conversation. Internal notes are only visible to other admins.

data.item: ConversationPart — an AdminNotePart (partType: "admin_note")

conversation_part.redacted

Triggered when a conversation part (message) is redacted by an admin.

data.item: ConversationPart — the redacted part (any human message part variant with redacted: true)

Nova field naming conventions

Nova webhooks use the standardized API field naming:

ResourceKey Fields
PostboardId, status, author, tags, isPinned, createdAt, updatedAt
CommentpostId, parentCommentId, author, isPinned
VotepostId, voter (with object: 'admin' or object: 'contact')
Changelogcategories (not changelogCategories)
Conversationstate, priority, adminAssigneeId, teamAssigneeId, participants, source, readReceipts, botConversationState

Next steps

  • Handler examples - Code examples for processing webhooks