> ## Documentation Index
> Fetch the complete documentation index at: https://webhooks.docs.crm.africa/llms.txt
> Use this file to discover all available pages before exploring further.

# Grow CRM Task Webhook Events: Full Payload Reference

> Reference for task.created, task.updated, task.deleted, task.sundry, and task.activity webhook event payloads for project tasks in Grow CRM.

Grow CRM emits five webhook event keys for the Tasks resource: `task.created`, `task.updated`, `task.deleted`, `task.sundry`, and `task.activity`. Use these events to track task lifecycle changes, react to status transitions, and process comments and checklist activity in real time. Every key except `task.deleted` carries the full task object.

<Note>
  The webhook envelope structure, delivery behaviour, and retry logic are documented in [Introduction](/introduction). Signature verification is covered in [Verification](/verification). Those conventions apply to every event on this page and are not repeated here.
</Note>

***

## The task object

Every event key except `task.deleted` carries this shape — flat inside `data` for `task.created`, or nested under `data.task` for `task.updated` and `task.sundry`.

| Field          | Type             | Notes                                                                                            |
| -------------- | ---------------- | ------------------------------------------------------------------------------------------------ |
| `id`           | integer          | `task_id`.                                                                                       |
| `title`        | string           |                                                                                                  |
| `description`  | string\|null     |                                                                                                  |
| `status`       | object           | `{ id, title, color }`.                                                                          |
| `priority`     | object           | `{ id, title }` — `title` is `null` if no priority is set.                                       |
| `active_state` | string           | `active` or `archived`.                                                                          |
| `billable`     | string           | `yes` or `no`.                                                                                   |
| `project`      | object           | `{ id, title }`.                                                                                 |
| `client`       | object           | `{ id, name }`.                                                                                  |
| `dates`        | object           | `start` and `due` are date-only strings; `created` and `updated` are ISO 8601 with microseconds. |
| `assigned`     | array            | `[{ id, name }]`, one entry per assigned user.                                                   |
| `tags`         | array of strings |                                                                                                  |

```json theme={null}
{
  "id": 512,
  "title": "Build homepage wireframe",
  "description": "First-pass layout for review.",
  "status": { "id": 2, "title": "In Progress", "color": "info" },
  "priority": { "id": 2, "title": "High" },
  "active_state": "active",
  "billable": "yes",
  "project": { "id": 305, "title": "Website Redesign" },
  "client": { "id": 12, "name": "Acme Inc" },
  "dates": {
    "start": "2026-07-16",
    "due": "2026-07-20",
    "created": "2026-07-16T08:00:00.000000Z",
    "updated": "2026-07-16T08:12:00.000000Z"
  },
  "assigned": [{ "id": 34, "name": "John Smith" }],
  "tags": ["design"]
}
```

***

## `task.created`

Fires when a task is created, **including via clone**. `data` is the full task object.

```json theme={null}
{
  "event": "task.created",
  "id": 512,
  "created": "2026-07-16T08:00:00+00:00",
  "data": {
    "id": 512,
    "title": "Build homepage wireframe",
    "description": null,
    "status": { "id": 1, "title": "Not Started", "color": "default" },
    "priority": { "id": null, "title": null },
    "active_state": "active",
    "billable": "no",
    "project": { "id": 305, "title": "Website Redesign" },
    "client": { "id": 12, "name": "Acme Inc" },
    "dates": {
      "start": null,
      "due": null,
      "created": "2026-07-16T08:00:00.000000Z",
      "updated": "2026-07-16T08:00:00.000000Z"
    },
    "assigned": [],
    "tags": []
  }
}
```

***

## `task.updated`

Fires on a significant change to a task. Read `data.change` to determine what changed; `data.task` contains the full task object reflecting the new state.

<Info>
  There is no `edited` change for tasks. Core has no single "task edited" event — edits are always field-specific and arrive under one of the changes below, or under `task.sundry` for minor fields.
</Info>

| `data.change`  | Fires when                                            |
| -------------- | ----------------------------------------------------- |
| `status`       | The task's status changes, including a status toggle. |
| `priority`     | The task's priority changes.                          |
| `assigned`     | The task's assigned user(s) change.                   |
| `recurring`    | The task's recurring settings are updated or stopped. |
| `active_state` | The task is archived or restored.                     |

```json theme={null}
{
  "event": "task.updated",
  "id": 512,
  "created": "2026-07-16T08:05:00+00:00",
  "data": {
    "change": "status",
    "task": { "id": 512, "status": { "id": 3, "title": "Complete", "color": "success" }, "...": "..." }
  }
}
```

***

## `task.sundry`

Fires on a minor, cosmetic field edit. Read `data.field` to determine which field changed; `data.task` contains the full task object.

| `data.field`    | Fires when                                   |
| --------------- | -------------------------------------------- |
| `tags`          | The task's tags are changed.                 |
| `custom_fields` | One or more custom field values are updated. |

```json theme={null}
{
  "event": "task.sundry",
  "id": 512,
  "created": "2026-07-16T08:07:00+00:00",
  "data": {
    "field": "tags",
    "task": { "id": 512, "tags": ["design", "urgent"], "...": "..." }
  }
}
```

***

## `task.activity`

Fires when a child record on a task changes. Read `data.type` and `data.action` together to determine exactly what happened; `data.item` contains the affected child record.

| `data.type`         | `data.action`                                   | `data.item` shape                                                                                                                                     |
| ------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `comment`           | `added`, `deleted`                              | `{ id, text, author, created }` — `author` is the commenter's first name only.                                                                        |
| `attachment`        | `added`                                         | `{ id, uniqueid, filename, created }`                                                                                                                 |
| `attachment`        | `deleted`                                       | `{ id }` only — the attachment record is already gone by the time this fires.                                                                         |
| `checklist`         | `added`, `updated`, `deleted`, `status_changed` | `{ id, text, status, created }` — `status_changed` fires when an item is ticked or un-ticked; `status` is `pending` or `completed`.                   |
| `checklist_comment` | `added`, `deleted`                              | `{ id, checklist_id, text, author, created }` — kept separate from `comment` so a note on a checklist item is not mistaken for a comment on the task. |

<Warning>
  Reordering checklist items does not fire an event. Importing a checklist fires nothing per item.
</Warning>

```json theme={null}
{
  "event": "task.activity",
  "id": 512,
  "created": "2026-07-16T08:10:00+00:00",
  "data": {
    "type": "comment",
    "action": "added",
    "item": {
      "id": 5012,
      "text": "Looks good, shipping today.",
      "author": "Jane",
      "created": "2026-07-16T08:10:00.000000Z"
    }
  }
}
```

***

## `task.deleted`

Fires after the task is deleted. Because the record no longer exists at delivery time, `data` contains only the task id.

```json theme={null}
{
  "event": "task.deleted",
  "id": 512,
  "created": "2026-07-16T08:15:00+00:00",
  "data": { "id": 512 }
}
```
