Member payloads
Member events carry the MemberFatPayload - a full snapshot of a team member at the moment the event fired. The entity arrives inside the standard webhook envelope under data.object, with object set to team_member.
Base fields
Every member payload arrives inside the standard webhook envelope.
| Field | Type | Nullable | Notes |
|---|---|---|---|
| event_id | string | No | Stable event UUID, prefixed evt_ |
| event_type | string | No | e.g. member.created |
| api_version | string | No | 2026-06-01 |
| created_at | datetime | No | ISO 8601 envelope timestamp |
| workspace_id | string | No | Workspace UUID, prefixed ws_ |
| livemode | boolean | No | true in production, false otherwise |
Member object fields
The member object lives at data.object.
| Field | Type | Nullable | Notes |
|---|---|---|---|
| object | string | No | Always team_member |
| id | string | No | Member UUID, prefixed tm_ |
| user_id | string | Yes | The member's user UUID, prefixed usr_ |
| first_name | string | Yes | |
| last_name | string | Yes | |
| string | Yes | ||
| country | object | No | { name, code } - both fields null when no country is set |
| currency | string | Yes | ISO currency code for payouts |
| department | string | Yes | e.g. sales |
| role | string | Yes | Primary role label |
| roles | array | No | Array of { object: "role", id, role_id, name }, each id prefixed rol_ |
| manager | object | Yes | Nested team_member reference, or a lean { object, id } when only the manager id is known |
| manager_type | string | Yes | Relationship type of the manager |
| is_active | boolean | No | Whether the member is currently active |
| invite_status | string | No | e.g. pending, accepted |
| onboarded_at | datetime | Yes | When onboarding completed |
| destination | object | No | Payout destination { provider, account_id } - defaults to { provider: "stripe", account_id: null } |
| payouts | object | No | { paused, schedule } - defaults to { paused: false, schedule: "weekly" } |
| created_at | datetime | No | ISO 8601 creation timestamp |
| updated_at | datetime | No | ISO 8601 last-update timestamp |
Conditional fields on data
Some member events attach extra objects as siblings of data.object (not inside it). They only appear on the events that act on them.
| Field | Type | Notes |
|---|---|---|
data.role | object | Present on member.role.* events. The affected role: { object: "role", id, role_id, name } |
data.commission | object | Present on member.role.commission.* events: { role_pair, percentage, is_active } |
data.action | string | The change applied, e.g. assigned, unassigned, added, removed |
data.payout_schedule | object | Present on member.payout_schedule.updated |
role, commission, action, and payout_schedule sit directly under data, alongside object - they are not nested inside the member object. They are only present on the events that act on them, so don't assume they appear on member.created or member.updated.
Event types
member.created
A new member was added to the workspace. Carries the full member object. The conditional data siblings are absent.
member.activated
An existing member was activated. is_active is true. data.action reflects the change.
member.deactivated
An existing member was deactivated. is_active is false. data.action reflects the change.
member.updated
A member's profile fields changed (name, email, department, manager, destination, etc.). No conditional siblings are added.
member.role.assigned
A role was assigned to the member. data.role describes the role that was added; data.action is assigned.
member.role.unassigned
A role was removed from the member. data.role describes the role that was removed; data.action is unassigned.
member.role.commission.added
A commission was attached to one of the member's roles. Both data.role and data.commission are present; data.action is added.
member.role.commission.removed
A commission was detached from one of the member's roles. Both data.role and data.commission are present; data.action is removed.
member.payout_schedule.updated
The member's payout schedule changed. data.payout_schedule describes the new schedule; the payouts object on the member reflects the current paused/schedule state.
Example
member.created
Code
member.role.assigned
Code
