Event-Based Webhooks
Overview
Event-Based Webhooks are the recommended way to receive notifications about employee changes in BambooHR. They use a simpler, event-driven payload format compared to Field-Based (Global) Webhooks.
When creating or editing a webhook in Account Settings > Webhooks, you can choose between Event-Based (recommended) and Field-Based data structures.
Supported Events
| Event | Description |
|---|---|
employee.created | An employee record was created |
employee.updated | One or more monitored fields on an employee record were changed |
employee.deleted | An employee record was deleted |
company.updated | Company information or company status changed |
company.deleted | A company status change resulted in the company being considered deleted/closed |
company-integrations.updated | A company's integration settings were enabled, disabled, or updated |
The
employee.updatedevent requires at least one monitor field to be selected. The webhook will only fire when one of the monitored fields changes. Theemployee.created,employee.deleted,company.updated,company.deleted, andcompany-integrations.updatedevents do not support monitor fields.
company.updated vs. company.deleted: Both events are triggered by a change to company status. If the new status is DELETED or CANCELLED, company.deleted fires instead of company.updated.
Webhook Data Format
Event-Based Webhooks can be posted in two encodings: JSON (recommended) or Form Post (URL-encoded form data).
When creating webhooks via the api, to receive the event based payload described here, ensure the event(s) subscribed to are employee.updated, employee.created, employee.deleted, company.updated, company.deleted, and company-integrations.updated.
JSON Format
{
"type": "employee.updated",
"timestamp": "2026-01-31T18:42:00+0000",
"data": {
"companyId": "12345",
"employeeId": "67890",
"changedFields": [
"firstName"
]
}
}Form Post Format
type=employee.updated
data[companyId]=12345
data[employeeId]=67890
data[changedFields][0]=firstNamePayload Fields
| Field | Type | Description |
|---|---|---|
type | string | The event type that triggered the webhook (e.g., employee.updated). |
timestamp | string | ISO 8601 timestamp indicating when the event occurred. |
data.companyId | string | The ID of the company where the change happened. |
data.employeeId | string | The ID of the employee affected by the change. Present on employee.* events. |
data.changedFields | array | An array of field names that were changed. Present on employee.updated events. |
Event-Specific Behavior
employee.created: Thedataobject containscompanyIdandemployeeId. NochangedFieldsarray is included.employee.updated: Thedataobject containscompanyId,employeeId, and achangedFieldsarray listing the names of the fields that were modified.employee.deleted: Thedataobject containscompanyIdandemployeeId. NochangedFieldsarray is included.company.updated: Thedataobject contains onlycompanyId.company.deleted: Thedataobject contains onlycompanyId.company-integrations.updated: Thedataobject contains onlycompanyId. Fires for any integration settings change for the company, including enabling, disabling, or updating a configuration.
Event-Based Webhooks are ideal when you want a lightweight notification that a change occurred, then fetch the latest data via the BambooHR API. This approach ensures you always have the most current data and avoids issues with payload size or field ordering.