Set a campaign's commission rule
A campaign carries multiple rules. With no scope this creates/updates the
campaign’s catch-all rule; product_ids scopes the rule to those
Stripe products; billing_interval scopes it to a billing cadence (one
scope type per rule). Conversion-time precedence: product → interval →
catch-all → nothing.
amount is a percentage (0–100) unless type is flat. duration
controls recurrence: lifetime pays every renewal, first_order pays
only the first payment, capped pays for length_months periods.
Set reward_type to non_cash (with a unit, e.g. credits) to pay a
non-cash reward — credits / points / free months delivered via the
fulfilment webhook, never cash — at any scope; amount is then the
count of units and type is ignored. Requires write (or *) scope.
Configuration only — never moves money.
Authorizations
Workspace API key, e.g. sa_live_…. Scopes: read / write / track / *.
Path Parameters
Body
Percentage (0–100), a flat amount when type=flat, or the count of units when reward_type=non_cash. Required unless library_reward_id is passed.
Author the rate FROM a reusable library reward (GET /v1/rewards) instead of inline values — copies the template's terms onto the campaign (copy-on-assign).
Ignored for non-cash rewards.
percent, flat cash = a monetary commission; non_cash pays credits / points / free months via the fulfilment webhook.
cash, non_cash Non-cash unit label (e.g. credits, points, free months). Required when reward_type=non_cash.
"credits"
lifetime, first_order, capped Required when duration is capped.
x >= 1Stripe product ids (prod_…) or Affixo product uuids to scope this rule to. Mutually exclusive with billing_interval; omit for the catch-all.
Scope the rule to a billing cadence. Mutually exclusive with product_ids.
one_time, month, year