Employee data in Bob includes profile fields, tables (such as work history, bank accounts, and lifecycle), and custom fields. Webhooks notify your endpoint when employees are created, updated, or deleted, when table entries change, and when lifecycle status changes (e.g., joined, terminated, or on leave).
Before you begin
- Explore Getting started with Bob webhooks to learn how to work with webhooks.
Employee webhook events
There are three types of employee update events: Update event, table events and lifecycle events.
Employee update events
| Event | Type | Description |
|---|---|---|
| Created | employee.created | Triggered when an employee is created. |
| Updated | employee.updated | Triggered when an employee's field is updated. |
| Deleted | employee.deleted | Triggered when an employee is deleted |
Employee table events
Triggered when an entry is created or updated. Relevant to specific out-of-the-box tables.
| Event | Type | Description |
|---|---|---|
| Table Entry Created | table.entry.created | Triggered when an entry is added to an employee's table. |
| Table Entry Updated | table.entry.updated | Triggered when an entry is updated in an employee's table. |
Table events behavior
- Deleting a table entry will not trigger a webhook event.
- When adding or updating an entry in an employee table, this action will trigger the following events:
<th> Description </th> </tr> </thead> <tbody> <tr> <td> **`table.entry.created`** **`table.entry.updated`** </td> <td> Will trigger when updating or creating an entry in an employee table, including out-of-the-box and custom tables. **Note**: The following tables **do not trigger** this event: `Training`, `Equity`, `Positions`, `Jobs`. </td> </tr> <tr> <td> **employee.updated** </td> <td> Will trigger only for the out-of-the-box **historical employee table** (with an effective date) when the effective date is reached - see Lifecycle events below for more details. **Note**: Custom tables will not trigger this event. </td> </tr> </tbody>
Event
Table entry events and employee.updated
When a table entry is created or updated, it may also update employee-level fields (for example, derived or linked fields). In that case you will also receive an employee.updated event with the list of changed field IDs in fieldUpdates. Bank accounts and custom tables do not trigger this additional employee.updated event. For payload examples (after lifecycle, work, salary, address, variable pay, entitlement, and other table changes), see the employee.updated webhook in the API reference.
Employee Lifecycle events
Lifecycle events fire when an employee's status changes (e.g. joined, terminated, on leave). They are triggered only when the lifecycle entry becomes effective. To learn more, see lifecycle status in Bob.
| Event | Type | Description |
|---|---|---|
| Joined | employee.joined | Triggered when an employee is granted access, once the lifecycle entry becomes effective. |
| Terminated | employee.left | Triggered when an employee is set as terminated or on Garden leave, once the entry is effective. |
| Activated | employee.activated | Triggered when an employee's access is enabled, once the lifecycle entry becomes effective. |
| Inactivated | employee.inactivated | Triggered when an employee is set to on leave or terminated, once the entry is effective. |
| On Leave | employee.temporaryLeave | Triggered when an employee is set to temporary leave, once the entry is effective. |
Notes:
- Lifecycle events (Inactivated, Activated, Joined, Terminated, On Leave) will be triggered automatically when the lifecycle entry becomes effective as part of Bob flows.
- When triggered via the flow, the lifecycle events will be added to the lifecycle table and triggered automatically at midnight on the effective date of the lifecycle table entry. For example, if an employee is terminated with an effective date of April 17, the termination event will trigger at midnight on April 18 (according to the site’s timezone).
- To learn more, see Handling scheduled employee changes.
How employee tables trigger events
When an employee's status is updated, Bob creates an entry in the relevant table with the date the change becomes effective (e.g., a promotion), and the status change event is triggered on that date.
When a scheduled change is added, Bob triggers the following webhook events:
- table.entry.created – Fires immediately when a new entry is added to the relevant table.
- table.entry.updated – Fires when changes occur in the existing entry.
- employee.updated – Fires immediately if the new entry affects employee fields.
- Lifecycle specific events – Some actions (e.g., an employee joining the company) trigger extra events like employee.joined at the effective date.
Handling Employee events
-
The webhook sends a notification to your endpoint when an employee or table event is triggered. The payload includes
employeeIdand, for updates, the changed field IDs or table entry identifiers (tableId,effectiveDateorid). -
Retrieve the employee or table data
- Use the employee ID or table name and entry identifier to retrieve full details via the API.
- For employee.updated, use the field IDs in the payload to retrieve the fields that were changed.
- For table.entry.created or table.entry.updated, use the appropriate Employee tables endpoint. For custom tables only, the request includes a
get-tableheader with the full URL to call to read that table entry (e.g.https://api.hibob.com/v1/people/custom-tables/{employeeId}/{custom_table_id}). For out-of-the-box tables the path is well known; for custom tables this header makes it easier to access the entry because the table ID (e.g.category_1716214820047__table_1716214839517) is already in the URL.
Notes:
- The payload of employee.updated includes only the field IDs that were explicitly changed. Calculated fields (e.g. age, shortBirthDate when birthDate changes) are not included; retrieve them via API if needed.
- The payload of employee.deleted includes the employee email, since the record is no longer available after deletion. Use it to keep a reference to the deleted employee.
- The payload of Table entry events uses
effectiveDatefor historical tables (e.g. work, employment, lifecycle, salary) andidfor non-historical tables (e.g. bank accounts). Use the correct identifier when calling the table API to find the row
To learn more about employee data modeling and table types, see Explore Employee data API.
