curl --request GET \
--url https://public-api.birdeye.so/identity/v1/single \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/identity/v1/single"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://public-api.birdeye.so/identity/v1/single', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": {
"address": "DaP44wF8mKmYki1M5zguvXYAW5XF6sLQEzvdmvcizRqD",
"type": "wallet",
"label": "dap4.sol",
"category": "Wallet",
"tags": [],
"domains": [
"dap4.sol",
"uapx.sol",
"ufox.sol",
"blxme.sol",
"bruca.sol"
],
"domains_total": 2192
}
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}Wallet Identity - Single
Resolve one address to a compact identity: its type, named entity, display label, category, tags, and — for wallets — the .sol domains it owns (a preview capped at 20, with domains_total for the true count). A .sol domain passed as address resolves to its owner. Non-wallet identities do not return domains.
curl --request GET \
--url https://public-api.birdeye.so/identity/v1/single \
--header 'X-API-KEY: <api-key>'import requests
url = "https://public-api.birdeye.so/identity/v1/single"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://public-api.birdeye.so/identity/v1/single', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": {
"address": "DaP44wF8mKmYki1M5zguvXYAW5XF6sLQEzvdmvcizRqD",
"type": "wallet",
"label": "dap4.sol",
"category": "Wallet",
"tags": [],
"domains": [
"dap4.sol",
"uapx.sol",
"ufox.sol",
"blxme.sol",
"bruca.sol"
],
"domains_total": 2192
}
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}- Usage Note
- Accessibility
- Chain Supported
Resolve one address to a single compact identity — who an address is, not what it did.
Pass a wallet address — or a .sol domain, which resolves to its owner — and get one identity object: a type (wallet / exchange / protocol / token / …), an optional named entity, a display label, a category, tags, and, for wallets, the .sol domains it owns plus domains_total.
For a wallet identified only by a .sol domain, label is set to its first domain (domains[0]). The domains array is a preview capped at 20, ordered shortest-first then alphabetical — read domains_total for the true count and use the domains endpoint to page through them all. Non-wallet identities (exchange / protocol / token) never return domains: a CEX “owning” a .sol domain is SNS spam (anyone can point a domain’s owner at any address).
- Lite
- Starter
- Premium
- Business
- Enterprise
Solana
Identity Field Definitions 🏷️
Identity Field Definitions 🏷️
- type — the identity class:
wallet,exchange,protocol,token,program, orunknown. Drives how a client should render the address. - entity — the named owner when known (e.g.
Binance,Jupiter,Astralane). Absent for anonymous wallets. - label — the human-readable display name. For a domain-only wallet this is the first (shortest)
.soldomain, until the owner’s favourite domain is available. - category — the broad grouping behind the type (e.g.
Wallet,Exchange,Protocol,Token). - tags — extra descriptors attached to the identity (e.g. a KOL’s name,
deposit). Empty array when none apply. - domains / domains_total — the
.soldomains a wallet owns.domainsis capped at 20 and sorted shortest-first then alphabetical;domains_totalis the true count.
Use Cases 💡
Use Cases 💡
- Put a human-readable name on a single address — exchange, protocol, known entity, or named wallet — instead of raw base58.
- Resolve a
.soldomain to its owning wallet in one call. - Enrich a transaction view, address page, or alert with a compact identity.
How to Use 🛠️
How to Use 🛠️
address(required) — a wallet address or a.soldomain (resolves to the owner).- Returns one identity object. An address with no label returns an empty object.
Best Practices ✅
Best Practices ✅
- Trust
domains_total, notdomains.length— the array is a 20-item preview. - Need every domain? Call the
domainsendpoint and page; don’t infer it from this response. - Treat a domain-only wallet’s
labelas a display convenience (the shortest domain), not a user-chosen primary.
Limitations ⚠️
Limitations ⚠️
- Returns at most 20 domains (a preview) — use the
domainsendpoint for the full set. - Domains are returned only for
type: wallet; non-wallet identities suppress them (SNS-spam guard). - The domain-only wallet
label= first (shortest) domain until SNS favourite-domain ingest lands. - Solana only.
Authorizations
API key for authentication
Query Parameters
A Solana wallet address, or a .sol domain that resolves to its owner.
"DaP44wF8mKmYki1M5zguvXYAW5XF6sLQEzvdmvcizRqD"
Was this page helpful?

