> ## 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 Team Member Webhook Events: Payload Reference

> Reference for team.created, team.updated, and team.deleted webhook payloads covering team member provisioning, role changes, and removal in Grow CRM.

Grow CRM emits three webhook event keys for the Team resource: `team.created`, `team.updated`, and `team.deleted`. Use these events to provision accounts in connected systems, detect role and status changes, and clean up access when a team member is removed. There is no `.sundry` or `.activity` key — every change to a team member arrives as `team.updated`, and team members carry no child records. These events cover **team members only**; client contacts are not included.

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

<Warning>
  **The payload is a deliberate, fixed whitelist of profile fields.** Credentials and security material — password hashes, session and password-reset tokens, two-factor secrets, last-known IP address, and payment-gateway customer ids — are **never** included and cannot be exposed by a future change to the underlying record. Personal preferences such as theme, language, and notification settings are also excluded.
</Warning>

***

## The team member object

`team.created` and `team.updated` carry this shape — flat inside `data` for `.created`, or nested under `data.team_member` for `.updated`.

| Field           | Type         | Notes                                                                                                               |
| --------------- | ------------ | ------------------------------------------------------------------------------------------------------------------- |
| `id`            | integer      | The user id.                                                                                                        |
| `uniqueid`      | string       | `unique_id`.                                                                                                        |
| `first_name`    | string       |                                                                                                                     |
| `last_name`     | string       |                                                                                                                     |
| `email`         | string       | Cleared when the member is deleted — see `team.deleted` below.                                                      |
| `phone`         | string\|null |                                                                                                                     |
| `position`      | string\|null | Job title.                                                                                                          |
| `status`        | string       | `active`, `suspended`, or `deleted`.                                                                                |
| `account_owner` | string       | `yes` or `no`.                                                                                                      |
| `role`          | object       | `{ id, name }` — the member's permission role.                                                                      |
| `dates`         | object       | Raw database value — `created` is `Y-m-d H:i:s`, not the ISO-with-microseconds format used by most other resources. |

```json theme={null}
{
  "id": 7,
  "uniqueid": "d8k2m4pa",
  "first_name": "Dana",
  "last_name": "Okafor",
  "email": "dana@example.com",
  "phone": "+1 555 0142",
  "position": "Senior Developer",
  "status": "active",
  "account_owner": "no",
  "role": { "id": 2, "name": "Staff" },
  "dates": { "created": "2026-07-31T09:00:00" }
}
```

***

## `team.created`

Fires when a team member is added. `data` is the full team member object.

<Info>
  The new member is also emailed a generated password at this point. That password is never included in the payload.
</Info>

```json theme={null}
{
  "event": "team.created",
  "id": 7,
  "created": "2026-07-31T09:00:00+00:00",
  "data": {
    "id": 7,
    "uniqueid": "d8k2m4pa",
    "first_name": "Dana",
    "last_name": "Okafor",
    "email": "dana@example.com",
    "phone": null,
    "position": "Senior Developer",
    "status": "active",
    "account_owner": "no",
    "role": { "id": 2, "name": "Staff" },
    "dates": { "created": "2026-07-31 09:00:00" }
  }
}
```

***

## `team.updated`

Fires on any change to a team member. Read `data.change` to determine what changed; `data.team_member` contains the full team member object reflecting the new state.

| `data.change` | Fires when                                                                                                                                                              |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `edited`      | The team member edit form is saved. Covers profile fields, role changes, and status changes — the form saves them together, so they are not separately distinguishable. |

<Tip>
  Compare `role` and `status` in the payload against your own copy if you need to react specifically to a permission change or a suspension.
</Tip>

<Info>
  A team member changing their **own** preferences does not fire an event.
</Info>

```json theme={null}
{
  "event": "team.updated",
  "id": 7,
  "created": "2026-07-31T09:15:00+00:00",
  "data": {
    "change": "edited",
    "team_member": {
      "id": 7,
      "status": "suspended",
      "role": { "id": 2, "name": "Staff" },
      "...": "..."
    }
  }
}
```

***

## `team.deleted`

Fires after a team member is removed. Because the record no longer exists at delivery time, `data` contains only the member's id.

<Warning>
  Deletion is a **soft delete**: the account row is kept for referential integrity, its status set to `deleted`, and its email, password, role, and avatar cleared. Treat `team.deleted` as final — the member cannot log in again and will not appear in the team list.
</Warning>

```json theme={null}
{
  "event": "team.deleted",
  "id": 7,
  "created": "2026-07-31T09:30:00+00:00",
  "data": { "id": 7 }
}
```
