> ## 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.

# Pencarian Aset Solana: Temukan NFT, Token, & Aset Terkompresi

> Gunakan endpoint searchAssets untuk menemukan NFT, aset terkompresi, dan token fungibel di Solana, dengan pemfilteran, pengurutan, dan paginasi tingkat lanjut.

## Ringkasan

`searchAssets` adalah metode baca paling fleksibel dalam API DAS. Metode ini mengembalikan aset yang cocok dengan kombinasi filter — pemilik, pengelompokan koleksi, jenis token, dan atribut — dalam satu panggilan dengan paginasi. Gunakan metode ini saat Anda membutuhkan lebih dari satu aset atau lebih dari sekadar daftar berdasarkan pemilik.

`tokenType` bersifat opsional. Jika dihilangkan, `searchAssets` hanya mengembalikan NFT reguler dan terkompresi — tanpa token fungibel. Untuk menyertakan token fungibel, tetapkan `tokenType` (misalnya, `"fungible"` atau `"all"`). Nilai yang diterima adalah `fungible`, `nonFungible`, `regularNft`, `compressedNft`, dan `all`.

## Kapan menggunakannya

Gunakan `searchAssets` saat Anda ingin:

* Memfilter aset dompet agar hanya menampilkan token fungibel atau hanya NFT
* Mencantumkan aset yang dimiliki dompet dalam koleksi tertentu
* Menemukan NFT terkompresi secara massal
* Membuat gulir tanpa batas untuk kumpulan hasil besar dengan paginasi kursor
* Memfilter aset MPL Core berdasarkan status agen atau penanda tangan

Untuk satu aset, gunakan [`getAsset`](/docs/id/api-reference/das/getasset); untuk daftar dompet sederhana, gunakan [`getAssetsByOwner`](/docs/id/api-reference/das/getassetsbyowner).

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/das/searchassets">
  Lihat dokumentasi terperinci untuk searchAssets
</Card>

## Mulai cepat

```typescript theme={"system"}
// Replace YOUR_API_KEY with your Helius API key
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`;

async function searchAssets(params) {
  const body = {
    jsonrpc: "2.0",
    id: "search-assets-example",
    method: "searchAssets",
    params,
  };
  const res = await fetch(url, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });
  if (!res.ok) {
    throw new Error(`${res.status} ${res.statusText}`);
  }
  const { result } = await res.json();
  return result;
}

// Example: fetch first 50 compressed NFTs in a wallet
searchAssets({
  ownerAddress: "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
  tokenType: "compressedNft",
  limit: 50,
}).then(console.log);
```

## Memilih tokenType

`tokenType` bersifat opsional dan menentukan **jenis aset apa** yang muncul dalam respons. Jika dihilangkan, `searchAssets` hanya mengembalikan NFT reguler dan terkompresi — tetapkan `tokenType` untuk menyertakan token fungibel.

<ParamField body="tokenType" type="string">
  Nilai yang diterima: `fungible`, `nonFungible`, `regularNft`, `compressedNft`, `all`. Jika dihilangkan, nilai bawaannya adalah NFT reguler dan terkompresi.
</ParamField>

| tokenType       | Hasil yang Anda dapatkan              | Kasus penggunaan umum                         |
| --------------- | ------------------------------------- | --------------------------------------------- |
| `fungible`      | Hanya token SPL dan Token-2022        | Saldo dompet, pembatasan akses berbasis token |
| `nonFungible`   | Semua NFT (terkompresi dan reguler)   | Ringkasan portofolio                          |
| `regularNft`    | NFT lama dan pNFT (tidak terkompresi) | Daftar marketplace                            |
| `compressedNft` | Hanya cNFT                            | Pencetakan massal berbiaya sangat rendah      |
| `all`           | Semuanya (token dan NFT)              | Penemuan menyeluruh                           |

## Paginasi dan pengurutan

Dompet Solana dapat memiliki ribuan aset, sehingga pemuatan halaman yang efisien sangat penting:

* **Halaman / batas** — paginasi klasik (`page` dimulai dari **1**). Cocok untuk tampilan statis.
* **Kursor** — teruskan nilai `before` atau `after` dari respons sebelumnya untuk pengguliran tanpa batas yang cepat.

```json5 sortBy theme={"system"}
"sortBy": {
  "sortBy": "created",      // created | recent_action | updated | none
  "sortDirection": "desc"   // asc | desc
}
```

Untuk strategi halaman/batas dan kursor secara lengkap, termasuk kueri keyset paralel, lihat [panduan Paginasi](/docs/id/das/pagination).

## Opsi tampilan

Flag ini **menambahkan metadata**; flag tersebut tidak pernah mengubah aset yang dikembalikan.

| Flag                     | Efek                                                       |
| ------------------------ | ---------------------------------------------------------- |
| `showNativeBalance`      | Menyertakan saldo SOL dompet                               |
| `showCollectionMetadata` | Menambahkan data JSON tingkat koleksi                      |
| `showGrandTotal`         | Mengembalikan jumlah total hasil yang cocok (lebih lambat) |

```json5 options theme={"system"}
"options": {
  "showNativeBalance": true,
  "showCollectionMetadata": true,
  "showGrandTotal": true
}
```

## Agen MPL Core, penanda tangan aset, dan grup MIP-11

Aset MPL Core dapat menampilkan metadata **identitas agen** dan **penanda tangan aset**, sedangkan aset atau koleksi dapat menyertakan **plugin `groups`** (MIP-11) yang menjelaskan keanggotaan grup. Kolom opsional yang sama muncul di setiap metode DAS yang mengembalikan aset (`getAsset`, `getAssetBatch`, `getAssetsByOwner`, `getAssetsByGroup`, `getAssetsByCreator`, `getAssetsByAuthority`, dan setiap item dalam `searchAssets`).

Gunakan `searchAssets` untuk memfilter berdasarkan status atau alamat agen:

| Parameter     | Jenis   | Tujuan                                       |
| ------------- | ------- | -------------------------------------------- |
| `isAgent`     | boolean | Hanya aset dengan Identitas Agen             |
| `agentToken`  | string  | Mencocokkan mint token agen (base58)         |
| `assetSigner` | string  | Mencocokkan PDA penanda tangan aset (base58) |

Anda juga dapat menetapkan `interface` ke `MplCoreAsset`, `MplCoreCollection`, atau `MplCoreGroup` untuk penemuan khusus MPL Core.

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "searchAssets",
  "params": {
    "ownerAddress": "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
    "tokenType": "all",
    "isAgent": true,
    "page": 1,
    "limit": 10
  }
}
```

