---
title: "GET /v4/campaigns/{id}/linked"
method: GET
path: "/v4/campaigns/{id}/linked"
tags: ["Campaigns"]
---

# GET /v4/campaigns/{id}/linked

`GET /v4/campaigns/{id}/linked`

Get every opportunity linked to a campaign — its full chain of parent campaigns up to the root, plus its entire sub-campaign subtree — as a flat list of nodes. Each node carries its `campaignId` and `parentCampaignId` so you can reconstruct the tree at any depth. `self` identifies the requested campaign.

## Path parameters

- `id` string, required — Campaign ID (hash) or composite identifier (distributionChain-campaignId)

## Query parameters

- `test` boolean — Include test campaigns
- `point` boolean — Include point campaigns
- `tokenTypes` union[] — Filter by token type. Use POINT to include point campaigns and PRETGE to include preTGE campaigns.
  - union
    - string
    - string
    - string
- `campaigns` boolean — Include campaign data. Will slow down the request
- `excludeSubCampaigns` boolean — Exclude subcampaigns from the results.

## Response `200`

Response for status 200

- object
  - `self` string, required — Campaign ID of the requested campaign
  - `nodes` object[], required
    - `campaignId` string, required — Campaign ID (hash)
    - `onChainCampaignId` string, required — On-chain campaign identifier
    - `parentCampaignId` string, required
    - `opportunity` object, required
      - `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

## Changes

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

[Change history](https://skmtc.dev/merkl/apis/merkl-api/changes/v4/campaigns/:id/linked/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)
