Skip to main content

Timesheets

New to webhooks? Start with Getting started (envelope, delivery, retries) and Verification (confirming a request came from Grow CRM). Those conventions apply to every event below and are not repeated here.
Timesheets expose three keys: timesheet.created, timesheet.updated, timesheet.deleted. There is no .sundry or .activity — a time entry has no minor fields and no child records.

Manually-recorded time only

These events cover time entered through the Timesheets section. Time captured with the built-in task timer (start/stop on a task) does not fire them. That is deliberate: a running timer is not yet a completed record, and stop/start churn would produce a large volume of low-value deliveries. If you need timer-tracked hours, read them from the API rather than expecting a webhook.

The timesheet object

.created and .updated carry this shape — flat for .created, nested under timesheet for .updated:

timesheet.created

Fires when time is recorded in the Timesheets section. One submission can create several timesheets — the form accepts a row per assigned task. Each recorded row delivers its own timesheet.created event; there is no combined event.

timesheet.updated

Fires on a significant change. data.change tells you which; data.timesheet is the full object.

timesheet.deleted

Fires after the timesheet is deleted. data is just the id — the record no longer exists to describe. Deleting is a checkbox selection, so removing several timesheets at once delivers one event per timesheet, not one event containing a list.