Member commission plan payloads
Member commission plan events carry the MemberCommissionPlanFatPayload - a snapshot of a commission plan attached to a member. The entity arrives inside the standard webhook envelope under data.object, with object set to commission_plan.
Base fields
Every 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.commission_plan.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 |
Commission plan object fields
The commission plan object lives at data.object.
| Field | Type | Nullable | Notes |
|---|---|---|---|
| object | string | No | Always commission_plan |
| id | string | No | Plan UUID, prefixed cpl_ |
| workspace_id | string | No | Workspace UUID, prefixed wsp_ |
| beneficiary | object | Yes | The member who earns under this plan - a nested team_member, or a lean { object: "team_member", id } when only the id is known |
| scope | string | No | individual or team |
| reportee | object | Yes | The reportee the plan applies to (team scope) - nested team_member or lean reference |
| currency | string | No | ISO currency code |
| aggregation_window | string | No | e.g. monthly |
| effective_from | date | No | Date the plan starts applying (YYYY-MM-DD) |
| effective_to | date | Yes | Date the plan stops applying - null for open-ended |
| is_retroactive | boolean | No | Whether the plan applies to prior activity |
| created_by_id | string | Yes | UUID of the actor who created the plan, prefixed usr_ |
| rules | array | No | Array of commission_rule objects (see below) |
| created_at | datetime | No | ISO 8601 creation timestamp |
Rule objects
Each entry in rules is a commission_rule:
| Field | Type | Nullable | Notes |
|---|---|---|---|
| object | string | No | Always commission_rule |
| id | string | No | Rule UUID, prefixed crl_ |
| rule_type | string | No | The rule type |
| aggregation_type | string | No | How matched activity is aggregated |
| tiers | array | No | Array of commission_tier objects |
Each entry in tiers is a commission_tier:
| Field | Type | Nullable | Notes |
|---|---|---|---|
| object | string | No | Always commission_tier |
| id | string | No | Tier UUID, prefixed ctr_ |
| from_amount | number | No | Lower bound of the tier |
| to_amount | number | Yes | Upper bound, null for the top tier |
| rate_percent | number | No | Commission rate for the tier, as a percentage |
| priority | integer | No | Ordering priority |
Conditional field on data
| Field | Type | Notes |
|---|---|---|
data.previous_plan | object | Present only on member.commission_plan.updated: { object: "commission_plan", id, effective_from, effective_to } |
previous_plan sits directly under data, alongside object, and only appears on member.commission_plan.updated. Use it to diff what changed without re-fetching the prior state.
Event types
member.commission_plan.created
A new commission plan was created for a member. Carries the full plan object. previous_plan is absent.
member.commission_plan.updated
An existing commission plan changed. data.previous_plan holds the prior plan state, alongside the new plan object at data.object.
member.commission_plan.ended
A commission plan was ended. effective_to is set to the end date. previous_plan is absent.
Example
member.commission_plan.created
Code
member.commission_plan.updated
Code
