---
title: "GET /v4/opportunities/"
method: GET
path: "/v4/opportunities/"
tags: ["Opportunities"]
---

# GET /v4/opportunities/

`GET /v4/opportunities/`

**Retrieve Multiple Opportunities**
<p>This endpoint enables you to search for opportunities by providing specific criteria through query parameters.</p>

#### Request Examples

##### List opportunities by protocol name
```bash
curl "https://api.merkl.xyz/v4/opportunities?name=Euler"
```

Returns all opportunities associated with the Euler protocol, including aggregate metrics.

##### Filter by tag
```bash
curl "https://api.merkl.xyz/v4/opportunities?tags=zksync"
```

Returns opportunities tagged with "zksync" across all supported protocols.

## Query parameters

- `page` union — 0-indexed page number
  - string, numeric
  - number — 0-indexed page number
- `items` union — Number of items returned by page
  - string, numeric
  - number — Number of items returned by page
- `name` string — Filter by name
- `search` string — Search amongst multiple values (token, protocols, tags, campaigns)
- `campaignId` string — Filter 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](/integrate-merkl/id-types).
- `creatorSlug` string — Filter by creator slug
- `chainId` unknown
- `action` string — A comma seprated list actions. Legal values are: POOL, HOLD, DROP, LEND, BORROW, LONG, SHORT, SWAP, INVALID, STAKE
- `tokenTypes` union[] — Filter by token type. Use POINT to include point campaigns and PRETGE to include preTGE campaigns. By default every token is returned.
  - union
    - string
    - string
    - string
- `point` boolean — Include opportunities with point campaigns
- `type` string — A comma separated list of Opportunity type
- `creatorAddress` string — Filter by creator address
- `tags` string — Filter by tag
- `test` boolean — Include opportunities with test campaigns
- `minimumTvl` number — Minimum TVL threshold in USD
- `maximumTvl` number — Maximum TVL threshold in USD
- `minimumApr` number — Minimum APR threshold
- `maximumApr` number — Maximum APR threshold
- `minimumDailyRewards` number — Minimum daily rewards threshold in USD
- `maximumDailyRewards` number — Maximum daily rewards threshold in USD
- `minimumCreatedAt` number — Filter opportunities whose last campaign was created at or after this Unix timestamp (seconds)
- `maximumCreatedAt` number — Filter opportunities whose last campaign was created at or before this Unix timestamp (seconds)
- `status` unknown
- `identifier` string — Filter 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](/integrate-merkl/id-types).
- `id` string — A comma-separated list of **internal opportunity IDs** (`Opportunity.id`, numeric hash). Example: `?id=5877322385708089533,1234567890`. NOT campaign IDs. See [ID types](/integrate-merkl/id-types).
- `campaigns` boolean — Include campaign data. Will slow down the request. Default: false
- `tokens` string — A comma separated list of token symbol. Use to filter by token
- `stablecoin` boolean — Filter opportunities that include at least one stablecoin token
- `rewardTokenSymbol` string — Filter by opportunity that have at least 1 campaigns where the reward token has this symbol
- `sort` unknown
- `order` string — `asc` to sort in ascending order or `desc` to sort in descending order.
- `distributionTypes` union[]
  - union — Filter by reward mechanism. Legal values are: `FIX_REWARD`, `MAX_REWARD`, `DUTCH_AUCTION`, `TOTAL_APR`. Default: no filter
    - string
    - string
    - string
    - string