Kolom respons `is_agent`, `agent_token`, dan `asset_signer` **dihilangkan jika tidak berlaku** (misalnya, `is_agent` dihilangkan jika bernilai false). Lihat [referensi API searchAssets](/docs/id/api-reference/das/searchassets) untuk skema lengkap.

## Contoh

Contoh pertama menunjukkan pembungkus `fetch` secara lengkap. Contoh lainnya mengikuti pola yang sama dan diciutkan — perluas untuk melihat isi permintaan.

### Mencari semua token fungibel dalam dompet

```typescript theme={"system"}
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

const searchAssets = async () => {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'my-id',
      method: 'searchAssets',
      params: {
        ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
        tokenType: 'fungible',
      },
    }),
  });
  const { result } = await response.json();
  console.log("Search Assets: ", result);
};
searchAssets();
```

<Accordion title="Search for fungible tokens with native balance and token info">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsTokenInfo = async () => {
      const response = await fetch(url, {
          method: 'POST',
          headers: {
              'Content-Type': 'application/json',
          },
          body: JSON.stringify({
              jsonrpc: '2.0',
              id: 'my-id',
              method: 'searchAssets',
              params: {
                  ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
                  tokenType: 'fungible',
                  options: {
                      showNativeBalance: true,
                  },
              },
          }),
      });

      const { result } = await response.json();

      result.items.forEach(item => {
        console.log(item.token_info);
      });

      console.log("Native Balance: ", result.nativeBalance);
  };

  searchAssetsTokenInfo();
  ```
</Accordion>

<Accordion title="Search for Drip NFTs owned by vibhu.sol">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsDrip = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: 'BAVjpySHMMGDpq3whU7qaqCCRE8ksCeGwxa53Qv2i8jS',
          grouping: ["collection", "DRiP2Pn2K6fuMLKQmt5rZWyHiUZ6WK3GChEySUpHSS4x"],
          page: 1,
          limit: 1000
        },
      }),
    });
    const { result } = await response.json();
    console.log("Drip Haus Assets: ", result);
  };
  searchAssetsDrip();
  ```
</Accordion>

<Accordion title="Search for compressed assets in a wallet">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsCompressed = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: '2k5AXX4guW9XwRQ1AKCpAuUqgWDpQpwFfpVFh3hnm2Ha',
          compressed: true,
        },
      }),
    });
    const { result } = await response.json();
    console.log("Search Assets: ", result);
  };
  searchAssetsCompressed();
  ```
</Accordion>

## Langkah berikutnya

<CardGroup cols={3}>
  <Card title="Pagination" icon="list" href="/docs/id/das/pagination">
    Paginasi berbasis halaman dan keyset untuk kumpulan hasil besar.
  </Card>

  <Card title="Fungible Token Extension" icon="coins" href="/docs/id/das/fungible-token-extension">
    Cara tokenType, saldo, dan harga muncul dalam hasil.
  </Card>

  <Card title="searchAssets reference" icon="code" href="/docs/id/api-reference/das/searchassets">
    Skema permintaan dan respons lengkap.
  </Card>
</CardGroup>
