> ## 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.

# Ticket Webhooks: Event Payload Reference for Grow CRM

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

Grow CRM emits five webhook event keys for the Tickets resource: `ticket.created`, `ticket.updated`, `ticket.deleted`, `ticket.sundry`, and `ticket.activity`. Use these events to power support workflows, sync ticket state to external helpdesks, and react to new replies in real time. Every key except `ticket.deleted` carries the full ticket 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 ticket object

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

| Field           | Type             | Notes                                                                                                |
| --------------- | ---------------- | ---------------------------------------------------------------------------------------------------- |
| `id`            | integer          | `ticket_id`.                                                                                         |
| `subject`       | string           |                                                                                                      |
| `status`        | object           | `{ id, title }`.                                                                                     |
| `priority`      | string           | `normal`, `high`, or `urgent`.                                                                       |
| `source`        | string           | `web` or `email`.                                                                                    |
| `active_state`  | string           | `active` or `archived`.                                                                              |
| `department`    | object           | `{ id, name }` — the ticket's category, labelled as department.                                      |
| `client`        | object           | `{ id, name }`.                                                                                      |
| `project_id`    | integer\|null    |                                                                                                      |
| `dates`         | object           | `created` is ISO 8601 with microseconds; `last_updated` is a raw database timestamp (`Y-m-d H:i:s`). |
| `replies_count` | integer          | Total reply count at the time of the event.                                                          |
| `tags`          | array of strings |                                                                                                      |

<Info>
  `dates.last_updated` is a separate raw timestamp field — it stays a plain database timestamp (`Y-m-d H:i:s`) rather than being recast to ISO 8601 with microseconds like `dates.created`.
</Info>

```json theme={null}
{
  "id": 88,
  "subject": "Can't log in",
  "status": { "id": 1, "title": "Open" },
  "priority": "high",
  "source": "email",
  "active_state": "active",
  "department": { "id": 1, "name": "Support" },
  "client": { "id": 12, "name": "Acme Inc" },
  "project_id": null,
  "dates": {
    "created": "2026-07-16T08:00:00.000000Z",
    "last_updated": "2026-07-16 08:12:00"
  },
  "replies_count": 2,
  "tags": []
}
```

***

## `ticket.created`

Fires when a ticket is created. There is no clone event for tickets. `data` is the full ticket object.

```json theme={null}
{
  "event": "ticket.created",
  "id": 88,
  "created": "2026-07-16T08:00:00+00:00",
  "data": {
    "id": 88,
    "subject": "Can't log in",
    "status": { "id": 1, "title": "Open" },
    "priority": "normal",
    "source": "web",
    "active_state": "active",
    "department": { "id": 1, "name": "Support" },
    "client": { "id": 12, "name": "Acme Inc" },
    "project_id": null,
    "dates": {
      "created": "2026-07-16T08:00:00.000000Z",
      "last_updated": "2026-07-16 08:00:00"
    },
    "replies_count": 0,
    "tags": []
  }
}
```

***

## `ticket.updated`

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

| `data.change`  | Fires when                                           |
| -------------- | ---------------------------------------------------- |
| `edited`       | The main ticket edit form is saved.                  |
| `status`       | The ticket's status changes.                         |
| `active_state` | The ticket is archived or restored (single or bulk). |

```json theme={null}
{
  "event": "ticket.updated",
  "id": 88,
  "created": "2026-07-16T08:05:00+00:00",
  "data": {
    "change": "status",
    "ticket": { "id": 88, "status": { "id": 3, "title": "Closed" }, "...": "..." }
  }
}
```

***

## `ticket.sundry`

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

| `data.field` | Fires when                     |
| ------------ | ------------------------------ |
| `tags`       | The ticket's tags are changed. |

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

***

## `ticket.activity`

Fires when a child record on a ticket changes. Tickets produce only one activity type — `reply` — because they use a threaded reply system rather than the generic comments used by other resources. Read `data.action` to determine whether the reply was added, updated, or deleted.

| `data.type` | `data.action`                 | `data.item` shape       |
| ----------- | ----------------------------- | ----------------------- |
| `reply`     | `added`, `updated`, `deleted` | `{ id, text, created }` |

```json theme={null}
{
  "event": "ticket.activity",
  "id": 88,
  "created": "2026-07-16T08:10:00+00:00",
  "data": {
    "type": "reply",
    "action": "added",
    "item": {
      "id": 340,
      "text": "We're looking into this now.",
      "created": "2026-07-16T08:10:00.000000Z"
    }
  }
}
```

***

## `ticket.deleted`

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

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