team.* events
Team creation, rename, deletion, and membership changes.
Creating a team, inviting a collaborator and changing a collaborator's role require the Growth tier or above. Withdrawal is deliberately not gated — team.member.removed, team.deleted and invitation withdrawal all still work on an account whose tier has lapsed, so those events can reach a Free or Starter account's endpoints.
Events
team.created
New team is created.
team.updated
Team is renamed.
team.deleted
Team is deleted.
team.member.invited
Invitation issued to a new collaborator.
team.member.joined
Invited collaborator accepts and joins.
team.member.removed
Collaborator removed from the team by its owner.
team.member.role_changed
Collaborator's role within the team changes.
| Event | Fires when |
|---|---|
team.created | A team is created, including the personal team created with a new account. |
team.updated | A team is renamed. name is the only mutable field on a team. |
team.deleted | A team is deleted. Projects scoped to it are detached (team_id becomes null), not deleted. |
team.member.invited | An invitation is issued to a new collaborator. |
team.member.joined | An invited collaborator accepts and joins. |
team.member.removed | Collaborator removed from the team by its owner. |
team.member.role_changed | A collaborator's role within the team changes. |
See the dedicated pages above for full payload, field reference, and caveats per event.
Example payload
{
"id": "evt_01HX...",
"type": "team.member.joined",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": null,
"data": {
"team_id": "a83f0d51-4c92-4b7e-8615-2fd9e70a3c86",
"user_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80"
}
}data is flat and deliberately thin: ids, plus whatever the transition itself
carries. It is not a snapshot of the team or the collaborator. Read
GET /v1/teams/{team}/members/{member} for
the profile — which keeps a joined member's details behind the
team-member:view ability. The one exception is
team.member.invited, which carries the invitee's
email: an invitee has no user record to look up yet, so the id-only rule
cannot apply to it.
project_id is always null for team.* events — these are account-level.
Required abilities
Tokens subscribing to team.* events must carry team:view — including the four team.member.* events. No webhook event requires team-member:invite; that ability governs sending an invitation, not receiving the event about one.
How is this guide?