Replace the brand's bonus tiers
Set the brand's views-based bonus tiers, as on Settings › Rules › Bonus tiers: send the whole ladder and it replaces the current one (read it from brand.payout-settings.get, bonus.tiers). A post earns the bonus of the highest tier its views reach (in aggregate mode, a set earns it on its posts' views added up); tiers don't add up. Moves money: every running cycle without locked-in rules is recalculated right away (recalculatedCycles); a cycle with locked-in rules keeps its own tiers (apply new rules to it in the app), and paid cycles never change. Creators, groups and sets with their own bonus deal keep it. Tiers pay only while the brand's bonus model is tiered (model; switch it with brand.payout-settings.update). Sending the ladder the brand already has changes nothing. Full admins only. With ?dryRun=true nothing is written: the answer shows the ladder before and after, which tiers are added, removed or repriced, the running cycles that would be recalculated and those that keep their rules, and how many creators, groups and sets have their own bonus deal.
bearerAuth payouts:writeAuthorizationBearer <token>Personal access token. Scopes: account:read, creator:read, creator:earnings, managed:read, coach:read, brand:read, creators:read, videos:read, analytics:read, onboarding:read, onboarding:signatures, engagement:read, support:read, integrations:read, payouts:read, funds:read, billing:read, groups:write, videos:write, onboarding:write, sync:write, payouts:write.
Scope: payouts:write
brandId*stringA brand id from GET /me or GET /creator/brands.
1 <= lengthdryRun?string"true": run every check and return { dryRun: true, wouldChange } without changing anything.
"true""false"application/json- body
tiers*array<>The whole ladder, in any order; it replaces the brand's current tiers. Up to 20. Each threshold once, and a higher threshold can't pay less. [] = no tiered bonus.
items <= 20Success.
application/json- response
model*stringThe brand's bonus model. The tiers pay only while it's "tiered".
"tiered""linear"tiers*array<>The brand's tiers now, lowest first.
changed*booleanFalse: the ladder was already this one, so nothing was written or recalculated.
recalculatedCycles*integerRunning cycles without locked-in rules whose payouts were recalculated.
-9007199254740991 <= value <= 9007199254740991curl -X PATCH 'https://example.com/api/v1/brands/string/payout-settings/bonus-tiers' \ -H 'Content-Type: application/json' \ -d '{ "tiers": [ { "viewThreshold": 0, "bonus": 0 } ]}'{ "model": "tiered", "tiers": [ { "viewThreshold": -9007199254740991, "bonus": 0 } ], "changed": true, "recalculatedCycles": -9007199254740991}A cycle's bonus pay board GET
The Bonus pay tab for one cycle: per creator, the bonus each set (pair) earned, what was already sent, what can be paid now and what blocks the rest, plus the creators withheld from payment and why. A ledger-model cycle has no board (`isLedger: true`, `board: null`). Creators are paged by payout id.
The brand's bounties GET
Every bounty the brand created, newest first, as the Bounties page lists them: reward, type, status, targets, dates and how many of its claim slots are taken. Claims on one bounty are at .../bounties/{bountyId}/claims.