Incentive Programs

Aave reserves may offer additional incentives beyond base lending rates.

Incentive Types

  • Supply Incentives: Extra APR for supplying assets to reserves

  • Borrow Incentives: APR discounts for borrowing from reserves

  • Conditional Incentives: Bonus rewards requiring specific supply + borrow combinations

Each reserve's incentives array contains all active incentive programs. The incentive data includes:

  • APR bonuses/discounts with formatted percentages

  • Reward token information (for Aave governance incentives)

  • Claim links (for Merit programs)

  • Conditional requirements (for complex incentives)

You can find the incentives associated with a reserve in the incentives array of the Reserve object.

interface Reserve {  // …  incentives: ReserveIncentive[];}

These incentives come from two main sources:

Merit Programs

Third-party programs that provide extra APR rewards for specific lending activities. These require separate claiming through external platforms.

Merit programs are third-party initiatives. Aave Labs does not guarantee these programs and accepts no liability for third-party rewards.

interface MeritSupplyIncentive {  __typename: "MeritSupplyIncentive";  extraSupplyApr: PercentValue;  claimLink: string;}

Where:

  • MeritSupplyIncentive: Extra APR for supplying assets to reserves

  • MeritBorrowIncentive: APR discounts for borrowing from reserves

  • MeritBorrowAndSupplyIncentiveCondition: Extra APR for supplying and borrowing the specified pair of assets

For each of these types, a claim link to the ACI Merit UI is provided.

Aave Governance Rewards

Incentives set by Aave governance through the RewardsController, typically distributed in AAVE tokens or other approved reward tokens.

interface AaveSupplyIncentive {  __typename: "AaveSupplyIncentive";  extraSupplyApr: PercentValue;  rewardTokenAddress: EvmAddress;  rewardTokenSymbol: string;}

Where:

  • AaveSupplyIncentive: Extra APR for supplying assets to reserves

  • AaveBorrowIncentive: APR discounts for borrowing from reserves

In both cases, the reward token address and symbol are provided.

Claim Merit Rewards

Users can know if they have claimable Merit rewards and claim them, following the steps below.

1

Fetch the Claimable Rewards

First, determine if a user has claimable rewards.

Use the useUserMeritRewards hook to fetch the user's claimable rewards and the transaction to claim them.

const { data, loading, error } = useUserMeritRewards({  user: EvmAddress,  chainId: ChainId,});

Fetch the user's claimable rewards and the transaction to claim them.

import { useUserMeritRewards, evmAddress, chainId } from "@aave/react";
// …
const { data, loading, error } = useUserMeritRewards({  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),  chainId: chainId(1),});
if (loading) {  return <p>Loading claimable rewards...</p>;}
if (error) {  return <p>Error: {error.message}</p>;}
// data: UserMeritRewards | null

If data is null, the user has no claimable rewards.

2

Claim Rewards

Finally, if the user has claimable rewards, they can claim them by sending the transaction.

Use the useSendTransaction hook for the wallet library of your choice to send the transactions in the execution plan.

Viem
import { useWalletClient } from "wagmi";import { useUserMeritRewards } from "@aave/react";import { useSendTransaction } from "@aave/react/viem";
// …
const { data: walletClient } = useWalletClient();const { data } = useUserMeritRewards({  // …  suspense: true,});
const [sendTransaction, sending] = useSendTransaction(walletClient);
// …
const execute = async () => {  if (data !== null) {    const result = await sendTransaction(data.transaction);
    if (result.isErr()) {      console.error(result.error.message);    } else {      console.log("Merit claim rewards successful with hash:", result.value);    }  }};