Skip to main content
API guides

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 3 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 tags or participants, show the complete old list and the complete new list.

  • Conversation changes leave out updatedAt, lastActivityAt, and waitingSince.

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. Includes data.changes.

  • post.deleted: a Request was deleted. data.item is the Request as it was before it was deleted.

  • post.voted: someone added or removed an upvote. data.item is a post_vote: action is add or remove, postId is the Request, and voter is a contact ("object": "contact") or a teammate ("object": "admin").

{
  "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"
      }
    ]
  }
}
{
  "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. Includes data.changes.

  • ticket.deleted: a ticket was deleted.

{
  "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. Includes data.changes.

  • comment.deleted: a comment was deleted.

{
  "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, and locale tells you which one. If the Update was already live in that language, data.changes shows what changed.

{
  "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. snoozedUntil tells 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. botConversationState is handed_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.

{
  "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. partType is user_msg or email_msg.

  • conversation.admin.replied: a teammate or the AI agent replied. partType is admin_msg, bot_msg, or email_msg.

  • conversation.admin.noted: a teammate added an internal note. partType is admin_note.

  • conversation_part.redacted: a teammate redacted a message. data.item is that message, with redacted: true.

{
  "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