get

/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

addressstring
required

Query parameters

chainIdstring[]
tokensstring[]
protocolsstring[]
tagsstring[]
isTestboolean
isPreTGEboolean
withStoringIdsboolean

Responses

200
Response for status 200
Schema
object[]
opportunityobject
idstring
typestring
identifierstring
chainIdnumber
namestring
descriptionstring
howToStepsstring[]
statusenumNONEPASTLIVESOON
actionenumPOOLHOLDDROPLENDBORROWLONGSHORTSWAPINVALIDSTAKE
tagsstring[]
mainProtocolstring
depositUrlstring
depositUrlsobject[]
idstring
titlestring
urlstring
subtitlestring
iconstring
prioritynumber
explorerAddressstring
hiddenboolean
tvlnumber
aprnumber
dailyRewardsnumber
maxDailyRewardsnumber | null
liveCampaignsnumber
lastCampaignCreatedAtnumber
earliestCampaignStartbigint | string
latestCampaignStartbigint | string
earliestCampaignEndbigint | string
latestCampaignEndbigint | string
nativeAprnumber
totalAprnumber
maxAprnumber | null
liveCampaignsForCreatornumber
soonCampaignsForCreatornumber
pastCampaignsForCreatornumber
distributionTypestring
tokensobject[]
idstringUnique identifier for the token
namestring | nullFull name of the token
chainIdintegerChain Id
addressstringAddress
decimalsnumberNumber of decimals for the token
symbolstringSymbol of the token
iconstringURL to the token icon image
verifiedbooleanWhether the token is verified
isNativebooleanWhether this is a native blockchain token
isTestbooleanWhether this is a test token
typeenumType of the token (TOKEN, PRETGE, POINT)TOKENPRETGEPOINT
pricenumber | nullCurrent price of the token in USD
updatedAtnumber | nullUnix timestamp of last price update
priceSourcestring | nullSource of the price information
displaySymbolstringCustom display symbol override
underlyingTokenIdstringIf this token is a wrapper, the ID of the underlying token
priceAlertDismissedAtnumber
priceAlertCountnumber
chainobjectChain
idinteger
required
Chain Id
namestring
required
Legible name of the chain
iconstring
required
URL to the icon of the chain
liveCampaignsnumber
required
Number of campaigns currently live on this chain
endOfDisputePeriodnumber
required
explorersobject[]
typeenumETHERSCANBLOCKSCOUTSOLSCAN
urlstring
chainIdnumber
lastClaimsOnchainFetchTimestampstring | null
required
Timestamp of the last claims onchain fetch
activeProgramsobject[]
idstring
namestring
slugstring | null
descriptionstring
iconstring
protocolobject | null
idstring
namestring
iconstring
tagsstring[]
descriptionstring
urlstring
dailyRewardsnumber
numberOfLiveCampaignsnumber
opportunityLiveTagsstring[]
bannerstring | null
opportunityBannerLightstring | null
opportunityBannerDarkstring | null
trustDataobject | null
slugstring
categorystring | null
auditsstring | null
audit_linksstring[]
audit_notestring | null
githubstring[]
twitterstring | null
listedAtnumber | null
parentProtocolstring | null
tvlnumber | null
hacksobject[]
datenumber
namestring | null
amountUSDnumber | null
techniquestring | null
sourcestring | null
syncedAtnumber
aprRecordobject
cumulatednumber
required
timestampbigint | string
required
breakdownsobject[]
required
identifierstring
typeenumCAMPAIGNTOKENPROTOCOL
valuenumber
timestampbigint | string
distributionTypeenumDUTCH_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_PID
nativeAprRecordobject
titlestring
required
descriptionstring
valuenumber
required
timestampbigint | string
required
amountbigint
rewardTokenobjectToken
idstring
required
Unique identifier for the token
namestring | null
required
Full name of the token
chainIdinteger
required
Chain Id
addressstring
required
Address
decimalsnumber
required
Number of decimals for the token
symbolstring
required
Symbol of the token
iconstring
required
URL to the token icon image
verifiedboolean
required
Whether the token is verified
isNativeboolean
required
Whether this is a native blockchain token
isTestboolean
required
Whether this is a test token
typeenum
required
Type of the token (TOKEN, PRETGE, POINT)TOKENPRETGEPOINT
pricenumber | nullCurrent price of the token in USD
updatedAtnumber | nullUnix timestamp of last price update
priceSourcestring | nullSource of the price information
displaySymbolstringCustom display symbol override
underlyingTokenIdstringIf this token is a wrapper, the ID of the underlying token
priceAlertDismissedAtnumber
priceAlertCountnumber
tvlRecordobject
totalnumber
required
timestampbigint | string
required
breakdownsobject[]
required
identifierstring
typeenumTOKENPROTOCOL
valuenumber
rewardsRecordobject
totalnumber
required
timestampbigint | string
required
breakdownsobject[]
required
campaignIdstring
valuenumber
maxValuenumber
timestampbigint | string
tokenobjectToken
idstring
required
Unique identifier for the token
namestring | null
required
Full name of the token
chainIdinteger
required
Chain Id
addressstring
required
Address
decimalsnumber
required
Number of decimals for the token
symbolstring
required
Symbol of the token
iconstring
required
URL to the token icon image
verifiedboolean
required
Whether the token is verified
isNativeboolean
required
Whether this is a native blockchain token
isTestboolean
required
Whether this is a test token
typeenum
required
Type of the token (TOKEN, PRETGE, POINT)TOKENPRETGEPOINT
pricenumber | nullCurrent price of the token in USD
updatedAtnumber | nullUnix timestamp of last price update
priceSourcestring | nullSource of the price information
displaySymbolstringCustom display symbol override
underlyingTokenIdstringIf this token is a wrapper, the ID of the underlying token
priceAlertDismissedAtnumber
priceAlertCountnumber
amountbigint | string
distributionTypeenumDUTCH_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_PID
onChainCampaignIdstring
earnedTokensobject[]
tokenobjectToken
idstring
required
Unique identifier for the token
namestring | null
required
Full name of the token
chainIdinteger
required
Chain Id
addressstring
required
Address
decimalsnumber
required
Number of decimals for the token
symbolstring
required
Symbol of the token
iconstring
required
URL to the token icon image
verifiedboolean
required
Whether the token is verified
isNativeboolean
required
Whether this is a native blockchain token
isTestboolean
required
Whether this is a test token
typeenum
required
Type of the token (TOKEN, PRETGE, POINT)TOKENPRETGEPOINT
pricenumber | nullCurrent price of the token in USD
updatedAtnumber | nullUnix timestamp of last price update
priceSourcestring | nullSource of the price information
displaySymbolstringCustom display symbol override
underlyingTokenIdstringIf this token is a wrapper, the ID of the underlying token
priceAlertDismissedAtnumber
priceAlertCountnumber
amountstringTotal earned (live tree + pending) in token wei
chainobjectChain
idinteger
required
Chain Id
namestring
required
Legible name of the chain
iconstring
required
URL to the icon of the chain
liveCampaignsnumber
required
Number of campaigns currently live on this chain
endOfDisputePeriodnumber
required
explorersobject[]
typeenumETHERSCANBLOCKSCOUTSOLSCAN
urlstring
chainIdnumber
lastClaimsOnchainFetchTimestampstring | null
required
Timestamp of the last claims onchain fetch
storingIdsobject[]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 tracked
viaSubCampaignbooleanTrue when this storingId belongs to a sub-campaign only (forwarded/wrapper position, e.g. held via a vault) rather than a root campaign
Example
[
  {
    "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
      }
    ]
  }
]
get
https://api.merkl.xyz/v4/users/{address}/rewards/active-opportunities
Merkl API
curl -X GET "https://api.merkl.xyz/v4/users/{address}/rewards/active-opportunities"
Fill the required path parameter address to send.