
/v4/opportunities/
Retrieve Multiple Opportunities
This endpoint enables you to search for opportunities by providing specific criteria through query parameters.
Request Examples
List opportunities by protocol name
curl "https://api.merkl.xyz/v4/opportunities?name=Euler"
Returns all opportunities associated with the Euler protocol, including aggregate metrics.
Filter by tag
curl "https://api.merkl.xyz/v4/opportunities?tags=zksync"
Returns opportunities tagged with "zksync" across all supported protocols.
Query parameters
pagenumber | stringdefault: 00-indexed page number
itemsnumber | stringdefault: 20Number of items returned by page
namestringFilter by name
searchstringSearch amongst multiple values (token, protocols, tags, campaigns)
campaignIdstringFilter opportunities linked to a given on-chain campaign ID (32-byte hex hash, e.g. 0x93cf385c2a446a7596820601caf25e63bfc4939efa9a89a6f21563b58ee54eb1). This is Campaign.campaignId in responses, NOT the internal Campaign.id (numeric hash). Returns [] if no campaign matches. See ID types.
creatorSlugstringFilter by creator slug
chainIdstringA comma separated list of chain ids. Example: ?chainId=1,42161
You can get the list of all supported chains by calling GET /v4/chains
actionstringA comma seprated list actions. Legal values are: POOL, HOLD, DROP, LEND, BORROW, LONG, SHORT, SWAP, INVALID, STAKE
tokenTypesenum[]Filter by token type. Use POINT to include point campaigns and PRETGE to include preTGE campaigns. By default every token is returned.
TOKENPRETGEPOINTpointbooleanInclude opportunities with point campaigns
typestringA comma separated list of Opportunity type
creatorAddressstringFilter by creator address
testbooleandefault: falseInclude opportunities with test campaigns
minimumTvlnumberMinimum TVL threshold in USD
maximumTvlnumberMaximum TVL threshold in USD
minimumAprnumberMinimum APR threshold
maximumAprnumberMaximum APR threshold
minimumDailyRewardsnumberMinimum daily rewards threshold in USD
maximumDailyRewardsnumberMaximum daily rewards threshold in USD
minimumCreatedAtnumberFilter opportunities whose last campaign was created at or after this Unix timestamp (seconds)
maximumCreatedAtnumberFilter opportunities whose last campaign was created at or before this Unix timestamp (seconds)
statusstringA comma separeted list of status. Legal values are: LIVE, PAST, SOON
identifierstringFilter by opportunity identifier (a.k.a. mainParameter). Free-form string, often a pool/vault/market address (e.g. 0x35Cbe8542E70fa2f7F9cDF129F19e593F4b4f560) or an arbitrary on-chain hash for non-address opportunities. NOT a campaign ID. See ID types.
idstringA comma-separated list of internal opportunity IDs (Opportunity.id, numeric hash). Example: ?id=5877322385708089533,1234567890. NOT campaign IDs. See ID types.
campaignsbooleanInclude campaign data. Will slow down the request. Default: false
tokensstringA comma separated list of token symbol. Use to filter by token
stablecoinbooleandefault: falseFilter opportunities that include at least one stablecoin token
rewardTokenSymbolstringFilter by opportunity that have at least 1 campaigns where the reward token has this symbol
sortstringSort by apr, tvl, rewards, maxDailyRewards, last campaign creation date, campaign start times, or campaign end times
orderstringdefault: descasc to sort in ascending order or desc to sort in descending order.
distributionTypesenum[]FIX_REWARDMAX_REWARDDUTCH_AUCTIONTOTAL_APRmainProtocolIdstringA comma-separated list of protocol slugs (e.g. aave,morpho,uniswap). NOT numeric IDs. List slugs at GET /v4/protocols. See ID types.
programSlugsstringA comma separated list of program ids or slugs. You can get the list of all supported programs by calling GET /v4/programs
chainNamestringA comma separated list of chain names. Example: ?chainName=ethereum,arbitrum
excludeSubCampaignsbooleandefault: falseExclude sub-campaigns from the results. Default: false
explorerAddressstringFilter by on-chain pool/vault/market address (20-byte EVM address, e.g. 0x35Cbe8542E70fa2f7F9cDF129F19e593F4b4f560). Often the most reliable way to look up an opportunity if you only know the underlying contract. See ID types.
withInvalidsbooleandefault: falseInclude opportunities that have been marked as invalid
campaignTypesstringA comma separated list of CampaignType enum numeric values. Example: ?campaignTypes=18,19
Responses
200Response for status 200
object | null[]
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_PIDCOMPOSEDonChainCampaignIdstring[
{}
]https://api.merkl.xyz/v4/opportunities/?page=&items=&test=&stablecoin=&order=&excludeSubCampaigns=&withInvalids=curl -X GET "https://api.merkl.xyz/v4/opportunities/?page=0&items=20&test=false&stablecoin=false&order=desc&excludeSubCampaigns=false&withInvalids=false"