
/v4/users/{address}/protocols/{protocolId}/rewards
Retrieve claimable rewards for a user scoped to a single protocol. Breakdowns and amounts reflect only campaigns attributed to the requested protocol. The returned proofs and root still claim the full per-token leaf on-chain.
Path parameters
addressstringUser wallet address
protocolIdstringMain protocol ID to filter rewards by
Query parameters
chainIdstring[]List of chain IDs to query rewards for
reloadChainIdnumber | stringAn optional chainId to bypass the cache and check if there was very recently a claim on this chain
testbooleanInclude test token rewards
claimableOnlybooleanInclude only claimable rewards (to avoid transferring zero amounts)
breakdownPagenumber | stringdefault: 00-indexed pagination for rewards[number].breakdowns. 1000 items per page.
typeenumFilter rewards by token type
showPrivatebooleanWhen true, decode private campaign IDs instead of returning the zero hash. Requires the caller's identity (JWT or API key owner) to match the queried address — otherwise returns 403. Also bypasses CDN cache.
Responses
200Response for status 200
object[]
chainobjectChain
idintegernamestringiconstringliveCampaignsnumberendOfDisputePeriodnumberexplorersobject[]
typeenumETHERSCANBLOCKSCOUTSOLSCANurlstringchainIdnumberlastClaimsOnchainFetchTimestampstring | nullrewardsobject[]List of rewards for each token
rootstringMerkle tree root hash for the reward claimrecipientstringAddress of the reward recipientproofsstring[]Merkle proofs for reward verificationtokenobjectToken information
addressstringchainIdnumbersymbolstringdecimalsnumberunderlyingTokenIdstringFor a wrapper, the `Token.id` of the token it pays out on claim.breakdownsobject[]Detailed breakdowns of rewards by reason and campaign
reasonstringReason identifier for the rewardamountstringTotal reward amount for this reasonclaimedstringAmount already claimedpendingstringAmount pending claimcampaignIdstringID of the campaign that generated this rewardopportunityIdstringID of the opportunity this breakdown is attributed tocampaignStatusobject
campaignIdstringcomputedUntilstring | number | stringprocessingStartedstring | number | stringstatusstringpreComputeProcessingStartedstring | number | stringpreComputeStatusstringdelaynumber | stringerrorstringdetailsanyclaimedbigint | stringTotal amount claimed by the useramountbigint | stringTotal reward amountpendingbigint | stringTotal pending reward amount[
{
"chain": {
"id": 0,
"name": "string",
"icon": "string",
"liveCampaigns": 0,
"endOfDisputePeriod": 0,
"explorers": [
{
"type": null,
"url": "string",
"chainId": 0
}
],
"lastClaimsOnchainFetchTimestamp": "string"
},
"rewards": [
{
"root": "string",
"recipient": "string",
"proofs": [
"string"
],
"token": {
"address": "string",
"chainId": 0,
"symbol": "string",
"decimals": 0,
"underlyingTokenId": "string"
},
"breakdowns": [
{
"reason": null,
"amount": null,
"claimed": null,
"pending": null,
"campaignId": null,
"opportunityId": null,
"campaignStatus": null
}
],
"claimed": null,
"amount": null,
"pending": null
}
]
}
]https://api.merkl.xyz/v4/users//protocols//rewards?chainId=&breakdownPage=curl -X GET "https://api.merkl.xyz/v4/users/0xd93814273b33DD33B32cD345225CfB65DEB048Dd/protocols/aave/rewards?chainId=1&breakdownPage=0"