Skip to main content

Bulk Lookups

Efficiently resolve hundreds or thousands of identities in a single request.

Endpointsโ€‹

EndpointDescriptionPrice
POST /api/bulk/ensBulk ENS resolution$0.005/name
POST /api/bulk/reverseBulk reverse resolution$0.005/addr
POST /api/bulk/profilesBulk full profiles$0.01/name
GET /api/bulk/status/{jobId}Check job statusFree

POST /api/bulk/ensโ€‹

Resolve many ENS names to addresses.

Requestโ€‹

curl -X POST https://api.web3identity.com/api/bulk/ens \
-H "Content-Type: application/json" \
-d '{
"names": [
"vitalik.eth",
"nick.eth",
"brantly.eth",
"gregskril.eth",
"slobo.eth"
]
}'

Response (Synchronous)โ€‹

For โ‰ค100 names, results are returned immediately:

{
"results": [
{ "name": "vitalik.eth", "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" },
{ "name": "nick.eth", "address": "0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5" },
{ "name": "brantly.eth", "address": "0x983110309620D911731Ac0932219af06091b6744" },
{ "name": "gregskril.eth", "address": "0x179A862703a4adfb29896552DF9e307980D19285" },
{ "name": "slobo.eth", "address": "0x7F27b0F7D6c6C7E8479E7b0d3F8C7A7b4A5C6D2E" }
],
"resolved": 5,
"failed": 0,
"errors": []
}

SDKโ€‹

const results = await client.bulkResolve([
'vitalik.eth',
'nick.eth',
'brantly.eth'
]);

Async Mode (Large Batches)โ€‹

For >100 names, use async mode:

Requestโ€‹

curl -X POST https://api.web3identity.com/api/bulk/ens \
-H "Content-Type: application/json" \
-d '{
"names": ["name1.eth", "name2.eth", ... ],
"async": true,
"webhook": "https://yourserver.com/webhook"
}'

Responseโ€‹

{
"jobId": "bulk_abc123xyz",
"status": "processing",
"total": 5000,
"estimatedSeconds": 45,
"statusUrl": "https://api.web3identity.com/api/bulk/status/bulk_abc123xyz"
}

Poll Statusโ€‹

curl https://api.web3identity.com/api/bulk/status/bulk_abc123xyz
{
"jobId": "bulk_abc123xyz",
"status": "completed",
"progress": {
"processed": 5000,
"total": 5000,
"percentage": 100
},
"results": {
"resolved": 4823,
"failed": 177
},
"downloadUrl": "https://api.web3identity.com/api/bulk/download/bulk_abc123xyz",
"expiresAt": "2026-02-09T04:30:00Z"
}

POST /api/bulk/reverseโ€‹

Bulk reverse resolution (addresses to names).

Requestโ€‹

curl -X POST https://api.web3identity.com/api/bulk/reverse \
-H "Content-Type: application/json" \
-d '{
"addresses": [
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5",
"0x983110309620D911731Ac0932219af06091b6744"
]
}'

Responseโ€‹

{
"results": [
{ "address": "0xd8dA...", "name": "vitalik.eth" },
{ "address": "0xb8c2...", "name": "nick.eth" },
{ "address": "0x9831...", "name": "brantly.eth" }
],
"resolved": 3,
"failed": 0
}

SDKโ€‹

const names = await client.bulkReverse([
'0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
'0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5'
]);

POST /api/bulk/profilesโ€‹

Get full profiles for multiple names.

Requestโ€‹

curl -X POST https://api.web3identity.com/api/bulk/profiles \
-H "Content-Type: application/json" \
-d '{
"names": ["vitalik.eth", "nick.eth"],
"include": ["avatar", "records", "socials"]
}'

Responseโ€‹

{
"profiles": [
{
"name": "vitalik.eth",
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"avatar": "https://api.web3identity.com/cdn/avatar/vitalik.eth.png",
"records": {
"com.twitter": "VitalikButerin",
"com.github": "vbuterin"
}
},
{
"name": "nick.eth",
"address": "0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5",
"avatar": "https://api.web3identity.com/cdn/avatar/nick.eth.png",
"records": {
"com.twitter": "nicksdjohnson",
"com.github": "arachnid"
}
}
],
"count": 2
}

Include Optionsโ€‹

OptionDescription
avatarInclude avatar URL
recordsInclude all text records
socialsInclude normalized social links
addressesInclude multi-chain addresses
expirationInclude registration expiry

Rate Limits & Pricingโ€‹

TierMax per RequestPrice per Name
Free10$0.01
Basic100$0.005
Pro1,000$0.003
Enterprise10,000$0.001

Cost Examplesโ€‹

NamesTierTotal Cost
50Basic$0.25
500Pro$1.50
5,000Enterprise$5.00

CSV Uploadโ€‹

Upload a CSV file of names:

Requestโ€‹

curl -X POST https://api.web3identity.com/api/bulk/upload \
-H "Content-Type: multipart/form-data" \
-F "file=@names.csv" \
-F "column=ens_name"

CSV Formatโ€‹

ens_name,other_data
vitalik.eth,123
nick.eth,456
brantly.eth,789

Responseโ€‹

{
"jobId": "upload_xyz789",
"parsed": 1000,
"status": "processing"
}

Download Resultsโ€‹

JSON Formatโ€‹

curl https://api.web3identity.com/api/bulk/download/bulk_abc123xyz

CSV Formatโ€‹

curl "https://api.web3identity.com/api/bulk/download/bulk_abc123xyz?format=csv"

CSV Outputโ€‹

name,address,resolved
vitalik.eth,0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,true
nick.eth,0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5,true
invalid.eth,,false

Webhook Notificationsโ€‹

Receive notification when async job completes:

curl -X POST https://api.web3identity.com/api/bulk/ens \
-H "Content-Type: application/json" \
-d '{
"names": [...],
"async": true,
"webhook": "https://yourserver.com/bulk-complete",
"webhookSecret": "your-secret-key"
}'

Webhook Payloadโ€‹

{
"event": "bulk.completed",
"jobId": "bulk_abc123xyz",
"status": "completed",
"results": {
"resolved": 4823,
"failed": 177
},
"downloadUrl": "https://api.web3identity.com/api/bulk/download/bulk_abc123xyz"
}

The webhook includes an X-Webhook-Signature header for verification.


Errorsโ€‹

CodeHTTPDescription
TOO_MANY_NAMES400Exceeded max names for tier
INVALID_CSV400CSV parsing failed
JOB_NOT_FOUND404Job ID doesn't exist
JOB_EXPIRED410Results expired (24h)