Skip to main content

Claimable rewards of an account

GET 

/v1/data/rewards/user

Every reward balance an account can claim, per source and reward token:

  • Merkl campaigns (Aave, Morpho, Euler, Dolomite, Fluid, Neverland, LayerBank, … — anything distributed through Merkl),
  • Aave-style incentives controllers (Aave forks' native emissions, dTRINITY's rebate, …),
  • Flying Tulip FT supply emission,
  • Lista DAO emissions — LISTA and partner tokens on Moolah vaults and markets (BNB and Ethereum, all claimed on BNB), the LISTA-holder bonus, Lista Credit's emission and the veLISTA lisUSD borrow rebate. Lista serves its Merkle proofs only against the account's own login signature (Credit's excepted, which is always read), so without listaSignature + listaMessage the response carries authRequired with the exact message to personal_sign instead of a balance.

claimable is claimable now, pending still accruing; USD values where the token prices. breakdowns attribute each balance to the market that earned it (marketUid, or vault for share-token deposits), using the same resolution that puts the campaign's APR on the market row. A Merkl balance is per token: filtering by marketUid keeps the entry and its breakdown for that market, but the claim pays the whole token balance. claimSupported: false marks a reward the protocol only pays through its own flow (e.g. Neverland locks DUST into veDUST) — claim it in the protocol app. errors lists sources that could not be read; a failed source is never reported as zero. Build the claim with /v1/actions/rewards/claim.

Plain-text reference — GET /v1/data/rewards/user

Parameters

ParameterInTypeRequiredDescription
accountquerystringyesThe holder.
chainsquerystringnoComma-separated chain ids to read (required unless marketUid is given).
marketUidquerystringnoOnly the rewards one market earned (lender:chainId:ref). Also sets the chain when chains is absent.
lenderquerystringnoOnly the rewards markets of this lender earned (prefix match, e.g. MORPHO_BLUE). See the LenderId schema for the full set of accepted values.
sourcesquerystringnoComma-separated subset of merkl, aave-incentives, flying-tulip, lista (default: all).
listaSignaturequerystringnoLista: the account’s personal_sign over listaMessage (Lista’s own login). Without it the Lista balance is not read and authRequired says what to sign.
listaMessagequerystringnoLista: the signed text, verbatim — <ISO datetime>\nThank you for your support of listaDAO., accepted for 7 days.
listaSignatureTypequerystringnoLista: safe when the account is a Safe (EIP-1271).

Response 200

FieldTypeDescription
successTrue
dataobject
data.accountstring
data.totalClaimableUsdnumber
data.rewardsobject[]
data.rewards[].chainIdstringChain the CLAIM runs on (Merkl may distribute elsewhere than the position).
data.rewards[].sourcemerkl, aave-incentives, flying-tulip, lista
data.rewards[].sourceIdstring
data.rewards[].tokenobject
data.rewards[].token.addressstringEVM contract address, lowercase or checksummed hex.
data.rewards[].token.symbolstringToken symbol, e.g. WETH.
data.rewards[].token.decimalsintegerToken decimals — divide raw amounts by 10 ** decimals.
data.rewards[].token.priceUsdnumber
data.rewards[].claimablestringClaimable now.
data.rewards[].pendingstringAccrued, not claimable yet (Merkl: waits for the next root).
data.rewards[].claimedstringLifetime claimed (Merkl).
data.rewards[].claimableUsdnumber
data.rewards[].pendingUsdnumber
data.rewards[].claimSupportedbooleanfalse when a dry run of the standard claim reverts — claim in the protocol app (see warning).
data.rewards[].warningstring
data.rewards[].breakdownsobject[]
data.rewards[].breakdowns[].marketobjectThe market a slice of a reward balance came from. Lending markets carry marketUid; vault-shaped deposits carry the share token in vault; Aave-fork incentives also name the aToken/vToken in reserveToken.
data.rewards[].breakdowns[].amountstring
data.rewards[].breakdowns[].claimablestring
data.rewards[].breakdowns[].claimedstring
data.rewards[].breakdowns[].pendingstring
data.rewards[].breakdowns[].merklOpportunityIdstring
data.rewards[].breakdowns[].campaignIdstring
data.rewards[].breakdowns[].reasonstring
data.rewards[].claimobjectWhat the claim calls: merkl (Distributor), aave-incentives (controller + assets), flying-tulip (PositionsManager + assets + FT), lista (BNB Merkle distributor: program lending-v1 | lending | holder | velista-rebate | credit, shape single | multi, cumulative totalAmount, proof).
data.errorsobject[]Sources that could not be read — NOT a zero balance.
data.errors[].sourcestring
data.errors[].chainIdstringEVM chain id, as a decimal string. See the ChainId schema.
data.errors[].errorstring
data.authRequiredobject[]Sources NOT read because they need the account’s signature first — not a zero balance. Lista: personal_sign the message and pass it back as listaSignature + listaMessage (valid until expiresAt, 7 days).
data.authRequired[].sourcestring
data.authRequired[].chainIdstringEVM chain id, as a decimal string. See the ChainId schema.
data.authRequired[].formatpersonal_sign
data.authRequired[].messagestring
data.authRequired[].expiresAtinteger

Example response

{
"success": true,
"data": {
"account": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"totalClaimableUsd": 1.0,
"rewards": [
{
"chainId": "1",
"source": "merkl",
"sourceId": "merkl",
"token": {
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"symbol": "string",
"decimals": 1,
"priceUsd": 1.0
},
"claimable": "string",
"pending": "string",
"claimed": "string",
"claimableUsd": 1.0,
"pendingUsd": 1.0,
"claimSupported": true,
"warning": "string",
"breakdowns": [
{
"market": {
"chainId": "1",
"marketUid": "DOLOMITE:1:0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d",
"lender": "AAVE_V3",
"underlying": "string",
"reserveToken": "string",
"vault": "string",
"side": "deposit"
},
"amount": "1000000000000000000",
"claimable": "string",
"claimed": "string",
"pending": "string",
"merklOpportunityId": "string",
"campaignId": "string",
"reason": "string"
}
],
"claim": {}
}
],
"errors": [
{
"source": "string",
"chainId": "1",
"error": "string"
}
],
"authRequired": [
{
"source": "string",
"chainId": "1",
"format": "personal_sign",
"message": "string",
"expiresAt": 1,
"description": "string"
}
]
}
}

Request​

Responses​

The account's reward balances