Event Naming Convention
Every webhook event follows a consistent naming pattern:
Events are always one of three operations:
created, updated, or deleted.
Payload Visibility Rules
All webhook payloads follow two strict visibility rules:If you previously relied on
tenant_id in payloads, note that it is no longer included. Your subscription already scopes events to your tenant.Subordinate Bubble-Up
Talview webhooks operate on root-level objects only. When a nested (subordinate) record changes, the system does not fire a separate event for the subordinate. Instead, the parent root object’supdated_at is touched in the same database transaction, which fires an updated event on the root with the full current payload.
Example
Adding an education record to a candidate does not produce acan.education.created event. Instead, it triggers a can.candidate.updated event containing the candidate’s complete profile, including the new education entry in the education array.
Why this design?
- Simplicity: Consumers subscribe to a small set of root events instead of tracking dozens of subordinate tables.
- Consistency: Every
updatedpayload is a complete snapshot of the root object — no need to merge partial updates. - Atomicity: The subordinate change and the root’s
updated_attouch happen in the same transaction, preventing ordering issues.
Versioned-Snapshot Objects
Most root objects have a dedicated history table (e.g.,sch.meeting_history, pay.transaction_status_history) that records prior states. For these objects, updated event payloads contain only the current state.
However, some objects have no history table. These are called versioned-snapshot objects, and their updated payloads include both the previous and current state:

