---
title: "GET /v4/campaigns/aggregate"
method: GET
path: "/v4/campaigns/aggregate"
tags: ["Campaigns"]
---

# GET /v4/campaigns/aggregate

`GET /v4/campaigns/aggregate`

Aggregate all campaigns matching the provided filters and return a per-token breakdown of total amounts and USD values. Useful for analyzing program-level reward distribution (e.g. all rewards on a chain, all UNI rewards, or all campaigns by a creator).

## 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
- `id` string — Filter by **internal campaign ID** (`Campaign.id`, numeric hash, e.g. `13896840291241714382`). NOT the on-chain `campaignId` (hex hash) — use the `campaignId` query for that. Comma-separated list supported. See [ID types](/integrate-merkl/id-types).
- `creatorTag` string — Filter campaigns created by a user who has a specific tag
- `creatorAddress` string
- `creatorAddresses` string[]
- `creatorId` string — Filter campaigns created by a user who is registered as a merkl creator
- `chainId` union — Filter by compute chain.<br>You can get the list of all supported chains by calling [GET /v4/chains](#tag/chains/GET/v4/chains/)
  - string, numeric
  - number — Filter by compute chain.<br>You can get the list of all supported chains by calling [GET /v4/chains](#tag/chains/GET/v4/chains/)
- `search` string — Search amongst multiple values (token, protocols, tags, campaigns)
- `distributionChainIds` union[] — Filter by distribution chain.<br>You can get the list of all supported chains by calling [GET /v4/chains](#tag/chains/GET/v4/chains/)
  - union
    - string, numeric
    - number
- `type` string — Filter by type of campaign
- `types` string[] — Filter by type of campaign using an array. The `type` entry has priority.
- `subType` number — Silo, Radiant, Morpho, Dolomite, Compound, Ajna and Euler campaigns have a subtype attribute you can filter on
- `campaignId` string — Filter by **on-chain campaign ID** (`Campaign.campaignId`, 32-byte hex hash, e.g. `0x93cf385c2a446a7596820601caf25e63bfc4939efa9a89a6f21563b58ee54eb1`). The same on-chain campaignId can exist on several chains; one resource per chain is returned. NOT the internal `Campaign.id` (numeric hash) — use the `id` query for that. See [ID types](/integrate-merkl/id-types).
- `campaignIds` string[] — Filter by multiple **on-chain campaign IDs** (32-byte hex hashes). The `campaignId` entry has priority over this one. NOT internal `Campaign.id` values. See [ID types](/integrate-merkl/id-types).
- `mainParameter` string — Filter by `mainParameter` (a.k.a. opportunity `identifier`) — the value used to group campaigns into one opportunity. Can be a pool/vault/market address (e.g. `0x35Cbe854...`) or an arbitrary on-chain hash. NOT a campaign or opportunity ID. See [ID types](/integrate-merkl/id-types).
- `tokenSymbol` string — Filter by reward token symbol (e.g. USDC for campaigns rewarding in USDC)
- `tokenAddress` string — Filter results by the reward token address. Use in combination with chainId for accuracy
- `test` boolean — Return campaigns rewarding in test tokens
- `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 — Return campaigns rewarding in points
- `opportunityId` string — Filter by **internal opportunity ID** (`Opportunity.id`, numeric hash, e.g. `7673870997270712040`). Lookup at [GET /v4/opportunities](#tag/opportunities/GET/v4/opportunities). NOT a campaign ID. See [ID types](/integrate-merkl/id-types).
- `opportunityIds` string[] — Filter by multiple **internal opportunity IDs**. The `opportunityId` entry has priority over this one. See [ID types](/integrate-merkl/id-types).
- `status` unknown
- `startTimestamp` string — Returns campaigns starting *after* the given unix timestamp
- `endTimestamp` string — Returns campaigns ending *after* the given unix timestamp
- `withOpportunity` boolean — Include opportunity data. Will slow down the request. Default: false
- `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
- `createdAfter` union
  - string, date-time
  - string, date
  - number
- `createdBefore` union
  - string, date-time
  - string, date
  - number
- `excludeSubCampaigns` boolean — Exclude subcampaigns from the results. Default: false
- `onlySubCampaigns` boolean — Get Only Subcampaigns. Default: false
- `rootCampaignId` string — Filter by root **internal campaign ID** (`Campaign.id`, numeric hash). Returns only subcampaigns sharing this root. See [ID types](/integrate-merkl/id-types).
- `parentCampaignId` string — Filter by parent **internal campaign ID** (`Campaign.id`, numeric hash). Returns only subcampaigns sharing this parent. See [ID types](/integrate-merkl/id-types).
- `mainProtocolId` string — Filter by **protocol slug** (e.g. `aave`, `morpho`). NOT a numeric ID. List slugs at [GET /v4/protocols](#tag/protocols/GET/v4/protocols/).
- `pauseCompute` string — Filter by compute-pause reason. Returns only campaigns whose `pauseCompute` matches this exact reason (e.g. `paused_high_amount`).
- `showPrivate` boolean — When true, include private campaigns the caller (JWT, API key owner, or BackOffice) is authorized to see, decoded. When false (default), only public campaigns are returned. Bypasses CDN cache.
- `listOwner` string — Address that owns the campaign lists referenced by `campaignLists`. Required when `campaignLists` is set.
- `campaignLists` string — Comma-separated list names owned by `listOwner` (stored in the global `campaign-lists` config). Returns campaigns whose ID is in *any* of the given lists (union). List names are case-insensitive. Lists are shareable — anyone can query any owner's lists. Example: `baseapp,renew`.

## Response `200`

Response for status 200

- object
  - `totalCampaigns` number, required — Total number of campaigns matching filters
  - `totalUsd` number, required — Total USD value of all priced token rewards
  - `period` object, required
    - `start` string, required — ISO date of earliest campaign start, null if none
    - `end` string, required — ISO date of latest campaign end, null if none
  - `uniqueCreators` number, required — Number of distinct campaign creators
  - `uniqueOpportunities` number, required — Number of distinct opportunities targeted
  - `tokens` object[], required — Priced token breakdowns sorted by USD desc
    - `tokenId` string, required — Unique token identifier (chain+address)
    - `symbol` string, required — Reward token symbol (not unique across chains)
    - `totalAmount` number, required — Total raw token amount (amount / 10^decimals)
    - `currentPrice` number, required — Current token price in USD
    - `totalUsd` number, required — Total USD value at current price
    - `campaignCount` number, required — Number of campaigns distributing this token
    - `campaignIds` string[], required — IDs of campaigns distributing this token
  - `pointsTokens` object[], required — Point and preTGE token breakdowns
    - `tokenId` string, required — Unique token identifier (chain+address)
    - `symbol` string, required — Points token symbol (not unique across chains)
    - `totalAmount` number, required — Total raw token amount
    - `campaignCount` number, required — Number of campaigns distributing this token
    - `campaignIds` string[], required — IDs of campaigns distributing this token

---

[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/a7e5b9f6fb5f/schema)
