Commissions
The money a partner earns. Created automatically from tracked events; paid out via Stripe Connect.
A commission is a row in our database tied to one event (sale, lead, or click) and one partner. It moves through a lifecycle of statuses before becoming a payout.
Lifecycle
pending— created the moment a tracked event fires. Partner sees it on their dashboard but it's not payable yet. Sits here for the program's holding period (default 30 days).approved— moved here automatically by the/api/cron/approve-commissionsjob oncepayable_athas passed. Eligible for the next payout run.paid— included in a successful Stripe Connect transfer to the partner's bank.refunded/clawed_back— the underlying sale was refunded, so the commission is reversed.
How amounts are calculated
For percentage rewards: amountCents = round(saleAmountCents × bps / 10000).
For flat rewards: amountCents = reward.rewardAmount (a fixed cents value).
Recurring & lifetime rewards
Each subsequent sale event for the same customer creates another commission as long as it falls within the duration:
one_time— only the first sale for a customer pays outrecurring— first N sales pay out (where N =rewardDurationMonths)lifetime— every sale pays out, no cap
Refunds & clawbacks
Automated clawback via webhook isn't live yet. If a sale is refunded, find the related commission in your dashboard and mark it as clawed_backmanually. If it's still in pending/approved, no money has moved yet — clean. If it's already paid, the partner has the money; you'll need to reconcile manually (or deduct from a future payout).
Holding period protects you
Inspecting commissions
The Commissions page in your workspace lists every commission with status, amount, partner, and the underlying event. Filter by status to find anything stuck in pending or failed.