Skip to content
Last updated

Consuming webhooks

When your app receives a webhook request from Featurebase, check the topic attribute to see what event caused it. The first part of the event type will tell you the payload type, e.g., a post, comment, etc.

Basic payload structure

{
  "id": "notif_0193a6e6-fb6b-78ef-b71f-15008d9f9cde",
  "object": "notification_event",
  "topic": "post.updated",
  "data": {
    "object": "notification_event_data",
    "item": {
      "id": "6755c4afb12a37dffa6319b0",
      "object": "post",
      "title": "My new title"
    },
    "changes": [
      {
        "field": "title",
        "oldValue": "My old title",
        "newValue": "My new title"
      }
    ]
  }
}

In the example above, a post was updated, and the payload type is a notification_event_data. Notice how the changes array contains the old and new values for the changed fields.

Full payload structure

Each webhook event includes:

FieldDescription
objectAlways "notification_event"
topicThe specific event type
organizationIdYour organization's unique identifier
dataContains the event details
data.objectAlways "notification_event_data"
data.itemThe resource that triggered the event
data.changesFor update events, shows what changed
idUnique identifier for the webhook event
webhookIdID of the webhook configuration
createdAtTimestamp when the event occurred
deliveryStatusCurrent delivery status of the webhook

The item object structure varies based on the event type, but always includes the resource's essential data and any relevant timestamps.

Nova format differences

Nova webhook payloads use the standardized API format with key differences from the legacy Clover format:

AspectNova Format
Type identifierobject: 'resource_name'
Board referenceboardId
Authorauthor: { id, name, profilePicture }
Statusstatus: { object: 'post_status', ... }
Tagstags: [...]
Comments enabledfeatures.commentsEnabled
Access controlaccess.userIds, access.companyExternalIds
TimestampscreatedAt, updatedAt
PinnedisPinned

Example full payload

{
  "object": "notification_event",
  "topic": "post.updated",
  "organizationId": "6595518396205e06b897ad65",
  "data": {
    "object": "notification_event_data",
    "item": {
      "id": "67546dfb6e1363426b90707f",
      "object": "post",
      "title": "New title",
      "content": "<p>New content</p>",
      "boardId": "6755d0970b5d5b1fefdf54f4",
      "status": {
        "object": "post_status",
        "id": "6595518396205e06b897ad6d",
        "name": "Completed",
        "color": "Green",
        "type": "completed",
        "isDefault": false
      },
      "author": {
        "id": "5fef50c5e9458a0012f82456",
        "name": "Admin",
        "email": "admin@example.com",
        "profilePicture": "https://example.com/profile.jpg"
      },
      "createdAt": "2024-12-08T17:06:30.577Z",
      "updatedAt": "2024-12-08T17:06:30.577Z"
    },
    "changes": [
      {
        "field": "title",
        "oldValue": "Old title",
        "newValue": "New title"
      },
      {
        "field": "content",
        "oldValue": "<p>Old content</p>",
        "newValue": "<p>New content</p>"
      }
    ]
  },
  "id": "notif_0193a70c-3015-757c-a260-22ae37c86608",
  "webhookId": "675346db13af7340748ce850",
  "createdAt": "2024-12-08T16:13:34.102Z",
  "deliveryStatus": "pending"
}

Next steps

  • Topic types - View all available webhook event types