# 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 ```json { "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: | Field | Description | | --- | --- | | `object` | Always `"notification_event"` | | `topic` | The specific event type | | `organizationId` | Your organization's unique identifier | | `data` | Contains the event details | | `data.object` | Always `"notification_event_data"` | | `data.item` | The resource that triggered the event | | `data.changes` | For update events, shows what changed | | `id` | Unique identifier for the webhook event | | `webhookId` | ID of the webhook configuration | | `createdAt` | Timestamp when the event occurred | | `deliveryStatus` | Current 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: | Aspect | Nova Format | | --- | --- | | Type identifier | `object: 'resource_name'` | | Board reference | `boardId` | | Author | `author: { id, name, profilePicture }` | | Status | `status: { object: 'post_status', ... }` | | Tags | `tags: [...]` | | Comments enabled | `features.commentsEnabled` | | Access control | `access.userIds`, `access.companyExternalIds` | | Timestamps | `createdAt`, `updatedAt` | | Pinned | `isPinned` | ## Example full payload ```json { "object": "notification_event", "topic": "post.updated", "organizationId": "6595518396205e06b897ad65", "data": { "object": "notification_event_data", "item": { "id": "67546dfb6e1363426b90707f", "object": "post", "title": "New title", "content": "

New content

", "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": "

Old content

", "newValue": "

New content

" } ] }, "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