Skip to main content
Beta: The Wallet API is currently in beta. APIs and response formats may change.

Overview

The Wallet Identity endpoint identifies known wallet addresses on Solana, including centralized exchanges, DeFi protocols, institutions, and other recognized entities. This is useful for compliance, analytics, and displaying human-readable names for known addresses.

API Reference

View detailed API documentation for wallet identity lookup
This endpoint uses the same wallet tagging system that powers Orb, our Solana block explorer. Our identity database tags 5100+ accounts and 1900+ programs and is continuously growing as our tagging coverage improves.

When to Use This

Use the Wallet Identity API when you need to:
  • Identify Exchange Wallets: Determine if a wallet belongs to Binance, Coinbase, Kraken, etc.
  • Track Protocol Activity: Identify DeFi protocol wallets and treasury addresses
  • Compliance & AML: Flag transactions involving known entities
  • Analytics: Categorize wallet types in your data pipeline
  • User Experience: Display “Sent to Binance 1” instead of a raw address
  • Batch Processing: Look up hundreds of addresses efficiently

Quickstart

Single Wallet Lookup

Look up identity information for a single wallet address:
const getWalletIdentity = async (address) => {
  const url = `https://api.helius.xyz/v1/wallet/${address}/identity?api-key=YOUR_API_KEY`;

  const response = await fetch(url);
  if (!response.ok) {
    if (response.status === 404) {
      console.log("No identity found for this address");
      return null;
    }
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  const identity = await response.json();
  console.log(`Found: ${identity.name} (${identity.category})`);
  return identity;
};

// Example: Binance wallet
getWalletIdentity("HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664");

Batch Lookup (Up to 100 Addresses)

Look up multiple addresses in a single request for better performance:
const batchIdentityLookup = async (addresses) => {
  const url = "https://api.helius.xyz/v1/wallet/batch-identity?api-key=YOUR_API_KEY";

  const response = await fetch(url, {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ addresses })
  });

  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  const identities = await response.json();
  return identities;
};

// Example: Look up multiple addresses
const addresses = [
  "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664", // Binance
  "2ojv9BAiHUrvsm9gxDe7fJSzbNZSJcxZvf8dqmWGHG8S"  // Binance
];

batchIdentityLookup(addresses).then(identities => {
  identities.forEach(identity => {
    console.log(`${identity.address}: ${identity.name}`);
  });
});

Response Format

Successful Response

{
  "address": "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664",
  "type": "exchange",
  "name": "Binance 1",
  "category": "Centralized Exchange",
  "tags": ["Centralized Exchange"]
}

404 Response (Unknown Wallet)

If a wallet is not in our database, the API returns a 404:
{
  "error": "No identity information available for this address",
  "code": 404
}

Identity Categories

Wallets can be classified into the following categories powered by the Orb identity database:

Account Tag Types

CategoryDescriptionExamples
Centralized ExchangeCEX wallets and hot walletsBinance 1, Coinbase 1, Kraken, OKX Exchange 1, Bybit Hot Wallet
Cross-chain BridgeBridge protocol addressesWormhole Bridge, AllBridge, Portal Bridge, deBridge
DeFiDeFi protocol addressesJupiter, Raydium, Orca, Marinade Finance, Kamino
Key Opinion LeaderNotable individuals and influencersAnatoly Yakovenko, Raj Gokal
Market MakerMarket making firmsJump Trading, Wintermute, GSR Markets
Trading FirmProprietary trading firmsAlameda Research, DRW Trading
ValidatorValidator and stake pool addressesCoinbase Validator, Jito Validator, Figment Validator
TreasuryProject and protocol treasuriesMarinade Treasury, Helium Treasury, Solana Foundation Treasury
DAODecentralized autonomous organizationsMango DAO, Grape DAO, MonkeDAO Treasury
NFTNFT marketplaces and projectsMagic Eden, Tensor, OpenSea Solana, DeGods Treasury
Stake PoolLiquid staking pool addressesMarinade Stake Pool, Jito Stake Pool, BlazeStake
MultisigMulti-signature walletsSquads Multisig, Solana Foundation Multisig
OraclePrice feed and oracle providersPyth Network, Switchboard Oracle, Chainlink Solana
GameGaming and GameFi projectsStar Atlas, Aurory, Genopets Treasury
PaymentsPayment processorsSolana Pay, Sphere, Helio Pay
ToolsDeveloper tools and utilitiesPhantom Wallet, Backpack, Solflare Wallet
AirdropAirdrop distribution addressesJupiter Airdrop, Pyth Airdrop Distributor
GovernanceGovernance program addressesRealms Governance, SPL Governance
AuthorityProgram authorities and adminsToken Program Authority, Metaplex Authority
JitoJito-specific addressesJito Tip 1, Jito Tip 2, Jito MEV Payment
MemecoinMemecoin projectsBonk Treasury, Dogwifhat, Book of Meme
Casino & GamblingGambling and casino dAppsStake.com Hot Wallet, Rollbit, DexSport
DePINDecentralized physical infrastructureHelium Network, Render Network, Hivemapper
Proprietary AMMCustom AMM implementationsPhoenix DEX, GooseFX
RestakingRestaking protocolsSolayer, Fragmetric
VaultVault and custody addressesSolend Vault, Tulip Vault, Francium Vault
FeesFee collection addressesJupiter Fee Collector, Raydium Fees
FundraiseFundraising and ICO addressesToken Sale Wallet, Fundraise Multisig
Genesis Block DistributionGenesis distribution addressesSolana Genesis Distribution
Non-Circulating SupplyNon-circulating token addressesTeam Vesting Wallet, Foundation Reserve
Transaction SendingTransaction sending servicesJito Tip 1, Jito Tip 2, Helius Sender Tip 1
SystemSolana system programsSystem Program, Config Program
X402X402 protocol addressesX402 Protocol
OtherUncategorized known addressesVarious known wallets

