A reference for all webhook events emitted by Knit during syncs, bot / chat integrations, and record changes. Use these events to build real-time, event-driven integrations.
Knit uses webhook events to notify your server about changes in connected applications - such as new or modified employee records, sync progress, and bot/chat activity for communication apps.
Each event is delivered as a POST request to your configured webhook URL.
For details on verifying that a webhook is genuinely from Knit, see Authenticating Webhooks.
Record Events
These events track changes to individual records (e.g., employees in HRIS integrations, candidates in ATS integrations, deals in CRM integrations, etc.) in the connected application.
Here is a list of events you can expect in Knit Webhooks
| Event ID | Event Description | Notes |
|---|---|---|
record.new | Fired when a new record is encountered during a sync | During an initial sync All active records are treated as new records. This gives you a complete baseline dataset to start with. |
record.modified | Fired when an existing record has changed in the origin system. | If any of the subscribed data fields / watch fields change for a record you will receive a record.modified event. |
record.deleted | Fired when either an active record is marked as inactive in the origin system (ex: terminated employee) or an active record is no longer present in the origin system. | Two distinct scenarios trigger this event: soft deletes (inactive status) and hard deletes (record removed). Handle both cases in your integration. |
Sync Lifecycle Events
| Event ID | Event Description | Notes |
|---|---|---|
sync.heartbeat | Fired every 90 seconds during a long-running sync to indicate progress | Contains the count of records processed so far. Useful for monitoring long-running syncs. |
sync.events.processed | Fired when a sync completes. And all the events have been emitted by Knit for a sync | This event will also contain count of records processed and events emitted. This event is always emitted, even if there are no new events to emit. So, use this track when your sync runs complete. |
sync.events.allConsumed | Fired when all the events emitted during a sync have been consumed by your webhook. | We mark an event as consumed once we receive an HTTP Response of status 200 from the webhook. See retry behavior below. |
sync.failed | Fired when a sync run fails | This is a terminal event - if fired, neither sync.events.processed nor sync.events.allConsumed will be emitted for that sync run. |
Webhook Retry Behavior
If your webhook returns a non-200 status, or if the connection is refused or closed, Knit will retry delivery multiple times over a 4-day window. Make sure your endpoint is idempotent to handle potential duplicate deliveries.
Typical Sync Event Sequence
To help you understand the order in which events fire during a normal sync:
record.new
/
record.modified
/
record.deleted
sync.events.processed
sync.events.allConsumed
Bot Events (Only For Communication App Integrations)
These events are fired when a bot (used in Communication integrations) is installed or uninstalled in a connected workspace.
| Event ID | Description | Notes |
|---|---|---|
bot.installed | Fired after a bot has been installed in Teams or Slack workspace. | You can only start using Knit's Communication APIs after receiving this event. |
bot.uninstalled | Fired after a bot has been uninstalled from a Slack workspace or teams |