- `mainProtocolId` string — A comma-separated list of **protocol slugs** (e.g. `aave,morpho,uniswap`). NOT numeric IDs. List slugs at [GET /v4/protocols](#tag/protocols/GET/v4/protocols/). See [ID types](/integrate-merkl/id-types).
- `programSlugs` string — A comma separated list of program ids or slugs. You can get the list of all supported programs by calling [GET /v4/programs](#tag/programs/GET/v4/programs/)
- `chainName` unknown
- `excludeSubCampaigns` boolean — Exclude sub-campaigns from the results. Default: false
- `explorerAddress` string — Filter 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](/integrate-merkl/id-types).
- `withInvalids` boolean — Include opportunities that have been marked as invalid
- `campaignTypes` unknown

## Response `200`

Response for status 200

- union[]
  - union
    - object
      - `id` string, required
      - `type` string, required
      - `identifier` string, required
      - `chainId` number, required
      - `name` string, required
      - `description` string, required
      - `howToSteps` string[], required
      - `status` union, required
        - string
        - string
        - string
        - string
      - `action` union, required
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
      - `tags` string[], required
      - `mainProtocol` string
      - `depositUrl` string
      - `depositUrls` object[]
        - `id` string, required
        - `title` string, required
        - `url` string, required
        - `subtitle` string
        - `icon` string
        - `priority` number, required
      - `explorerAddress` string
      - `hidden` boolean
      - `tvl` number, required
      - `apr` number, required
      - `dailyRewards` number, required
      - `maxDailyRewards` number
      - `liveCampaigns` number, required
      - `lastCampaignCreatedAt` number, required
      - `earliestCampaignStart` string
      - `latestCampaignStart` string
      - `earliestCampaignEnd` string
      - `latestCampaignEnd` string
      - `nativeApr` number
      - `totalApr` number
      - `maxApr` number
      - `liveCampaignsForCreator` number
      - `soonCampaignsForCreator` number
      - `pastCampaignsForCreator` number
      - `distributionType` string
      - `tokens` object[], required
        - `id` string, required — Unique identifier for the token
        - `name` string, required — Full name of the token
        - `chainId` integer, required — Chain Id
        - `address` string, required — Address
        - `decimals` number, required — Number of decimals for the token
        - `symbol` string, required — Symbol of the token
        - `icon` string, required — URL to the token icon image
        - `verified` boolean, required — Whether the token is verified
        - `isNative` boolean, required — Whether this is a native blockchain token
        - `isTest` boolean, required — Whether this is a test token
        - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
          - string
          - string
          - string
        - `price` number — Current price of the token in USD
        - `updatedAt` number — Unix timestamp of last price update
        - `priceSource` string — Source of the price information
        - `displaySymbol` string — Custom display symbol override
        - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
        - `priceAlertDismissedAt` number
        - `priceAlertCount` number
      - `chain` object, required — Chain
        - `id` integer, required — Chain Id
        - `name` string, required — Legible name of the chain
        - `icon` string, required — URL to the icon of the chain
        - `liveCampaigns` number, required — Number of campaigns currently live on this chain
        - `endOfDisputePeriod` number, required
        - `explorers` object[]
          - `type` union, required
            - string
            - string
            - string
          - `url` string, required
          - `chainId` number, required
        - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
      - `activePrograms` object[], required
        - `id` string, required
        - `name` string, required
        - `slug` string
        - `description` string
        - `icon` string
      - `protocol` object — Protocol
        - `id` string, required
        - `name` string, required
        - `icon` string, required
        - `tags` string[], required
        - `description` string, required
        - `url` string, required
        - `dailyRewards` number
        - `numberOfLiveCampaigns` number
        - `opportunityLiveTags` string[]
        - `banner` string, required
        - `opportunityBannerLight` string, required
        - `opportunityBannerDark` string, required
        - `trustData` object, required
          - `slug` string, required
          - `category` string, required
          - `audits` string, required
          - `audit_links` string[], required
          - `audit_note` string, required
          - `github` string[], required
          - `twitter` string, required
          - `listedAt` number, required
          - `parentProtocol` string, required
          - `tvl` number
          - `hacks` object[]
            - `date` number, required
            - `name` string, required
            - `amountUSD` number, required
            - `technique` string, required
            - `source` string, required
          - `syncedAt` number, required
      - `aprRecord` object
        - `cumulated` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `identifier` string, required
          - `type` union, required
            - string
            - string
            - string
          - `value` number, required
          - `timestamp` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
      - `nativeAprRecord` object
        - `title` string, required
        - `description` string
        - `value` number, required
        - `timestamp` string, required
        - `amount` unknown
        - `rewardToken` object — Token
          - `id` string, required — Unique identifier for the token
          - `name` string, required — Full name of the token
          - `chainId` integer, required — Chain Id
          - `address` string, required — Address
          - `decimals` number, required — Number of decimals for the token
          - `symbol` string, required — Symbol of the token
          - `icon` string, required — URL to the token icon image
          - `verified` boolean, required — Whether the token is verified
          - `isNative` boolean, required — Whether this is a native blockchain token
          - `isTest` boolean, required — Whether this is a test token
          - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
            - string
            - string
            - string
          - `price` number — Current price of the token in USD
          - `updatedAt` number — Unix timestamp of last price update
          - `priceSource` string — Source of the price information
          - `displaySymbol` string — Custom display symbol override
          - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
          - `priceAlertDismissedAt` number
          - `priceAlertCount` number
        - `breakdowns` object[]
          - `title` string, required
          - `description` string
          - `value` number, required
          - `amount` unknown
          - `rewardToken` object — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
      - `tvlRecord` object
        - `total` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `identifier` string, required
          - `type` union, required
            - string
            - string
          - `value` number, required
      - `rewardsRecord` object
        - `total` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `campaignId` string, required
          - `value` number, required
          - `maxValue` number
          - `timestamp` string, required
          - `token` object, required — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
          - `amount` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
          - `onChainCampaignId` string
      - `campaigns` object[]
        - `id` string, required — Unique campaign id
        - `computeChainId` number, required — Chain ID where campaign data is computed
        - `distributionChainId` number, required — Chain ID where rewards are distributed
        - `campaignId` string, required — A hash of the campaign, unique per chain. Can be used to identify campaigns across chains
        - `type` string, required — Campaign type identifier
        - `subType` number — Campaign subtype for protocols like Silo, Radiant, Morpho, Dolomite, Compound, Ajna and Euler
        - `amount` string, required — Amount of reward token units being distributed by the campaign
        - `startTimestamp` union, required — Unix timestamp when the campaign starts
          - string
          - string, numeric
          - number
        - `endTimestamp` union, required — Unix timestamp when the campaign ends
          - string
          - string, numeric
          - number
        - `creatorAddress` string, required — Ethereum address of the campaign creator
        - `apr` number — Annual Percentage Rate for this campaign
        - `dailyRewards` number — Total daily rewards distributed in USD
        - `creator` object — Campaign creator information
          - `address` string, required — Creator's Ethereum address
          - `tags` string[] — Tag associated with the creator
          - `creatorId` string, nullable — Merkl creator ID if registered
        - `params` unknown, required
        - `description` string — Campaign description
        - `chain` object, required — Chain
          - `id` integer, required — Chain Id
          - `name` string, required — Legible name of the chain
          - `icon` string, required — URL to the icon of the chain
          - `liveCampaigns` number, required — Number of campaigns currently live on this chain
          - `endOfDisputePeriod` number, required
          - `explorers` object[]
            - `type` union, required
              - …
            - `url` string, required
            - `chainId` number, required
          - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
        - `rewardTokenId` string — Internal ID of the reward token
        - `rewardToken` object, required — Token
          - `id` string, required — Unique identifier for the token
          - `name` string, required — Full name of the token
          - `chainId` integer, required — Chain Id
          - `address` string, required — Address
          - `decimals` number, required — Number of decimals for the token
          - `symbol` string, required — Symbol of the token
          - `icon` string, required — URL to the token icon image
          - `verified` boolean, required — Whether the token is verified
          - `isNative` boolean, required — Whether this is a native blockchain token
          - `isTest` boolean, required — Whether this is a test token
          - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
            - string
            - string
            - string
          - `price` number — Current price of the token in USD
          - `updatedAt` number — Unix timestamp of last price update
          - `priceSource` string — Source of the price information
          - `displaySymbol` string — Custom display symbol override
          - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
          - `priceAlertDismissedAt` number
          - `priceAlertCount` number
        - `opportunityId` string — ID of the associated opportunity
        - `distributionChain` object — Chain
          - `id` integer, required — Chain Id
          - `name` string, required — Legible name of the chain
          - `icon` string, required — URL to the icon of the chain
          - `liveCampaigns` number, required — Number of campaigns currently live on this chain
          - `endOfDisputePeriod` number, required
          - `explorers` object[]
            - `type` union, required
              - …
            - `url` string, required
            - `chainId` number, required
          - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
        - `distributionType` union — Type of reward distribution mechanism
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
        - `campaignStatus` object, required
          - `campaignId` string, required
          - `computedUntil` union, required
            - string
            - string, numeric
            - number
          - `processingStarted` union, required
            - string
            - string, numeric
            - number
          - `status` string, required
          - `preComputeProcessingStarted` union, required
            - string
            - string, numeric
            - number
          - `preComputeStatus` string, required
          - `delay` union
            - string, numeric
            - number
          - `error` string
          - `details` unknown
        - `createdAt` string, date, required — ISO date when the campaign was created
        - `rootCampaignId` string — ID of the root campaign for hierarchical campaigns
        - `parentCampaignId` string — ID of the parent campaign for sub-campaigns
        - `childCampaignIds` string[] — List of child campaign IDs
        - `dailyRewardsBreakdown` object[] — Daily breakdown of rewards
          - `campaignId` string, required
          - `value` number, required
          - `maxValue` number
          - `timestamp` string, required
          - `token` object, required — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
          - `amount` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
          - `onChainCampaignId` string
        - `pauseCompute` string — ISO timestamp when computation was paused
        - `pausePrecompute` string — Reason for pausing precomputation, or null if not paused
        - `hasOverrides` boolean — Whether this campaign has previous config overrides
        - `isPrivate` boolean, required — Indicates if the campaign is private
        - `hidden` boolean — Whether the campaign is hidden from non-test API results
        - `hideLeaderboard` boolean — Whether leaderboard, ranks and reward breakdowns are hidden for this campaign
        - `campaignEncodingHash` string — Hash of the campaign configuration encoding
    - object
      - `id` string, required
      - `type` string, required
      - `identifier` string, required
      - `chainId` number, required
      - `name` string, required
      - `description` string, required
      - `howToSteps` string[], required
      - `status` union, required
        - string
        - string
        - string
        - string
      - `action` union, required
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
        - string
      - `tags` string[], required
      - `mainProtocol` string
      - `depositUrl` string
      - `depositUrls` object[]
        - `id` string, required
        - `title` string, required
        - `url` string, required
        - `subtitle` string
        - `icon` string
        - `priority` number, required
      - `explorerAddress` string
      - `hidden` boolean
      - `tvl` number, required
      - `apr` number, required
      - `dailyRewards` number, required
      - `maxDailyRewards` number
      - `liveCampaigns` number, required
      - `lastCampaignCreatedAt` number, required
      - `earliestCampaignStart` string
      - `latestCampaignStart` string
      - `earliestCampaignEnd` string
      - `latestCampaignEnd` string
      - `nativeApr` number
      - `totalApr` number
      - `maxApr` number
      - `liveCampaignsForCreator` number
      - `soonCampaignsForCreator` number
      - `pastCampaignsForCreator` number
      - `distributionType` string
      - `tokens` object[], required
        - `id` string, required — Unique identifier for the token
        - `name` string, required — Full name of the token
        - `chainId` integer, required — Chain Id
        - `address` string, required — Address
        - `decimals` number, required — Number of decimals for the token
        - `symbol` string, required — Symbol of the token
        - `icon` string, required — URL to the token icon image
        - `verified` boolean, required — Whether the token is verified
        - `isNative` boolean, required — Whether this is a native blockchain token
        - `isTest` boolean, required — Whether this is a test token
        - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
          - string
          - string
          - string
        - `price` number — Current price of the token in USD
        - `updatedAt` number — Unix timestamp of last price update
        - `priceSource` string — Source of the price information
        - `displaySymbol` string — Custom display symbol override
        - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
        - `priceAlertDismissedAt` number
        - `priceAlertCount` number
      - `chain` object, required — Chain
        - `id` integer, required — Chain Id
        - `name` string, required — Legible name of the chain
        - `icon` string, required — URL to the icon of the chain
        - `liveCampaigns` number, required — Number of campaigns currently live on this chain
        - `endOfDisputePeriod` number, required
        - `explorers` object[]
          - `type` union, required
            - string
            - string
            - string
          - `url` string, required
          - `chainId` number, required
        - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
      - `activePrograms` object[], required
        - `id` string, required
        - `name` string, required
        - `slug` string
        - `description` string
        - `icon` string
      - `protocol` object — Protocol
        - `id` string, required
        - `name` string, required
        - `icon` string, required
        - `tags` string[], required
        - `description` string, required
        - `url` string, required
        - `dailyRewards` number
        - `numberOfLiveCampaigns` number
        - `opportunityLiveTags` string[]
        - `banner` string, required
        - `opportunityBannerLight` string, required
        - `opportunityBannerDark` string, required
        - `trustData` object, required
          - `slug` string, required
          - `category` string, required
          - `audits` string, required
          - `audit_links` string[], required
          - `audit_note` string, required
          - `github` string[], required
          - `twitter` string, required
          - `listedAt` number, required
          - `parentProtocol` string, required
          - `tvl` number
          - `hacks` object[]
            - `date` number, required
            - `name` string, required
            - `amountUSD` number, required
            - `technique` string, required
            - `source` string, required
          - `syncedAt` number, required
      - `aprRecord` object
        - `cumulated` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `identifier` string, required
          - `type` union, required
            - string
            - string
            - string
          - `value` number, required
          - `timestamp` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
      - `nativeAprRecord` object
        - `title` string, required
        - `description` string
        - `value` number, required
        - `timestamp` string, required
        - `amount` unknown
        - `rewardToken` object — Token
          - `id` string, required — Unique identifier for the token
          - `name` string, required — Full name of the token
          - `chainId` integer, required — Chain Id
          - `address` string, required — Address
          - `decimals` number, required — Number of decimals for the token
          - `symbol` string, required — Symbol of the token
          - `icon` string, required — URL to the token icon image
          - `verified` boolean, required — Whether the token is verified
          - `isNative` boolean, required — Whether this is a native blockchain token
          - `isTest` boolean, required — Whether this is a test token
          - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
            - string
            - string
            - string
          - `price` number — Current price of the token in USD
          - `updatedAt` number — Unix timestamp of last price update
          - `priceSource` string — Source of the price information
          - `displaySymbol` string — Custom display symbol override
          - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
          - `priceAlertDismissedAt` number
          - `priceAlertCount` number
        - `breakdowns` object[]
          - `title` string, required
          - `description` string
          - `value` number, required
          - `amount` unknown
          - `rewardToken` object — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
      - `tvlRecord` object
        - `total` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `identifier` string, required
          - `type` union, required
            - string
            - string
          - `value` number, required
      - `rewardsRecord` object
        - `total` number, required
        - `timestamp` string, required
        - `breakdowns` object[], required
          - `campaignId` string, required
          - `value` number, required
          - `maxValue` number
          - `timestamp` string, required
          - `token` object, required — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
          - `amount` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
          - `onChainCampaignId` string
      - `campaigns` object[], required
        - `id` string, required — Unique campaign id
        - `computeChainId` number, required — Chain ID where campaign data is computed
        - `distributionChainId` number, required — Chain ID where rewards are distributed
        - `campaignId` string, required — A hash of the campaign, unique per chain. Can be used to identify campaigns across chains
        - `type` string, required — Campaign type identifier
        - `subType` number — Campaign subtype for protocols like Silo, Radiant, Morpho, Dolomite, Compound, Ajna and Euler
        - `amount` string, required — Amount of reward token units being distributed by the campaign
        - `startTimestamp` union, required — Unix timestamp when the campaign starts
          - string
          - string, numeric
          - number
        - `endTimestamp` union, required — Unix timestamp when the campaign ends
          - string
          - string, numeric
          - number
        - `creatorAddress` string, required — Ethereum address of the campaign creator
        - `apr` number — Annual Percentage Rate for this campaign
        - `dailyRewards` number — Total daily rewards distributed in USD
        - `creator` object — Campaign creator information
          - `address` string, required — Creator's Ethereum address
          - `tags` string[] — Tag associated with the creator
          - `creatorId` string, nullable — Merkl creator ID if registered
        - `params` unknown, required
        - `description` string — Campaign description
        - `chain` object, required — Chain
          - `id` integer, required — Chain Id
          - `name` string, required — Legible name of the chain
          - `icon` string, required — URL to the icon of the chain
          - `liveCampaigns` number, required — Number of campaigns currently live on this chain
          - `endOfDisputePeriod` number, required
          - `explorers` object[]
            - `type` union, required
              - …
            - `url` string, required
            - `chainId` number, required
          - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
        - `rewardTokenId` string — Internal ID of the reward token
        - `rewardToken` object, required — Token
          - `id` string, required — Unique identifier for the token
          - `name` string, required — Full name of the token
          - `chainId` integer, required — Chain Id
          - `address` string, required — Address
          - `decimals` number, required — Number of decimals for the token
          - `symbol` string, required — Symbol of the token
          - `icon` string, required — URL to the token icon image
          - `verified` boolean, required — Whether the token is verified
          - `isNative` boolean, required — Whether this is a native blockchain token
          - `isTest` boolean, required — Whether this is a test token
          - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
            - string
            - string
            - string
          - `price` number — Current price of the token in USD
          - `updatedAt` number — Unix timestamp of last price update
          - `priceSource` string — Source of the price information
          - `displaySymbol` string — Custom display symbol override
          - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
          - `priceAlertDismissedAt` number
          - `priceAlertCount` number
        - `opportunityId` string — ID of the associated opportunity
        - `distributionChain` object — Chain
          - `id` integer, required — Chain Id
          - `name` string, required — Legible name of the chain
          - `icon` string, required — URL to the icon of the chain
          - `liveCampaigns` number, required — Number of campaigns currently live on this chain
          - `endOfDisputePeriod` number, required
          - `explorers` object[]
            - `type` union, required
              - …
            - `url` string, required
            - `chainId` number, required
          - `lastClaimsOnchainFetchTimestamp` string, required — Timestamp of the last claims onchain fetch
        - `distributionType` union — Type of reward distribution mechanism
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
          - string
        - `campaignStatus` object, required
          - `campaignId` string, required
          - `computedUntil` union, required
            - string
            - string, numeric
            - number
          - `processingStarted` union, required
            - string
            - string, numeric
            - number
          - `status` string, required
          - `preComputeProcessingStarted` union, required
            - string
            - string, numeric
            - number
          - `preComputeStatus` string, required
          - `delay` union
            - string, numeric
            - number
          - `error` string
          - `details` unknown
        - `createdAt` string, date, required — ISO date when the campaign was created
        - `rootCampaignId` string — ID of the root campaign for hierarchical campaigns
        - `parentCampaignId` string — ID of the parent campaign for sub-campaigns
        - `childCampaignIds` string[] — List of child campaign IDs
        - `dailyRewardsBreakdown` object[] — Daily breakdown of rewards
          - `campaignId` string, required
          - `value` number, required
          - `maxValue` number
          - `timestamp` string, required
          - `token` object, required — Token
            - `id` string, required — Unique identifier for the token
            - `name` string, required — Full name of the token
            - `chainId` integer, required — Chain Id
            - `address` string, required — Address
            - `decimals` number, required — Number of decimals for the token
            - `symbol` string, required — Symbol of the token
            - `icon` string, required — URL to the token icon image
            - `verified` boolean, required — Whether the token is verified
            - `isNative` boolean, required — Whether this is a native blockchain token
            - `isTest` boolean, required — Whether this is a test token
            - `type` union, required — Type of the token (TOKEN, PRETGE, POINT)
              - …
            - `price` number — Current price of the token in USD
            - `updatedAt` number — Unix timestamp of last price update
            - `priceSource` string — Source of the price information
            - `displaySymbol` string — Custom display symbol override
            - `underlyingTokenId` string — If this token is a wrapper, the ID of the underlying token
            - `priceAlertDismissedAt` number
            - `priceAlertCount` number
          - `amount` string, required
          - `distributionType` union
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
            - string
          - `onChainCampaignId` string
        - `pauseCompute` string — ISO timestamp when computation was paused
        - `pausePrecompute` string — Reason for pausing precomputation, or null if not paused
        - `hasOverrides` boolean — Whether this campaign has previous config overrides
        - `isPrivate` boolean, required — Indicates if the campaign is private
        - `hidden` boolean — Whether the campaign is hidden from non-test API results
        - `hideLeaderboard` boolean — Whether leaderboard, ranks and reward breakdowns are hidden for this campaign
        - `campaignEncodingHash` string — Hash of the campaign configuration encoding

## Changes

- **2026-09-02** `b7784c9a78b9` — 2 info
  - added `subschema #1, subschema #2` to the `items/` response property `anyOf` list for the response status `200`
  - removed `subschema #1, subschema #2` from the `items/` response property `anyOf` list for the response status `200`

[Change history](https://skmtc.dev/merkl/apis/merkl-api/changes/v4/opportunities/get.md)

---

[API](https://skmtc.dev/merkl/apis/merkl-api.md) · [All operations](https://skmtc.dev/merkl/apis/merkl-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/merkl/merkl-api/revisions/b7784c9a78b9/schema)
