Webhook events reference
Every webhook topic, what it sends in data.item, and an example payload for each kind of event.
Written By Robi Rohumaa
Last updated About 2 hours ago
This page lists every webhook topic, what it sends in data.item, and an example payload for each kind of event. To set up an endpoint and verify requests, see Receive events with webhooks.
💡 data.item uses your workspace's default API version. The examples use 2026-08-19.orbit and are shortened: the real data.item has every field of the object. Follow the API reference links for the full list of fields.
How data.changes works
Update events include
data.changes: a list of{ field, oldValue, newValue }objects.Nested fields use dot paths. For example, when the status of a Request changes, you get entries for
status.id,status.name,status.type, and so on.Lists, such as
tagsorparticipants, show the complete old list and the complete new list.Conversation changes leave out
updatedAt,lastActivityAt, andwaitingSince.
Requests
data.item is a Post.
post.created: a Request was created.post.updated: a Request changed, for example its title, content, status, board, or tags. Includesdata.changes.post.deleted: a Request was deleted.data.itemis the Request as it was before it was deleted.post.voted: someone added or removed an upvote.data.itemis apost_vote:actionisaddorremove,postIdis the Request, andvoteris a contact ("object": "contact") or a teammate ("object": "admin").
Example: post.updated (status change)
Example: post.updated (status change)
{
"object": "notification_event",
"id": "notif_019a1c2e-5b7d-7f3a-9c41-2d8e6f0a1b23",
"topic": "post.updated",
"organizationId": "6595518396205e06b897ad65",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:00:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "post",
"id": "67546dfb6e1363426b90707f",
"slug": "dark-mode-for-the-dashboard",
"postUrl": "https://feedback.example.com/p/dark-mode-for-the-dashboard",
"title": "Dark mode for the dashboard",
"content": "<p>Please add a dark theme.</p>",
"boardId": "6755d0970b5d5b1fefdf54f4",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"name": "Jane Cooper",
"email": "jane@acme.com",
"profilePicture": null,
"type": "customer"
},
"status": {
"object": "post_status",
"id": "6595518396205e06b897ad6d",
"name": "Completed",
"color": "Green",
"type": "completed",
"isDefault": false
},
"tags": [],
"upvotes": 42,
"commentCount": 5,
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-09T12:00:00.000Z"
},
"changes": [
{
"field": "status.id",
"oldValue": "6595518396205e06b897ad6a",
"newValue": "6595518396205e06b897ad6d"
},
{
"field": "status.name",
"oldValue": "In Review",
"newValue": "Completed"
},
{
"field": "status.color",
"oldValue": "Sky",
"newValue": "Green"
},
{
"field": "status.type",
"oldValue": "reviewing",
"newValue": "completed"
},
{
"field": "status.isDefault",
"oldValue": true,
"newValue": false
},
{
"field": "updatedAt",
"oldValue": "2026-10-08T15:12:00.000Z",
"newValue": "2026-10-09T12:00:00.000Z"
}
]
}
}Example: post.voted
Example: post.voted
{
"object": "notification_event",
"id": "notif_019a1c31-0c4e-7d21-8b6a-41f7e2c9d0aa",
"topic": "post.voted",
"organizationId": "6595518396205e06b897ad65",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:05:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "post_vote",
"action": "add",
"postId": "67546dfb6e1363426b90707f",
"voter": {
"object": "contact",
"id": "676f0f6765bdaa7d7d760f88",
"userId": "user_123",
"email": "jane@acme.com",
"name": "Jane Cooper",
"profilePicture": null,
"type": "customer"
}
}
}
}Tickets
Tickets send ticket topics, not post topics. data.item is a Ticket, without the ticketUrl field.
ticket.created: a ticket was created.ticket.updated: a ticket changed. Includesdata.changes.ticket.deleted: a ticket was deleted.
Example: ticket.created
Example: ticket.created
{
"object": "notification_event",
"id": "notif_019a1c33-7e19-7c0d-a5f2-0b3d9e8c6f11",
"topic": "ticket.created",
"organizationId": "6595518396205e06b897ad65",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:10:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "ticket",
"id": "6a0f3c2e9b1d4e5f60718293",
"ticketNumber": 42,
"title": "Cannot log in to the dashboard",
"content": "<p>I get a 403 error when I log in.</p>",
"ticketCategoryId": "6a0f3b9d9b1d4e5f60718201",
"categoryType": "customer",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"name": "Jane Cooper",
"email": "jane@acme.com",
"profilePicture": null,
"type": "customer"
},
"status": {
"object": "post_status",
"id": "6a0f3b9d9b1d4e5f60718205",
"name": "Open",
"color": "Blue",
"type": "active",
"isDefault": true
},
"companyId": null,
"assigneeId": null,
"teamAssigneeId": null,
"open": true,
"snoozedUntil": null,
"customFields": {},
"linkedConversations": [],
"createdAt": "2026-10-09T12:10:00.000Z",
"updatedAt": "2026-10-09T12:10:00.000Z"
}
}
}Comments
data.item is a Comment. Comments on Updates have changelogId instead of postId. Replies have parentCommentId. Internal comments have isPrivate: true.
comment.created: a comment was posted.comment.updated: a comment was edited. Includesdata.changes.comment.deleted: a comment was deleted.
Example: comment.created
Example: comment.created
{
"object": "notification_event",
"id": "notif_019a1c35-2a8b-7e44-9f03-6c1d0b7a5e22",
"topic": "comment.created",
"organizationId": "6595518396205e06b897ad65",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:15:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "comment",
"id": "6a0f3d4a9b1d4e5f60718300",
"postId": "67546dfb6e1363426b90707f",
"changelogId": null,
"parentCommentId": null,
"content": "<p>We need this for late-night shifts too.</p>",
"author": {
"id": "676f0f6765bdaa7d7d760f88",
"name": "Jane Cooper",
"profilePicture": null,
"type": "customer"
},
"upvotes": 0,
"downvotes": 0,
"score": 0,
"isPrivate": false,
"isDeleted": false,
"isPinned": false,
"inReview": false,
"isSpam": false,
"createdAt": "2026-10-09T12:15:00.000Z",
"updatedAt": "2026-10-09T12:15:00.000Z"
}
}
}Updates
data.item is a Changelog. The API calls Updates changelogs.
changelog.published: an Update was published. Featurebase sends one event for each language that you publish, andlocaletells you which one. If the Update was already live in that language,data.changesshows what changed.
Example: changelog.published
Example: changelog.published
{
"object": "notification_event",
"id": "notif_019a1c37-9d60-7a15-b2c8-3e4f5a6b7c33",
"topic": "changelog.published",
"organizationId": "6595518396205e06b897ad65",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:20:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "changelog",
"id": "6a0f3e019b1d4e5f60718400",
"title": "Dark mode is here",
"slug": "dark-mode-is-here",
"url": "https://feedback.example.com/en/changelog/dark-mode-is-here",
"content": "<p>Switch to dark mode in your profile settings.</p>",
"markdownContent": "Switch to dark mode in your profile settings.",
"featuredImage": null,
"date": "2026-10-09T12:20:00.000Z",
"state": "live",
"locale": "en",
"isPublished": true,
"publishedLocales": [
"en"
],
"categories": [
{
"id": "6438a1efda3640f8feb72121",
"name": "New Features"
}
],
"createdAt": "2026-10-08T10:00:00.000Z",
"updatedAt": "2026-10-09T12:20:00.000Z"
}
}
}Conversations
data.item is a Conversation, without its messages. Conversation and message events also have conversationId and conversationUrl at the top level. All topics below include data.changes, except conversation.user.created and conversation.deleted.
conversation.user.created: a customer started a conversation.conversation.admin.assigned: the conversation was assigned to a teammate or team.conversation.admin.closed: a teammate closed the conversation.conversation.admin.opened: a teammate reopened the conversation.conversation.admin.snoozed: a teammate snoozed the conversation.snoozedUntiltells you until when.conversation.admin.unsnoozed: the conversation was unsnoozed, by a teammate or when the snooze ended.conversation.priority.updated: the priority changed.conversation.handover_requested: the AI agent handed the conversation over to a human.botConversationStateishanded_off_to_human.conversation.contact.attached: a contact was added to the conversation.conversation.contact.detached: a contact was removed from the conversation.conversation.read: the conversation was marked as read.conversation.deleted: the conversation was deleted.
Example: conversation.admin.closed
Example: conversation.admin.closed
{
"object": "notification_event",
"id": "notif_019a1c39-4f72-7b26-8d19-5a6b7c8d9e44",
"topic": "conversation.admin.closed",
"organizationId": "6595518396205e06b897ad65",
"conversationId": "12345",
"conversationUrl": "https://feedback.example.com/dashboard/inbox/all/conversation/12345",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:30:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "conversation",
"id": "12345",
"title": "Help with billing",
"state": "closed",
"priority": false,
"adminAssigneeId": "5fef50c5e9458a0012f82456",
"teamAssigneeId": null,
"participants": [
{
"type": "customer",
"id": "676f0f6765bdaa7d7d760f88"
}
],
"tags": [],
"botConversationState": "handed_off_to_human",
"snoozedUntil": null,
"createdAt": "2026-10-09T11:00:00.000Z",
"updatedAt": "2026-10-09T12:30:00.000Z"
},
"changes": [
{
"field": "state",
"oldValue": "open",
"newValue": "closed"
}
]
}
}Messages
data.item is one message (a conversation part). partType tells you the kind of message:
user_msg: a message from a customer.email_msg: an email, from a customer or a teammate.admin_msg: a reply from a teammate.bot_msg: a reply from the AI agent.admin_note: an internal note.
Message topics never include data.changes.
conversation.user.replied: a customer replied.partTypeisuser_msgoremail_msg.conversation.admin.replied: a teammate or the AI agent replied.partTypeisadmin_msg,bot_msg, oremail_msg.conversation.admin.noted: a teammate added an internal note.partTypeisadmin_note.conversation_part.redacted: a teammate redacted a message.data.itemis that message, withredacted: true.
Example: conversation.admin.replied
Example: conversation.admin.replied
{
"object": "notification_event",
"id": "notif_019a1c3b-8a13-7c37-9e2a-6b7c8d9e0f55",
"topic": "conversation.admin.replied",
"organizationId": "6595518396205e06b897ad65",
"conversationId": "12345",
"conversationUrl": "https://feedback.example.com/dashboard/inbox/all/conversation/12345",
"webhookId": "675346db13af7340748ce850",
"createdAt": "2026-10-09T12:25:00.000Z",
"data": {
"object": "notification_event_data",
"item": {
"object": "conversation_part",
"id": "3",
"partType": "admin_msg",
"bodyHtml": "<p>I have updated your billing details.</p>",
"bodyMarkdown": "I have updated your billing details.",
"channel": "desktop",
"author": {
"type": "admin",
"id": "5fef50c5e9458a0012f82456",
"name": "Sam Lee",
"email": "sam@example.com",
"profilePicture": null
},
"redacted": false,
"createdAt": "2026-10-09T12:25:00.000Z",
"updatedAt": "2026-10-09T12:25:00.000Z"
}
}
}💡 Conversation and message events need API version 2026-01-01.nova or later. Workspaces that are set to 2025-12-12.clover do not get them.
Was this helpful?
Still need help? Ask the team