> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Cara Mencari Identitas Dompet Solana

> Identifikasi dompet Solana yang dikenal berdasarkan alamat atau domain SNS/ANS. Cari satu entri atau proses secara batch hingga 100 alamat dan domain sekaligus.

<Note>
  Wallet API masih dalam versi Beta. Endpoint dan format respons dapat berubah.
</Note>

## Ikhtisar

Endpoint Wallet Identity mengidentifikasi alamat dompet yang dikenal di Solana, termasuk bursa terpusat, protokol DeFi, institusi, dan entitas lain yang dikenali. Gunakan endpoint ini untuk kepatuhan, analitik, dan menampilkan nama yang mudah dibaca untuk alamat yang dikenal.

Endpoint tunggal (`GET /v1/wallet/{wallet}/identity`) dan batch (`POST /v1/wallet/batch-identity`, hingga 100 entri) menerima **domain SNS `.sol`** dan **TLD khusus ANS** (misalnya `.bonk`, `.poor`, `.abc`), selain alamat mentah Solana. Resolusi domain hanya tersedia di mainnet.

Endpoint ini menggunakan sistem identitas yang sama dengan yang mendukung [Orb](https://orbmarkets.io/), penjelajah blok Solana dari Helius. Basis data ini mencakup lebih dari 32.500 label (nama utama yang mudah dibaca, termasuk lebih dari 3.000 program) dan lebih dari 21,5 juta tag (properti kategoris seperti "alamat deposit Binance" atau "Seeker Phone"), serta terus berkembang.

Endpoint tunggal (`GET /v1/wallet/{wallet}/identity`) dan batch (`POST /v1/wallet/batch-identity`) memerlukan paket berbayar. Permintaan yang dibuat dengan kunci API paket Gratis akan menghasilkan `403 Forbidden`. Lihat [Persyaratan paket](/docs/id/wallet-api/overview#persyaratan-paket) untuk tabel cakupan lengkap.

## Kapan menggunakannya

Gunakan Wallet Identity API saat Anda perlu:

* **Mengidentifikasi dompet bursa**: menentukan apakah suatu dompet milik Binance, Coinbase, Kraken, dan lainnya.
* **Melacak aktivitas protokol**: mengidentifikasi dompet protokol DeFi dan alamat perbendaharaan.
* **Kepatuhan dan AML**: menandai transaksi yang melibatkan entitas yang dikenal.
* **Analitik**: mengategorikan jenis dompet dalam pipeline data Anda.
* **Pengalaman pengguna**: menampilkan "Dikirim ke Binance 1" alih-alih alamat mentah.
* **Pemrosesan batch**: mencari ratusan alamat secara efisien.

## Mulai cepat

### Pencarian satu dompet

Cari informasi identitas untuk satu alamat dompet:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={"system"}
    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");
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={"system"}
    import requests

    def get_wallet_identity(address: str):
        url = f"https://api.helius.xyz/v1/wallet/{address}/identity"
        headers = {"X-Api-Key": "YOUR_API_KEY"}

        response = requests.get(url, headers=headers)

        if response.status_code == 404:
            print("No identity found for this address")
            return None

        response.raise_for_status()
        identity = response.json()
        print(f"Found: {identity['name']} ({identity['category']})")
        return identity

    # Example: Binance wallet
    get_wallet_identity("HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664")
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={"system"}
    curl "https://api.helius.xyz/v1/wallet/HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664/identity?api-key=YOUR_API_KEY"
    ```
  </Tab>
</Tabs>

#### Mencari berdasarkan nama domain

Anda juga dapat meneruskan domain SNS `.sol` atau TLD khusus ANS secara langsung — endpoint akan me-resolve domain dan mengembalikan identitas alamat pemiliknya:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={"system"}
    // Works identically — the endpoint resolves the domain first.
    const identity = await getWalletIdentity("toly.sol");

    // ANS custom TLD
    await getWalletIdentity("miester.bonk");
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={"system"}
    # Works identically — the endpoint resolves the domain first.
    identity = get_wallet_identity("toly.sol")

    # ANS custom TLD
    get_wallet_identity("miester.bonk")
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={"system"}
    # SNS (.sol) domain
    curl "https://api.helius.xyz/v1/wallet/toly.sol/identity?api-key=YOUR_API_KEY"

    # ANS custom TLD
    curl "https://api.helius.xyz/v1/wallet/miester.bonk/identity?api-key=YOUR_API_KEY"
    ```
  </Tab>
</Tabs>

Respons endpoint tunggal adalah objek identitas standar untuk alamat yang telah **di-resolve** — tidak ada penanda `inputDomain`. Jika Anda perlu menghubungkan input dengan output (misalnya, saat mencari banyak domain sekaligus), gunakan endpoint batch.

<Note>
  Resolusi domain hanya tersedia di mainnet. Di devnet/testnet, input domain ke endpoint ini menghasilkan `400`. Hasil resolusi positif disimpan dalam cache hingga 2 jam, sehingga domain yang baru saja ditransfer mungkin untuk sementara masih di-resolve ke identitas pemilik sebelumnya.
</Note>

### Pencarian batch (hingga 100 entri)

Cari beberapa entri dalam satu permintaan untuk kinerja yang lebih baik. Setiap entri dapat berupa alamat atau nama domain:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={"system"}
    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: Mix addresses and domains in a single request
    const addresses = [
      "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664", // Binance (address)
      "toly.sol",                                      // SNS domain
      "miester.bonk"                                   // ANS custom TLD
    ];

    batchIdentityLookup(addresses).then(identities => {
      identities.forEach(identity => {
        if (identity.unresolved) {
          console.log(`${identity.inputDomain}: could not be resolved`);
          return;
        }
        const label = identity.inputDomain
          ? `${identity.inputDomain} → ${identity.address}`
          : identity.address;
        console.log(`${label}: ${identity.name}`);
      });
    });
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={"system"}
    import requests

    def batch_identity_lookup(addresses: list[str]):
        url = "https://api.helius.xyz/v1/wallet/batch-identity"
        headers = {
            "X-Api-Key": "YOUR_API_KEY",
            "Content-Type": "application/json"
        }

        response = requests.post(
            url,
            headers=headers,
            json={"addresses": addresses}
        )

        response.raise_for_status()
        return response.json()

    # Example: Mix addresses and domains in a single request
    addresses = [
        "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664",  # Binance (address)
        "toly.sol",                                       # SNS domain
        "miester.bonk"                                    # ANS custom TLD
    ]

    identities = batch_identity_lookup(addresses)
    for identity in identities:
        if identity.get("unresolved"):
            print(f"{identity['inputDomain']}: could not be resolved")
            continue
        label = f"{identity['inputDomain']} -> {identity['address']}" if identity.get("inputDomain") else identity["address"]
        print(f"{label}: {identity['name']}")
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={"system"}
    curl -X POST "https://api.helius.xyz/v1/wallet/batch-identity?api-key=YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "addresses": [
          "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664",
          "toly.sol",
          "miester.bonk"
        ]
      }'
    ```
  </Tab>
</Tabs>

## Format respons

Pencarian tunggal yang berhasil mengembalikan objek identitas untuk alamat yang telah di-resolve:

```json theme={"system"}
{
  "address": "HXsKP7wrBWaQ8T2Vtjry3Nj3oUgwYcqq9vrHDM12G664",
  "type": "exchange",
  "name": "Binance 1",
  "category": "Centralized Exchange",
  "tags": ["Centralized Exchange"]
}
```

Dalam respons **batch**, setiap entri yang inputnya berupa nama domain memiliki kolom `inputDomain` tambahan agar Anda dapat menghubungkan respons dengan permintaan aslinya:

```json theme={"system"}
{
  "address": "7v91N7iZ9mNicL8WfG6cgSCKyRXydQjLh6UYBWwm6y1Q",
  "type": "wallet",
  "name": "toly",
  "category": "Key Opinion Leader",
  "tags": ["Key Opinion Leader"],
  "inputDomain": "toly.sol"
}
```

Jika domain dalam permintaan batch tidak dapat di-resolve, batch tersebut tidak akan gagal — entri dikembalikan pada posisinya dengan `address: null`, `type: "unknown"`, dan `unresolved: true`. Urutan permintaan dipertahankan:

```json theme={"system"}
{
  "address": null,
  "type": "unknown",
  "inputDomain": "nonexistent-xyz.sol",
  "unresolved": true
}
```

Pada endpoint **tunggal**, 404 dikembalikan jika dompet tidak memiliki entri identitas **atau** jika input domain tidak dapat di-resolve:

```json theme={"system"}
{
  "error": "No identity information available for this address",
  "code": 404
}
```

```json theme={"system"}
{
  "error": "Domain 'nonexistent-xyz.sol' could not be resolved",
  "code": 404
}
```

### Kategori identitas

Dompet dan program diklasifikasikan ke dalam kategori yang didukung oleh basis data identitas Orb. Akun dan program menggunakan kumpulan kategori yang terpisah. Tabel di bawah mencantumkan semua kategori yang didukung.

<AccordionGroup>
  <Accordion title="Account tag types">
    | Kategori                | Deskripsi                               | Contoh                                                          |
    | ----------------------- | --------------------------------------- | --------------------------------------------------------------- |
    | Bursa Terpusat          | Dompet CEX dan hot wallet               | Binance 1, Coinbase 1, Kraken, OKX Exchange 1, Bybit Hot Wallet |
    | Jembatan Lintas Rantai  | Alamat protokol jembatan                | Wormhole Bridge, AllBridge, Portal Bridge, deBridge             |
    | DeFi                    | Alamat protokol DeFi                    | Jupiter, Raydium, Orca, Marinade Finance, Kamino                |
    | Pemimpin Opini Utama    | Individu dan pemengaruh terkemuka       | Anatoly Yakovenko, Raj Gokal                                    |
    | Pembentuk Pasar         | Perusahaan pembentuk pasar              | Jump Trading, Wintermute, GSR Markets                           |
    | Perusahaan Perdagangan  | Perusahaan perdagangan proprietary      | Alameda Research, DRW Trading                                   |
    | Validator               | Alamat validator dan stake pool         | Coinbase Validator, Jito Validator, Figment Validator           |
    | Perbendaharaan          | Perbendaharaan proyek dan protokol      | Marinade Treasury, Helium Treasury, Solana Foundation Treasury  |
    | DAO                     | Organisasi otonom terdesentralisasi     | Mango DAO, Grape DAO, MonkeDAO Treasury                         |
    | NFT                     | Marketplace dan proyek NFT              | Magic Eden, Tensor, OpenSea Solana, DeGods Treasury             |
    | Stake Pool              | Alamat pool staking likuid              | Marinade Stake Pool, Jito Stake Pool, BlazeStake                |
    | Multisig                | Dompet multi-tanda tangan               | Squads Multisig, Solana Foundation Multisig                     |
    | Oracle                  | Penyedia feed harga dan oracle          | Pyth Network, Switchboard Oracle, Chainlink Solana              |
    | Game                    | Proyek game dan GameFi                  | Star Atlas, Aurory, Genopets Treasury                           |
    | Pembayaran              | Pemroses pembayaran                     | Solana Pay, Sphere, Helio Pay                                   |
    | Alat                    | Alat dan utilitas pengembang            | Phantom Wallet, Backpack, Solflare Wallet                       |
    | Airdrop                 | Alamat distribusi airdrop               | Jupiter Airdrop, Pyth Airdrop Distributor                       |
    | Tata Kelola             | Alamat program tata kelola              | Realms Governance, SPL Governance                               |
    | Otoritas                | Otoritas dan admin program              | Token Program Authority, Metaplex Authority                     |
    | Jito                    | Alamat khusus Jito                      | Jito Tip 1, Jito Tip 2, Jito MEV Payment                        |
    | Memecoin                | Proyek memecoin                         | Bonk Treasury, Dogwifhat, Book of Meme                          |
    | Kasino & Perjudian      | dApp perjudian dan kasino               | Stake.com Hot Wallet, Rollbit, DexSport                         |
    | DePIN                   | Infrastruktur fisik terdesentralisasi   | Helium Network, Render Network, Hivemapper                      |
    | AMM Proprietary         | Implementasi AMM khusus                 | Phoenix DEX, GooseFX                                            |
    | Restaking               | Protokol restaking                      | Solayer, Fragmetric                                             |
    | Vault                   | Alamat vault dan kustodian              | Solend Vault, Tulip Vault, Francium Vault                       |
    | Biaya                   | Alamat pengumpulan biaya                | Jupiter Fee Collector, Raydium Fees                             |
    | Penggalangan Dana       | Alamat penggalangan dana dan ICO        | Token Sale Wallet, Fundraise Multisig                           |
    | Distribusi Blok Genesis | Alamat distribusi genesis               | Solana Genesis Distribution                                     |
    | Suplai Non-Sirkulasi    | Alamat token yang tidak beredar         | Team Vesting Wallet, Foundation Reserve                         |
    | Pengiriman Transaksi    | Layanan pengiriman transaksi            | Jito Tip 1, Jito Tip 2, Helius Sender Tip 1                     |
    | Sistem                  | Program sistem Solana                   | System Program, Config Program                                  |
    | X402                    | Alamat protokol X402                    | X402 Protocol                                                   |
    | Lainnya                 | Alamat dikenal yang belum dikategorikan | Berbagai dompet yang dikenal                                    |
  </Accordion>

  <Accordion title="Malicious categories">
    | Kategori                               | Deskripsi                                     | Contoh                                                            |
    | -------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------- |
    | Pelaku Eksploitasi, Peretas & Penipuan | Alamat eksploitasi dan peretasan yang dikenal | Wormhole Exploiter Wallet, SagaDAO Hacker Wallet, Mango Exploiter |
    | Peretas                                | Alamat peretas yang telah dikonfirmasi        | Solana Hack 2022, DeFi Protocol Hacker                            |
    | Pelaku Rug Pull                        | Pelaku rug pull                               | Squid Game Token Rugger, Known Rug Pull Wallet                    |
    | Penipu                                 | Alamat penipuan yang telah dikonfirmasi       | Fake Airdrop Scammer, Phishing Scam Wallet                        |
    | Spam                                   | Pembuat token spam                            | Spam Token Creator, Airdrop Spammer                               |
  </Accordion>

  <Accordion title="Program categories">
    Program (smart contract) diklasifikasikan secara terpisah:

    | Kategori                    | Deskripsi                        | Contoh                 |
    | --------------------------- | -------------------------------- | ---------------------- |
    | Swap                        | Protokol pertukaran token        | Jupiter, Raydium, Orca |
    | DeFi                        | Protokol DeFi umum               | Drift, Mango           |
    | Pinjam Meminjam             | Protokol peminjaman              | Solend, MarginFi       |
    | NFT                         | Marketplace NFT                  | Magic Eden, Tensor     |
    | Staking                     | Program staking                  | Marinade, Jito         |
    | Jembatan                    | Jembatan lintas rantai           | Wormhole, AllBridge    |
    | Agregator                   | Agregator DEX                    | Jupiter Aggregator     |
    | Perpetual                   | Kontrak berjangka perpetual      | Drift, Mango           |
    | Oracle                      | Penyedia oracle                  | Pyth, Switchboard      |
    | Launchpad                   | Launchpad token                  | Raydium Launchpad      |
    | Tata Kelola                 | Program tata kelola              | SPL Governance         |
    | Game atau Kasino            | Program game                     | Star Atlas             |
    | Pasar Prediksi              | Pasar prediksi                   | Drift Predictions      |
    | Pembayaran                  | Protokol pembayaran              | Solana Pay             |
    | Privasi                     | Protokol privasi                 | Elusiv                 |
    | Kompresi                    | Kompresi state                   | Bubblegum              |
    | Infrastruktur               | Infrastruktur inti               | Metaplex               |
    | Alat                        | Alat pengembang                  | Clockwork              |
    | RWA                         | Aset dunia nyata                 | Ondo Finance           |
    | DePIN                       | Infrastruktur terdesentralisasi  | Helium, Render         |
    | DeSci                       | Sains terdesentralisasi          | VitaDAO                |
    | Airdrop                     | Program airdrop                  | Distributor Merkle     |
    | Web3                        | Aplikasi Web3                    | Beragam                |
    | Native                      | Program native Solana            | System Program         |
    | AMM Proprietary             | Desain AMM khusus                | Phoenix                |
    | Sniper Perdagangan          | Bot perdagangan                  | Bot MEV                |
    | Bot Arbitrase atau Sandwich | Bot MEV dan arbitrase            | Bundel Jito            |
    | Spam                        | Program spam                     | Token spam             |
    | Lainnya                     | Program yang belum dikategorikan | Beragam                |
  </Accordion>
</AccordionGroup>

## Kasus penggunaan

### Menandai deposit ke bursa

Identifikasi saat dana dikirim ke bursa terpusat:

```javascript theme={"system"}
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;
};
```

### Menampilkan nama yang mudah dibaca

Tampilkan nama yang mudah dikenali di UI Anda, bukan alamat:

```javascript theme={"system"}
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"
```

### Memproses pihak lawan transaksi secara batch

Identifikasi semua pihak lawan dalam daftar transaksi secara efisien:

```javascript theme={"system"}
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"
  }));
};
```

## Praktik terbaik

* **Gunakan endpoint batch untuk beberapa pencarian.** Saat mencari lebih dari satu alamat, `POST /v1/wallet/batch-identity` jauh lebih cepat daripada membuat permintaan terpisah.
* **Tangani respons 404 dengan baik.** Tidak semua dompet memiliki informasi identitas. Jika tidak tersedia, tampilkan alamat mentah.
* **Simpan hasil dalam cache.** Data identitas jarang berubah. Simpan dalam cache lokal untuk mengurangi panggilan API.
* **Patuhi batas ukuran batch.** Endpoint batch mendukung hingga 100 entri per permintaan. Bagi kumpulan data yang lebih besar menjadi beberapa bagian.

## Kesalahan umum

| Kode Kesalahan | Deskripsi                                                                                 | Solusi                                                                                                                                                                                                          |
| -------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400            | Alamat dompet atau format domain tidak valid, atau input domain digunakan di luar mainnet | Pastikan input berupa alamat Solana base58 yang valid atau domain dengan format yang benar (misalnya `toly.sol`), dan pastikan Anda menargetkan mainnet                                                         |
| 401            | Kunci API tidak ada atau tidak valid                                                      | Pastikan kunci API Anda disertakan dalam permintaan                                                                                                                                                             |
| 403            | Endpoint memerlukan paket berbayar                                                        | Pencarian identitas tidak tersedia pada paket Gratis. [Tingkatkan paket Anda](https://dashboard.helius.dev) ke tingkat berbayar                                                                                 |
| 404            | Identitas tidak ditemukan atau domain tidak dapat di-resolve                              | Hanya untuk endpoint tunggal — dompet tidak memiliki entri identitas atau domain tidak ada. Dalam permintaan batch, domain yang tidak dapat di-resolve dikembalikan sebagai entri `unresolved: true`, bukan 404 |
| 429            | Batas laju terlampaui                                                                     | Kurangi frekuensi permintaan atau tingkatkan paket Anda                                                                                                                                                         |

## Langkah berikutnya

<CardGroup cols={3}>
  <Card title="Funding Source" icon="money-bill-transfer" href="/docs/id/wallet-api/funded-by">
    Lacak pihak yang awalnya mendanai dompet — jenis pemberi dana menggunakan kembali kategori identitas ini.
  </Card>

  <Card title="Wallet API Overview" icon="wallet" href="/docs/id/wallet-api/overview">
    Semua endpoint Wallet API dan konvensi bersama.
  </Card>

  <Card title="API Reference" icon="code" href="/docs/id/api-reference/wallet-api/identity">
    Skema permintaan dan respons untuk pencarian identitas.
  </Card>
</CardGroup>
