
/v4/users/{address}/rewards/active-opportunities
Active opportunities for a user — LIVE status with rewards still claimable or pending. Aggregated by opportunity and sorted by APR descending. Settled amounts reflect recent distribution state and may be up to 30 minutes behind; pending amounts are computed live. withStoringIds=true additionally returns the storingIds backing each opportunity, for mapping the caller's on-chain positions (analytics positions route).
Path parameters
addressstringUser address
Query parameters
chainIdstring[]Filter by chain IDs
tokensstring[]Filter by reward token addresses
protocolsstring[]Filter by main protocol IDs
isTestbooleanInclude test token rewards
isPreTGEbooleanWhen true, restrict to preTGE (PRETGE) token rewards
withStoringIdsbooleanAlso return the storingIds backing each opportunity (LIVE root campaigns' full sub-campaign trees), so callers can fetch and map their on-chain positions through the analytics positions route. Off by default so existing consumers keep the endpoint's original latency.
Responses
200Response for status 200
object[]
opportunityobject
idstringtypestringidentifierstringchainIdnumbernamestringdescriptionstringhowToStepsstring[]statusenumNONEPASTLIVESOONactionenumPOOLHOLDDROPLENDBORROWLONGSHORTSWAPINVALIDSTAKEtagsstring[]mainProtocolstringdepositUrlstringdepositUrlsobject[]
idstringtitlestringurlstringsubtitlestringiconstringprioritynumberexplorerAddressstringhiddenbooleantvlnumberaprnumberdailyRewardsnumbermaxDailyRewardsnumber | nullliveCampaignsnumberlastCampaignCreatedAtnumberearliestCampaignStartbigint | stringlatestCampaignStartbigint | stringearliestCampaignEndbigint | stringlatestCampaignEndbigint | stringnativeAprnumbertotalAprnumbermaxAprnumber | nullliveCampaignsForCreatornumbersoonCampaignsForCreatornumberpastCampaignsForCreatornumberdistributionTypestringtokensobject[]
idstringUnique identifier for the tokennamestring | nullFull name of the tokenchainIdintegerChain IdaddressstringAddressdecimalsnumberNumber of decimals for the tokensymbolstringSymbol of the tokeniconstringURL to the token icon imageverifiedbooleanWhether the token is verifiedisNativebooleanWhether this is a native blockchain tokenisTestbooleanWhether this is a test tokentypeenumType of the token (TOKEN, PRETGE, POINT)TOKENPRETGEPOINTpricenumber | nullCurrent price of the token in USDupdatedAtnumber | nullUnix timestamp of last price updatepriceSourcestring | nullSource of the price informationdisplaySymbolstringCustom display symbol overrideunderlyingTokenIdstringIf this token is a wrapper, the ID of the underlying tokenpriceAlertDismissedAtnumberpriceAlertCountnumberchainobjectChain
idintegernamestringiconstringliveCampaignsnumberendOfDisputePeriodnumberexplorersobject[]
typeenumETHERSCANBLOCKSCOUTSOLSCANurlstringchainIdnumberlastClaimsOnchainFetchTimestampstring | nullactiveProgramsobject[]
idstringnamestringslugstring | nulldescriptionstringiconstringprotocolobject | null
idstringnamestringiconstringtagsstring[]descriptionstringurlstringdailyRewardsnumbernumberOfLiveCampaignsnumberopportunityLiveTagsstring[]bannerstring | nullopportunityBannerLightstring | nullopportunityBannerDarkstring | nulltrustDataobject | null
slugstringcategorystring | nullauditsstring | nullaudit_linksstring[]audit_notestring | nullgithubstring[]twitterstring | nulllistedAtnumber | nullparentProtocolstring | nulltvlnumber | nullhacksobject[]
datenumbernamestring | nullamountUSDnumber | nulltechniquestring | nullsourcestring | nullsyncedAtnumberaprRecordobject
cumulatednumbertimestampbigint | stringbreakdownsobject[]required
identifierstringtypeenumCAMPAIGNTOKENPROTOCOLvaluenumbertimestampbigint | stringdistributionTypeenumDUTCH_AUCTIONFIX_REWARD_VALUE_PER_LIQUIDITY_VALUEFIX_REWARD_AMOUNT_PER_LIQUIDITY_VALUEFIX_REWARD_VALUE_PER_LIQUIDITY_AMOUNTFIX_REWARD_AMOUNT_PER_LIQUIDITY_AMOUNTMAX_REWARD_VALUE_PER_LIQUIDITY_VALUEMAX_REWARD_AMOUNT_PER_LIQUIDITY_VALUEMAX_REWARD_VALUE_PER_LIQUIDITY_AMOUNTMAX_REWARD_AMOUNT_PER_LIQUIDITY_AMOUNTAAVE_NET_APRERC4626_APRERC4626_SPREAD_CAPPEDAAVE_V4_NET_APRDEEL_DISTRIBUTIONSOFR_SPREAD_RATCHETERC4626_TARGET_APR_WITH_MERKLTARGET_APR_WITH_MERKLNET_APRBORROW_SUBSIDYNET_APR_WITH_MERKLYIELD_BASIS_PIDCOMPOSEDnativeAprRecordobject
titlestringdescriptionstringvaluenumbertimestampbigint | stringamountbigintrewardTokenobjectToken
idstringnamestring | nullchainIdintegeraddressstringdecimalsnumbersymbolstringiconstringverifiedbooleanisNativebooleanisTestbooleantypeenumTOKENPRETGEPOINTpricenumber | nullCurrent price of the token in USDupdatedAtnumber | nullUnix timestamp of last price updatepriceSourcestring | nullSource of the price informationdisplaySymbolstringCustom display symbol overrideunderlyingTokenIdstringIf this token is a wrapper, the ID of the underlying tokenpriceAlertDismissedAtnumberpriceAlertCountnumberbreakdownsobject[]
titlestringdescriptionstringvaluenumberamountbigintrewardTokenobjectToken
idstringnamestring | nullchainIdintegeraddressstringdecimalsnumbersymbolstringiconstringverifiedbooleanisNativebooleanisTestbooleantypeenumTOKENPRETGEPOINTpricenumber | nullCurrent price of the token in USDupdatedAtnumber | nullUnix timestamp of last price updatepriceSourcestring | nullSource of the price informationdisplaySymbolstringCustom display symbol overrideunderlyingTokenIdstringIf this token is a wrapper, the ID of the underlying tokenpriceAlertDismissedAtnumberpriceAlertCountnumbertvlRecordobject
totalnumbertimestampbigint | stringbreakdownsobject[]required
identifierstringtypeenumTOKENPROTOCOLvaluenumberrewardsRecordobject
totalnumbertimestampbigint | stringbreakdownsobject[]required
campaignIdstringvaluenumbermaxValuenumbertimestampbigint | stringtokenobjectToken
idstringnamestring | nullchainIdintegeraddressstringdecimalsnumbersymbolstringiconstringverifiedbooleanisNativebooleanisTestbooleantypeenumTOKENPRETGEPOINTpricenumber | nullCurrent price of the token in USDupdatedAtnumber | nullUnix timestamp of last price updatepriceSourcestring | nullSource of the price informationdisplaySymbolstringCustom display symbol overrideunderlyingTokenIdstringIf this token is a wrapper, the ID of the underlying tokenpriceAlertDismissedAtnumberpriceAlertCountnumberamountbigint | stringdistributionTypeenumDUTCH_AUCTIONFIX_REWARD_VALUE_PER_LIQUIDITY_VALUEFIX_REWARD_AMOUNT_PER_LIQUIDITY_VALUEFIX_REWARD_VALUE_PER_LIQUIDITY_AMOUNTFIX_REWARD_AMOUNT_PER_LIQUIDITY_AMOUNTMAX_REWARD_VALUE_PER_LIQUIDITY_VALUEMAX_REWARD_AMOUNT_PER_LIQUIDITY_VALUEMAX_REWARD_VALUE_PER_LIQUIDITY_AMOUNTMAX_REWARD_AMOUNT_PER_LIQUIDITY_AMOUNTAAVE_NET_APRERC4626_APRERC4626_SPREAD_CAPPEDAAVE_V4_NET_APRDEEL_DISTRIBUTIONSOFR_SPREAD_RATCHETERC4626_TARGET_APR_WITH_MERKLTARGET_APR_WITH_MERKLNET_APRBORROW_SUBSIDYNET_APR_WITH_MERKLYIELD_BASIS_PIDCOMPOSEDonChainCampaignIdstringearnedTokensobject[]
tokenobjectToken
idstringnamestring | nullchainIdintegeraddressstringdecimalsnumbersymbolstringiconstringverifiedbooleanisNativebooleanisTestbooleantypeenumTOKENPRETGEPOINTpricenumber | nullCurrent price of the token in USDupdatedAtnumber | nullUnix timestamp of last price updatepriceSourcestring | nullSource of the price informationdisplaySymbolstringCustom display symbol overrideunderlyingTokenIdstringIf this token is a wrapper, the ID of the underlying tokenpriceAlertDismissedAtnumberpriceAlertCountnumberamountstringTotal earned (live tree + pending) in token weichainobjectChain
idintegernamestringiconstringliveCampaignsnumberendOfDisputePeriodnumberexplorersobject[]
typeenumETHERSCANBLOCKSCOUTSOLSCANurlstringchainIdnumberlastClaimsOnchainFetchTimestampstring | nullstoringIdsobject[]Only when `withStoringIds=true`: every storingId of the LIVE root campaigns' full sub-campaign trees. Use them to fetch and map the caller's on-chain positions via `GET /v4/analytics/positions/{address}?indexingIds=...` (that route names the same value `indexingId`). Empty array = resolved, nothing backs this opportunity; field absent = resolution failed for this opportunity (the rest of the response is unaffected).
idstringIndexing/storingId under which positions backing this opportunity are trackedviaSubCampaignbooleanTrue when this storingId belongs to a sub-campaign only (forwarded/wrapper position, e.g. held via a vault) rather than a root campaign[
{
"opportunity": {},
"earnedTokens": [
{
"token": {
"id": "string",
"name": null,
"chainId": 0,
"address": "string",
"decimals": 0,
"symbol": "string",
"icon": "string",
"verified": false,
"isNative": false,
"isTest": false,
"type": null,
"price": null,
"updatedAt": null,
"priceSource": null,
"displaySymbol": "string",
"underlyingTokenId": "string",
"priceAlertDismissedAt": 0,
"priceAlertCount": 0
},
"amount": "string",
"chain": {
"id": 0,
"name": "string",
"icon": "string",
"liveCampaigns": 0,
"endOfDisputePeriod": 0,
"explorers": [
null
],
"lastClaimsOnchainFetchTimestamp": null
}
}
],
"storingIds": [
{
"id": "string",
"viaSubCampaign": false
}
]
}
]https://api.merkl.xyz/v4/users//rewards/active-opportunitiescurl -X GET "https://api.merkl.xyz/v4/users/0xd93814273b33DD33B32cD345225CfB65DEB048Dd/rewards/active-opportunities"