Many Web3 applications need to display ENS names for lists of addresses — leaderboards, transaction histories, governance voter lists, NFT gallery ownership labels. Resolving each address one at a time is slow and hammers rate limits. Resolvio's bulk resolution endpoints solve this with a single API call.
Why Bulk Resolution Matters
Consider a leaderboard with 100 addresses. Sequential resolution at ~100ms per lookup means 10 seconds of wait time before the page renders. Parallel requests help, but they still consume multiple network round trips and eat rate limit headroom. Bulk resolution batches everything into a single request, typically resolving 50 addresses in under 200ms total.
Bulk Reverse Resolution
The most common use case: you have a list of wallet addresses and want to display human-readable names next to each one. Pass them as a comma-separated list to the bulk reverse endpoint:
curl "https://api.resolvio.xyz/ens/v2/reverse/bulk?addresses=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0x225f137C3Eb2e12F21e5Be6d21b6f8B07157DebC,0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
[
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"name": "vitalik.eth",
"avatar": "eip155:1/erc1155:...",
"displayName": "vitalik.eth"
},
{
"address": "0x225f137C3Eb2e12F21e5Be6d21b6f8B07157DebC",
"name": null,
"displayName": "0x225f...ebC"
},
{
"address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
"name": "balajis.eth",
"displayName": "balajis.eth"
}
]
Results are returned in the same order as the input addresses, making it trivial to zip them back with your original data. When an address has no primary ENS name, name is null and displayName falls back to a truncated address.
Bulk Forward Resolution
If you have a list of ENS names and need their addresses, use the bulk forward endpoint:
curl "https://api.resolvio.xyz/ens/v2/resolve/bulk?names=vitalik.eth,nick.eth,ens.eth"
[
{ "name": "vitalik.eth", "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" },
{ "name": "nick.eth", "address": "0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5" },
{ "name": "ens.eth", "address": "0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7" }
]
Using Bulk Resolution in Practice
Here's a real-world pattern for enriching a leaderboard with ENS names:
interface LeaderboardEntry {
address: string
score: number
displayName?: string
}
async function enrichWithENS(entries: LeaderboardEntry[]): Promise<LeaderboardEntry[]> {
const addresses = entries.map(e => e.address).join(',')
const res = await fetch(
`https://api.resolvio.xyz/ens/v2/reverse/bulk?addresses=${addresses}`
)
const resolved = await res.json()
return entries.map((entry, i) => ({
...entry,
displayName: resolved[i].hasReverseRecord ? resolver[i].name || "",
}))
}
Performance and Caching
Resolvio batches bulk requests into multicall RPC calls against Ethereum, resolving all names in a single onchain round trip. Results are cached server-side with per-name TTLs, so repeated lookups for the same address are nearly instant.