
get
/v4/analytics/beneficial-owners/holders
Flat beneficial-owner mapping for a tokenWho owns how much of token, including value held indirectly through vaults, markets, gauges and LP positions. The ownership graph reduced by owner: an address holding the asset through several routes appears once, summed. at is required — there is no implicit latest snapshot. 409 SNAPSHOT_NOT_INDEXED when any source in the graph is not indexed up to at; the response then also carries available (the latest at that would succeed now) and lagSeconds. 403 when any node in the graph holds confidential balances the caller may not read.
Query parameters
chainIdstring (integer) | integerrequired
Chain ID
tokenstringrequired
atstring (integer) | integerrequired
Unix timestamp
minAmountstringResponses
200Response for status 200
Schema
object
assetobjectrequired
chainIdnumberrequired
addressstringrequired
symbolstringrequired
decimalsnumberrequired
atnumberrequired
totalstringrequired
holderCountnumberrequired
holdersobject[]required
ownerstringamountstringsharestringExample
{
"asset": {
"chainId": 0,
"address": "string",
"symbol": "string",
"decimals": 0
},
"at": 0,
"total": "string",
"holderCount": 0,
"holders": [
{
"owner": "string",
"amount": "string",
"share": "string"
}
]
}409Response for status 409
Schema
object
typestringrequired
default: "/errors/conflict"titlestringrequired
default: "Conflict"statusnumberrequired
default: 409detailstringrequired
error"SNAPSHOT_NOT_INDEXED"required
messagestringrequired
requestednumberrequired
availablenumberrequired
lagSecondsnumberrequired
totalSourcesnumberrequired
laggingCountnumberrequired
neverIndexedCountnumberrequired
laggingSourcesobject[]required
indexingIdstringfrontiernumberstatusenumunregisteredregistered-no-rangelaggingparentIndexingIdstringpathstring[]depthnumberchainIdnumberprocessorTypestringprotocolstringtargetTokenstringrecipientstringconfigobjectcountsByStatusobjectrequired
unregisterednumberrequired
registeredNoRangenumberrequired
laggingnumberrequired
truncatedobjectrequired
unregisteredbooleanrequired
registeredNoRangebooleanrequired
laggingbooleanrequired
Example
{
"type": "/errors/conflict",
"title": "Conflict",
"status": 409,
"detail": "string",
"error": "SNAPSHOT_NOT_INDEXED",
"message": "string",
"requested": 0,
"available": 0,
"lagSeconds": 0,
"totalSources": 0,
"laggingCount": 0,
"neverIndexedCount": 0,
"laggingSources": [
{
"indexingId": "string",
"frontier": 0,
"status": "unregistered",
"parentIndexingId": "string",
"path": [
"string"
],
"depth": 0,
"chainId": 0,
"processorType": "string",
"protocol": "string",
"targetToken": "string",
"recipient": "string",
"config": {}
}
],
"countsByStatus": {
"unregistered": 0,
"registeredNoRange": 0,
"lagging": 0
},
"truncated": {
"unregistered": false,
"registeredNoRange": false,
"lagging": false
}
}get
https://analytics.merkl.xyz/v4/analytics/beneficial-owners/holders?chainId=&token=curl -X GET "https://analytics.merkl.xyz/v4/analytics/beneficial-owners/holders?chainId=1&token=0x3a4de44B29995a3D8Cd02d46243E1563E55bCc8b"