Marketplace data
Holders
List who holds a collection, with header figures, kiosk, wallet and staked counts, and items staked or locked in protocols.
GET /collections/{slug}/holders returns the holders of a collection, largest first, with a header of collection-wide figures. Holder data is read from chain state, including items that sit inside kiosks and inside staking or locking protocols.
Query parameters
Request
curl "https://rare.market/api/v1/collections/popkins/holders?limit=2"{
"data": [
{
"rank": 1,
"address": "0x1c8d86c652698628a08650bd7455f5072e925697ce4da9ae0f0ae4e924118e3d",
"name": null,
"count": 901,
"pctOfSupply": 3.6,
"inKiosk": 9,
"inWallet": 0,
"staked": 892,
"listed": 0
},
{
"rank": 2,
"address": "0x16386f6d07a85631e419e8f83b1d99a13949515a6af7ba3f81f3cfb0ec7e5543",
"name": null,
"count": 719,
"pctOfSupply": 2.88,
"inKiosk": 1,
"inWallet": 718,
"staked": 0,
"listed": 0
}
],
"nextCursor": "eyJuIjo3MTksImgiOiIweDE2Mzg2ZjZkMDdhODU2MzFlNDE5ZThmODNiMWQ5OWExMzk0OTUxNWE2YWY3YmEzZjgxZjNjZmIwZWM3ZTU1NDMifQ",
"total": 3643,
"header": {
"owners": 3643,
"uniqueOwnersPct": 14.61,
"uniquePct": 14.61,
"top10Pct": 17.88,
"top100Pct": 53.16,
"itemsHeld": 24927,
"supply": 25000,
"stakedOrLocked": [
{
"protocol": "0x38f0bad7a60a8c4399a810430b7625b60c93983321b3cd8723f201cc559de5c1::staking_contract",
"name": "staking_contract",
"count": 18806,
"attributed": 18806
}
],
"asOf": "2026-10-27T01:59:25.044Z"
}
}Holder rows
inKiosk + inWallet + staked can be lower than count. The rest are items held another way, for example in an escrow listing or nested inside another object the holder owns.
Header figures
The same owners, uniqueOwnerPct and stakedOrLocked figures appear in stats on GET /collections/{slug}.
Staked or locked items
Many collections let holders stake or lock items in a protocol. On chain, those items belong to the protocol's shared object, not to the user. rare.market follows the ownership chain to find the real holder:
- An item owned by another address-owned object is held by that object's owner.
- An item in a kiosk is held by whoever holds the kiosk's owner cap.
- An item in a protocol's shared object is held by the user the protocol records for it. Those items count in
stakedand the user counts inowners.
header.stakedOrLocked lists each protocol that holds items of the collection, largest first:
When attributed equals count, every staked item is credited to a holder. When it is lower, the difference is missing from itemsHeld.
const { header } = await (
await fetch("https://rare.market/api/v1/collections/popkins/holders?limit=1")
).json();
for (const p of header.stakedOrLocked ?? []) {
const label = p.name ?? "Unidentified contract";
console.log(`${label}: ${p.count} items, ${p.attributed} credited to holders`);
}Freshness and asOf
Holder data comes from a background reader that tracks ownership on chain, separate from the trading feeds. asOf tells you how current it is. The reader can be paused, so check asOf before you treat the numbers as live. Responses are also cached in the API for a few minutes, so a transfer can take a short while to show up.
Paging and sorting
The default order (sort=count, dir=desc) pages with a cursor tied to the last row. Other sorts page by offset with an opaque cursor. Either way, pass nextCursor back as cursor until it is null.
curl "https://rare.market/api/v1/collections/popkins/holders?sort=listed&dir=desc&limit=50"Holdings of one wallet
For the other direction (what one address holds), use GET /accounts/{address}/holdings-summary and the item endpoints in Wallets and portfolio.