Malicious Categories

CategoryDescriptionExamples
Exploiter, Hackers & ScamsKnown exploit and hack addressesWormhole Exploiter Wallet, SagaDAO Hacker Wallet, Mango Exploiter
HackerConfirmed hacker addressesSolana Hack 2022, DeFi Protocol Hacker
RuggerRug pull perpetratorsSquid Game Token Rugger, Known Rug Pull Wallet
ScammerConfirmed scam addressesFake Airdrop Scammer, Phishing Scam Wallet
SpamSpam token creatorsSpam Token Creator, Airdrop Spammer

Program Categories

Programs (smart contracts) are classified separately:
CategoryDescriptionExamples
SwapToken swap protocolsJupiter, Raydium, Orca
DeFiGeneral DeFi protocolsDrift, Mango
Borrow LendLending protocolsSolend, MarginFi
NFTNFT marketplacesMagic Eden, Tensor
StakingStaking programsMarinade, Jito
BridgeCross-chain bridgesWormhole, AllBridge
AggregatorDEX aggregatorsJupiter Aggregator
PerpetualsPerpetual futuresDrift, Mango
OracleOracle providersPyth, Switchboard
LaunchpadToken launchpadsRaydium Launchpad
GovernanceGovernance programsSPL Governance
Game or CasinoGaming programsStar Atlas
Prediction MarketPrediction marketsDrift Predictions
PaymentsPayment protocolsSolana Pay
PrivacyPrivacy protocolsElusiv
CompressionState compressionBubblegum
InfrastructureCore infrastructureMetaplex
ToolsDeveloper toolsClockwork
RWAReal-world assetsOndo Finance
DePINDecentralized infrastructureHelium, Render
DeSciDecentralized scienceVitaDAO
AirdropAirdrop programsMerkle distributors
Web3Web3 applicationsVarious
NativeSolana native programsSystem Program
Proprietary AMMCustom AMM designsPhoenix
Trading SniperTrading botsMEV bots
Arbitrage or Sandwich BotMEV and arb botsJito bundles
SpamSpam programsSpam tokens
OtherUncategorized programsVarious

Use Cases

Flag Exchange Deposits

Identify when funds are sent to a centralized exchange:
const checkIfExchange = async (address) => {
  try {
    const identity = await getWalletIdentity(address);
    if (identity && identity.category === "Centralized Exchange") {
      console.log(`Funds sent to ${identity.name}`);
      return true;
    }
  } catch (error) {
    // Not a known exchange
  }
  return false;
};

Display Human-Readable Names

Show friendly names in your UI instead of addresses:
const getDisplayName = async (address) => {
  try {
    const identity = await getWalletIdentity(address);
    return identity ? identity.name : shortenAddress(address);
  } catch (error) {
    return shortenAddress(address);
  }
};

// Usage in UI
const displayName = await getDisplayName("HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664");
// Returns: "Binance 1" instead of "HXsKP...G664"

Batch Process Transaction Counterparties

Efficiently identify all counterparties in a list of transactions:
const identifyTransactionCounterparties = async (transactions) => {
  // Extract all unique addresses
  const addresses = [...new Set(
    transactions.map(tx => tx.counterparty)
  )];

  // Batch lookup (up to 100 at a time)
  const allIdentities = [];
  for (let i = 0; i < addresses.length; i += 100) {
    const chunk = addresses.slice(i, i + 100);
    const identities = await batchIdentityLookup(chunk);
    allIdentities.push(...identities);
  }

  // Create a map for quick lookup
  const identityMap = new Map(
    allIdentities.map(id => [id.address, id])
  );

  // Enrich transactions with identity info
  return transactions.map(tx => ({
    ...tx,
    counterpartyName: identityMap.get(tx.counterparty)?.name || "Unknown"
  }));
};

Best Practices

When looking up more than one address, always use the batch endpoint (POST /v1/wallet/batch-identity). It’s significantly faster and more efficient than making individual requests.
Not all wallets will have identity information. Design your application to handle 404 responses and fall back to displaying the raw address.
Identity data changes infrequently. Cache results locally to reduce API calls and improve performance.
The batch endpoint supports up to 100 addresses per request. For larger datasets, chunk your requests accordingly.

Common Errors

Error CodeDescriptionSolution
400Invalid wallet address formatVerify the address is a valid base58 Solana address
401Missing or invalid API keyCheck your API key is included in the request
404No identity foundThis wallet is not in our database of known entities
429Rate limit exceededReduce request frequency or upgrade your plan

Need Help?