
get
/v4/analytics/beneficial-owners/allocations
Layered beneficial-owners report for a tokenThe full report behind the holders mapping, as a nested tree: the asset itself, and every vault/market/gauge holding it, each with its own positions and its own nested children. A position whose holder is itself a node is decomposed and linked via childIndexingId; a node reachable from more than one parent appears once under EACH parent, same indexingId, each copy holding only the share that flows through its own route. Same at/409 semantics as holders; 403 when any node in the graph holds confidential balances the caller may not read. diagnostics.unresolved names any position that could not be denominated in the asset — total excludes its value.
Query parameters
chainIdnumber | stringrequired
tokenstringrequired
atnumber | stringrequired
Responses
200Response for status 200
Schema
object
assetobjectrequired
chainIdnumberrequired
addressstringrequired
symbolstringrequired
decimalsnumberrequired
atnumberrequired
totalstringrequired
rootIndexingIdstringrequired
treeobjectrequired
indexingIdstringerrorobject
reasonstringrequired
messagestringrequired
diagnosticsobjectrequired
nodesTraversednumberrequired
maxDepthnumberrequired
unresolvedobject[]required
holdsstring | nullprotocolstring | nullreasonstringprotocolAmountstringExample
{
"asset": {
"chainId": 0,
"address": "string",
"symbol": "string",
"decimals": 0
},
"at": 0,
"total": "string",
"rootIndexingId": "string",
"tree": {
"indexingId": "string",
"error": {
"reason": "string",
"message": "string"
}
},
"diagnostics": {
"nodesTraversed": 0,
"maxDepth": 0,
"unresolved": [
{
"holds": "string",
"protocol": "string",
"reason": "string",
"protocolAmount": "string"
}
]
}
}get
https://analytics.merkl.xyz/v4/analytics/beneficial-owners/allocations?chainId=&token=curl -X GET "https://analytics.merkl.xyz/v4/analytics/beneficial-owners/allocations?chainId=1&token=0x3a4de44B29995a3D8Cd02d46243E1563E55bCc8b"