ENS Indexer API

API Documentation

ENSWhois Docs Status API

Public API for querying ENS domain data. All endpoints return JSON.

https://api.enswhois.com

Authentication

API Key

Pass your key via the X-API-Key header. Sign up to get a key with 1,000 free credits.

Micropayments (MPP)

Pay per request using the MPP protocol. No account needed — pay directly from your wallet.

No authentication is needed to try the API - unauthenticated requests are limited to 5 per minute. Sign up for unlimited access.

CORS is enabled for all /api endpoints. You can call these from any origin.
GET /stats

Get indexer statistics including block progress, domain counts, event counts, and sync status.

Example Response

{
  "name": "indexer-1",
  "blocks": {
    "chainHead": 21500000,
    "fetched": 21499950,
    "processed": 21499900
  },
  "services": {
    "fetcher": { "running": true, "synced": true },
    "processor": { "running": true, "synced": true },
    "addressProcessor": { "running": true }
  },
  "queues": {
    "domainsPending": 0,
    "domainsReady": 0,
    "eventsPending": 12,
    "eventsPendingNamehashes": 5,
    "eventsDirect": 3,
    "cachedMappings": 1500
  },
  "addressProcessor": {
    "addressCount": 245000,
    "eventsRemaining": 0,
    "lastEventId": 8500000
  }
}
GET /pending-stats

Get count of pending (unhashed) domains awaiting label resolution.

Example Response

{
  "pendingCount": 1234
}

ENS Statistics

GET /ens-stats

Global ENS overview. Public endpoint, no API key required. Cached for 5 minutes.

Example Response

{
  "total_domains": 2145000,
  "active_domains": 1890000,
  "expired_domains": 255000,
  "wrapped_domains": 620000,
  "wrapped_percentage": 32.8,
  "expiring_30d": 18500,
  "expiring_90d": 52000,
  "unique_owners": 485000,
  "total_events": 8200000,
  "registrations_24h": 340,
  "registrations_7d": 2800,
  "renewals_7d": 4100,
  "generated_at": "2026-04-09T12:00:00Z"
}
GET /ens-stats/registrations

30-day daily registration and renewal counts. Public, cached for 15 minutes.

Example Response

{
  "daily": [
    { "date": "2026-04-08", "registrations": 340, "renewals": 520 }
  ],
  "generated_at": "2026-04-09T12:00:00Z"
}
GET /ens-stats/distribution

Domain label length and TLD distribution. Public, cached for 1 hour.

Example Response

{
  "eth_label_length": [
    { "length": 3, "count": 45000, "percentage": 2.4 }
  ],
  "all_label_length": [
    { "length": 3, "count": 52000, "percentage": 2.1 }
  ],
  "by_tld": [
    { "tld": "eth", "count": 1800000, "note": "active" },
    { "tld": "xyz", "count": 12000, "note": "all_time" }
  ],
  "by_subname_parent": [
    { "parent": "dcl.eth", "count": 95000 }
  ],
  "generated_at": "2026-04-09T12:00:00Z"
}
GET /ens-stats/primary-names

Primary name (reverse record) adoption statistics. Public, cached for 1 hour.

Example Response

{
  "unique_addresses_with_primary_name": 485000,
  "unique_domain_owners": 908000,
  "adoption_percentage": 53.4,
  "multi_chain_count": 12000,
  "by_registrar": [
    { "registrar": "addr.reverse", "chain": "Mainnet (legacy)", "with_name": 420000, "cleared": 15000 },
    { "registrar": "80002105.reverse", "chain": "Base", "with_name": 45000, "cleared": 2000 }
  ],
  "generated_at": "2026-04-09T12:00:00Z"
}
GET /ens-stats/recent-activity

Latest ENS events (registrations, renewals, transfers, wraps, primary name changes). Public, cached for 30 seconds.

Example Response

{
  "events": [
    {
      "type": "registration",
      "name": "example.eth",
      "cost_eth": "0.003",
      "years": 5,
      "block_number": 21500000,
      "transaction_hash": "0x..."
    },
    {
      "type": "primary_name",
      "address": "0xd8dA...",
      "name": "vitalik.eth",
      "chain": "Base",
      "block_number": 21499990,
      "transaction_hash": "0x..."
    }
  ],
  "generated_at": "2026-04-09T12:00:00Z"
}