How a campaign runs
A campaign accrues on an hourly cadence for its whole duration, independent of when it pays out:- Accrual. Each hour, the campaign evaluates every depositor’s indexed balance against its qualification rule and adds a pro-rata share of that hour’s emission to each qualifying user’s running total.
- Settlement. On the configured payout cadence, users with an unpaid balance are collected, batched, and paid out through the campaign’s Safe multi-sig.
Reward modes
Configuration
A campaign is created against a specificyieldId and must be pinned to that yield’s LIVE allocator fee configuration (its vault) before it can go live; the pin is optional on a draft. Fields you set:
Campaigns aren’t configured through a dashboard screen. You submit a create, update, or end request to yield.xyz, which reviews and accepts or rejects it; drafts can be edited before going live. Going live, and changing budget, APY ceiling, end time, payout address or qualification on a live campaign, goes through that review.
Lifecycle
A campaign moves between these states through explicit actions: pause, resume (optionally backfilling the paused window), acknowledge-pause, and end.
Eligibility and qualification
The only qualification rule currently supported ismin_token_amount: a user’s qualifying balance must meet a configured threshold to accrue that hour. An optional maxIncentivizedTvlToken caps how much of a large balance accrues rewards; the excess still earns the yield’s native rate, just not the campaign incentive.
Independent of qualification, any address can be flagged ineligible for payout. A flagged address stops accruing and is excluded from settlement, while its already-accrued balance and history are preserved; the flag is reversible. This is the mechanism for excluding a specific address (for example, a compliance concern or a detected gaming pattern) without pausing the whole campaign.
Discovery
Integrators surface active campaigns two ways:- On the yield itself. A yield with an active campaign returns a reward-rate breakdown on the Yield API (
GET /v1/yieldsandPOST /v1/yields/balances): the response’srewardRate.componentsincludes acampaign_incentiveentry alongside the yield’s native rate, so a frontend can show users where the combined rate comes from.POST /v1/yields/balancesreflects each user’s actual accrued and eligible amount;/v1/yieldsreflects the campaign’s rate assuming full qualification. GET /v1/yields/{yieldId}/campaigns. Lists campaigns for a specific yield, filterable bystatus(defaults toactive), each with its budget state (totalBudget,distributedBudget,remainingBudget),apyCeiling,qualificationConfig,payoutFrequency,rewardToken, and accrual window.
Reporting
Campaign data is also readable with an Admin API key for finance and audit use: campaigns, accruals, payout runs and per-user balance state. This access is read-only; campaigns are not configured through it. See Programmatic access.Next steps
Yield metadata
How reward rates and their components surface on a yield.
Balances and positions
Track per-user positions and accrued reward balances.
Vaults and OAVs
The vault layer a campaign’s fee configuration is pinned to.
Programmatic access
Admin API keys, including read-only campaign reporting.

