estimate.created, estimate.updated, estimate.deleted, estimate.sundry, and estimate.activity. Use these events to automate approval workflows, sync billing data to external accounting systems, and react to client acceptance or decline in real time.
The webhook envelope structure, delivery semantics, retry behaviour, and signature verification conventions are documented in Introduction and Verification. Those rules apply to every event on this page and are not repeated here.
The estimate object
Every event key exceptestimate.deleted carries the full estimate object. For estimate.created it appears flat directly inside data; for estimate.updated and estimate.sundry it is nested under data.estimate.
integer
The estimate’s numeric primary key.
string
One of
draft, new, accepted, revised, declined, or expired — the raw status value. Unlike invoices and tickets, there is no { title, color } wrapper object around this value.object
{ id, name } — the client this estimate belongs to.integer | null
Set when the estimate is attached to a project; otherwise
null.object
{ id, name } — the estimate category.object
date and expiry_date are date-only strings; created is an ISO 8601 timestamp with microseconds.string | null
Free-text notes on the estimate;
null when not set.string
One of
summary, inline, or none.object
subtotal, discount_type (amount, percentage, or none), discount_amount, tax_total_amount, and final_amount — all decimals expressed as strings.array
Array of line item objects. See the line item shape below.
array
[{ name, rate }] — applied tax rates.array of strings
Tag titles attached to the estimate.
The line item shape
estimate.created
Grow CRM fires estimate.created immediately after a new estimate is saved, including when an estimate is cloned. data is the full estimate object shown above.
estimate.updated
Grow CRM fires estimate.updated whenever a significant field or lifecycle state on the estimate changes. Inspect data.change to determine what changed; data.estimate always carries the complete, up-to-date estimate object.
estimate.sundry
Grow CRM fires estimate.sundry for minor field edits that don’t warrant a full estimate.updated signal. Inspect data.field to identify which field changed; data.estimate carries the full estimate object — it is not a partial diff.
estimate.activity
Grow CRM fires estimate.activity whenever an attachment on the estimate is added or removed. Estimates have no comments or logs, so this event only ever carries type: "attachment".
The estimate attachment shape does not include a
created timestamp.estimate.deleted
Grow CRM fires estimate.deleted after the estimate record is permanently removed. Because the record no longer exists, data contains only the estimate’s id.
