Skip to content

Resolver Records

Most apps that show an ENS profile start with a simple ask: given a name, render avatar, bio, links, and multichain addresses. Behind that one UI row sits a surprising amount of protocol work — forward resolution across resolver contracts, coin-type encoding, inconsistent text-record keys, avatar formats that may be URLs, IPFS paths, or NFT references, and user input that is often empty or invalid.

The Omnigraph exposes two resolution layers on domain.resolve so you can choose how much interpretation you want the API to do for you.

resolve.profile is a consumer-shaped view of the most common display fields. Addresses are keyed by chain (ethereum, solana, base, …) in chain-native encodings. Social accounts arrive as { handle, httpUrl } pairs. Avatar and header images expose httpUrl values you can drop straight into <img src="…" />, including derivation from NFT references per ENSIP-12. Unset or unparseable records are null — safe to render without extra guards.

Run in ENSAdmin
GraphQL
query DomainProfile($name: InterpretedName!) {
domain(by: {name: $name}) {
resolve {
profile {
description
avatar {
httpUrl
}
addresses {
ethereum
base
solana
bitcoin
rootstock
}
socials {
github {
handle
httpUrl
}
twitter {
handle
httpUrl
}
}
website {
httpUrl
}
header {
httpUrl
}
}
}
}
}
Variables
{
"name": "gregskril.eth"
}
Output
{
"data": {
"domain": {
"resolve": {
"profile": {
"description": "I like baking and building apps on web3 protocols.",
"avatar": {
"httpUrl": "https://gregskril.com/img/profile.jpg"
},
"addresses": {
"ethereum": "0x179a862703a4adfb29896552df9e307980d19285",
"base": "0x179a862703a4adfb29896552df9e307980d19285",
"solana": "2JQANQn1kccapb7GT8XScf9qBy59uMo9vh9WwVQhwStJ",
"bitcoin": "3NnpwUMGdGKuYaPDQagNXAgVXz9HdnJDNS",
"rootstock": "0x179a862703A4AdFb29896552dF9e307980D19285"
},
"socials": {
"github": {
"handle": "gskril",
"httpUrl": "https://github.com/gskril"
},
"twitter": {
"handle": "gregskril",
"httpUrl": "https://x.com/gregskril"
}
},
"website": {
"httpUrl": "https://gregskril.com/"
},
"header": {
"httpUrl": "https://files.gregskril.com/cdn/QmfGaXqmqasCrKktBgD4AvvJb3DLndiKXdz457uBGLTFGK"
}
}
}
}
}
}

Output matches a point in time snapshot GraphQL response from our alpha ENSNode instance. Live output depends on the configuration of your ENSNode instance and ENS state updates.

resolve.records returns protocol-accurate resolver data: numeric coin types, arbitrary text keys and unparsed bytes. This is the shape you would work with if you decoded resolver storage yourself — or if you need records that profile does not model.

Run in ENSAdmin
GraphQL
query DomainRecords($name: InterpretedName!) {
domain(by: {name: $name}) {
canonical {
name {
interpreted
}
}
resolve {
records {
addresses(coinTypes: [60, 2147483658, 501]) {
coinType
address
}
texts(keys: ["description", "avatar", "url", "com.github", "com.twitter"]) {
key
value
}
contenthash
}
}
}
}
Variables
{
"name": "gregskril.eth"
}
Output
{
"data": {
"domain": {
"canonical": {
"name": {
"interpreted": "gregskril.eth"
}
},
"resolve": {
"records": {
"addresses": [
{
"coinType": 60,
"address": "0x179a862703a4adfb29896552df9e307980d19285"
},
{
"coinType": 2147483658,
"address": "0x179a862703a4adfb29896552df9e307980d19285"
},
{
"coinType": 501,
"address": "0x1350bfe02357c8bc583d7514f44ba2c31821d8739160e7b79a0a94bc113a4f73"
}
],
"texts": [
{
"key": "description",
"value": "I like baking and building apps on web3 protocols."
},
{
"key": "avatar",
"value": "https://gregskril.com/img/profile.jpg"
},
{
"key": "url",
"value": "https://gregskril.com/"
},
{
"key": "com.github",
"value": "gskril"
},
{
"key": "com.twitter",
"value": "gregskril"
}
],
"contenthash": "0xe30101701220f0bd3d5d672c6197d341797bb34d4a5e31fbb40c437fead8756213522b976ed9"
}
}
}
}
}

Output matches a point in time snapshot GraphQL response from our alpha ENSNode instance. Live output depends on the configuration of your ENSNode instance and ENS state updates.

The same resolution request can return both layers. Compare interpreted and raw branches on one name in one query.

Run in ENSAdmin
GraphQL
query DomainProfileCompare($name: InterpretedName!) {
domain(by: { name: $name }) {
resolve {
profile {
avatar {
httpUrl
}
addresses {
ethereum
solana
}
socials {
github {
handle
httpUrl
}
twitter {
handle
httpUrl
}
}
website {
httpUrl
}
}
records {
addresses(coinTypes: [60, 501]) {
coinType
address
}
texts(keys: ["avatar", "com.twitter", "com.github", "url"]) {
key
value
}
}
}
}
}
Variables
{
"name": "gregskril.eth"
}
Output
{
"data": {
"domain": {
"resolve": {
"profile": {
"avatar": {
"httpUrl": "https://gregskril.com/img/profile.jpg"
},
"addresses": {
"ethereum": "0x179a862703a4adfb29896552df9e307980d19285",
"solana": "2JQANQn1kccapb7GT8XScf9qBy59uMo9vh9WwVQhwStJ"
},
"socials": {
"github": {
"handle": "gskril",
"httpUrl": "https://github.com/gskril"
},
"twitter": {
"handle": "gregskril",
"httpUrl": "https://x.com/gregskril"
}
},
"website": {
"httpUrl": "https://gregskril.com/"
}
},
"records": {
"addresses": [
{
"coinType": 60,
"address": "0x179a862703a4adfb29896552df9e307980d19285"
},
{
"coinType": 501,
"address": "0x1350bfe02357c8bc583d7514f44ba2c31821d8739160e7b79a0a94bc113a4f73"
}
],
"texts": [
{
"key": "avatar",
"value": "https://gregskril.com/img/profile.jpg"
},
{
"key": "com.twitter",
"value": "gregskril"
},
{
"key": "com.github",
"value": "gskril"
},
{
"key": "url",
"value": "https://gregskril.com/"
}
]
}
}
}
}
}

Output matches a point in time snapshot GraphQL response from our alpha ENSNode instance. Live output depends on the configuration of your ENSNode instance and ENS state updates.