Fixed
Employee data webhooks: table entry events payload updated
about 14 hours ago
The table.entry.created and table.entry.updated webhook events now return cleaner payloads (starting March 24, 2026). The row identifier fields are now included only when relevant to the table type.
What changed
- The
idandeffectiveDatefields are now optional and returned based on the table type. - Historical tables: include
effectiveDateas the row identifier. - Non-historical tables: include
idas the row identifier. - Previously, both fields were always returned, with null values when not applicable.
Why this matters
- Consistency: Aligns with other webhook events that return context-specific data.
- Clearer contract: Payload structure reflects how entries are actually identified.
- Simpler handling: No need to handle null values for irrelevant identifiers.
- More robust parsing: Encourages handling payloads based on table type, not field presence.
Examples
Historical table (e.g. lifecycle, work)
"companyId": 636192,
"type": "table.entry.created",
"triggeredBy": "3332883804594373380",
"triggeredAt": "2025-01-08T13:06:26.915906",
"version": "v2",
"data": {
"employeeId": "3332883854254932743",
"tableId": "lifecycle",
"effectiveDate": "2025-01-08"
}
}
Non-historical table (e.g. bank accounts, custom table)
{
"companyId": 636192,
"type": "table.entry.created",
"triggeredBy": "3332883804594373380",
"triggeredAt": "2025-01-08T13:54:03.608759",
"version": "v2",
"data": {
"employeeId": "3332883904477528858",
"tableId": "bankAccounts",
"id": 6236350
}
}
Action required
Check your code compatibility
- No action required if your integration already handles identifiers based on table type.
- Update your logic if you assumed both id and effectiveDate are always present:
- Do not rely on
nullvalues.- Use the table type to determine which identifier to expect.
Learn more
See schema and examples in:
