Nested objects
Several objects are embedded inside multiple webhook payloads. This page documents each shared shape once so the event pages can reference it.
team_member
The team_member object identifies a setter, closer, or other staff member. It appears in two context-dependent variants - the field set differs depending on whether the object is embedded in a commission payload or in a sale/refund/lead payload.
Variant A - commission contexts
Carries user_id and roles; no department/is_active.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
object | string | No | Always "team_member". |
id | string | No | Member UUID, tm_-prefixed. |
user_id | string | No | Linked user UUID, usr_-prefixed. |
first_name | string | No | Member's first name. |
last_name | string | No | Member's last name. |
email | string | No | Member's email. |
roles | array | No | e.g. ["closer"], ["setter"], ["manager"], ["rev_share"]. |
Variant B - sale / refund / lead contexts
Carries department and is_active; no user_id.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
object | string | No | Always "team_member". |
id | string | No | Member UUID, tm_-prefixed. |
first_name | string | No | Member's first name. |
last_name | string | No | Member's last name. |
email | string | No | Member's email. |
roles | array | No | e.g. ["closer","setter"], ["manager","setter"]. |
department | string | No | e.g. sales. |
is_active | boolean | No | Whether the member is active. |
These two variants are intentional - the emitter sends a different field set depending on context:
- Variant A (
{object, id, user_id, first_name, last_name, email, roles}) - Commission payloads. Carriesuser_id; nodepartment/is_active. - Variant B (
{object, id, first_name, last_name, email, roles, department, is_active}) - Sale and Refund payloads. Carriesdepartment/is_active; nouser_id.
Do not assume user_id is present in sale/refund contexts, and do not assume department/is_active are present in commission contexts.
payout
Describes the payout schedule and transfer state for a commission.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
date | datetime | Yes | Scheduled payout date (ISO 8601), e.g. "2026-07-05T00:00:00Z". |
transfer_id | string | Yes | Provider transfer ID once settled, e.g. tr_.... |
paused | boolean | No | Whether the payout is paused. |
paused_until | datetime | Yes | When the pause lifts (ISO 8601). |
platform_fee
The platform fee breakdown attached to a sale.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
total_amount | float | No | Total platform fee amount. |
business_amount | float | No | Portion charged to the business. |
team_amount | float | No | Portion charged to the team. |
total_percent | float | No | Fee as a percentage. |
bnpl
Buy-now-pay-later breakdown attached to a sale.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
provider | string | Yes | BNPL provider name. |
percentage | float | No | BNPL fee percentage. |
fee_amount | float | No | BNPL fee amount. |
gross_revenue | float | No | Gross revenue before BNPL fee. |
net_revenue | float | No | Net revenue after BNPL fee. |
installment
A single installment record, embedded in commission and sale payloads when a payment is part of an installment plan.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
id | string | No | Installment record ID. |
type | string | No | Installment type, e.g. down_payment. |
payment_date | date | No | Scheduled or actual payment date. |
amount | integer | No | Installment amount. |
currency | string | No | Currency code. |
status | string | No | Installment status, e.g. paid, pending. |
crm
CRM sync metadata, embedded in lead payloads.
Code
| Field | Type | Nullable | Notes |
|---|---|---|---|
source | string | Yes | CRM source name, e.g. gohighlevel. null when unsynced. |
source_id | string | Yes | Record ID in the source CRM. |
synced | boolean | No | Whether the record is synced to the CRM. |
