> ## 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 Mendapatkan Token SPL Solana: Panduan API Lengkap

> Ambil dan kueri data token SPL Solana dengan Helius: saldo, akun token, pasokan, pemegang, dan ekstensi token yang dapat dipertukarkan, lengkap dengan contoh kode.

## Ringkasan

Panduan ini membahas cara membaca token yang dapat dipertukarkan di Solana: saldo akun, akun token berdasarkan pemilik atau mint, total pasokan, pemegang terbesar, dan ekstensi token yang dapat dipertukarkan DAS. Helius menyediakan metode token RPC Solana standar serta metode DAS yang menambahkan metadata dan harga dalam USD.

Untuk NFT, NFT terkompresi, edisi, dan bukti, lihat [panduan Mendapatkan Aset](/docs/id/das/get-nfts). Halaman ini berfokus pada token yang dapat dipertukarkan (SPL dan Token-2022).

## Kapan menggunakannya

Gunakan metode di halaman ini saat Anda ingin:

* Membaca saldo satu akun token
* Mencantumkan setiap akun token yang dimiliki dompet
* Menemukan semua akun yang menyimpan mint tertentu
* Memeriksa total pasokan token atau pemegang terbesarnya
* Mengambil metadata token dan harga dalam USD beserta saldo

## Saldo akun token

Dapatkan saldo akun token tertentu menggunakan RPC standar:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountBalance',
    params: [
      '3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/rpc/http/gettokenaccountbalance">
  getTokenAccountBalance
</Card>

## Akun token berdasarkan pemilik

Cantumkan semua akun token yang dimiliki oleh sebuah dompet:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountsByOwner',
    params: [
      '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
      {
        programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
      },
      {
        encoding: 'jsonParsed'
      }
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/rpc/http/gettokenaccountsbyowner">
  getTokenAccountsByOwner
</Card>

## Akun token berdasarkan mint

Cantumkan semua akun yang menyimpan token tertentu:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountsByOwner',
    params: [
      'CEXq1uy9y15PL2Wb4vDQwQfcJakBGjaAjeuR2nKLj8dk',
      {
        mint: "8wXtPeU6557ETkp9WHFY1n1EcU6NxDvbAggHGsMYiHsB"
      },
      {
        encoding: 'jsonParsed'
      }
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/rpc/http/gettokenaccountsbyowner">
  getTokenAccountsByOwner
</Card>

Untuk menemukan setiap akun yang menyimpan sebuah mint di seluruh pemilik (bukan hanya satu pemilik), gunakan metode DAS `getTokenAccounts` yang dijelaskan di bawah ini.

## Pasokan token

Periksa total pasokan sebuah token:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenSupply',
    params: [
      'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/rpc/http/gettokensupply">
  getTokenSupply
</Card>

## Pemegang token terbesar

Identifikasi akun terbesar yang menyimpan sebuah token:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenLargestAccounts',
    params: [
      'he1iusmfkpAdwvxLNGV8Y1iSbj4rUy6yMhEA3fotn9A'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/rpc/http/gettokenlargestaccounts">
  getTokenLargestAccounts
</Card>

Mengembalikan hingga 20 akun terbesar untuk mint tersebut:

```json theme={"system"}
{
  "context": { "slot": 0 },
  "value": [
    { "address": "...", "amount": "1000000000000", "decimals": 9, "uiAmount": 1000.0, "uiAmountString": "1000" }
  ]
}
```

## Akun token dengan DAS API

Metode DAS `getTokenAccounts` mengembalikan akun token berdasarkan mint atau pemilik, termasuk saldo, dalam satu panggilan dengan paginasi. Tidak seperti `getTokenAccountsByOwner`, Anda dapat melakukan kueri hanya berdasarkan `mint` untuk mencantumkan setiap akun yang menyimpan sebuah token di seluruh pemilik.

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

const getTokenAccounts = async (params) => {
  const response = await fetch(url, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: "my-request-id",
      method: "getTokenAccounts",
      params: params,
    }),
  });

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

// Example: Get all accounts holding a specific token
getTokenAccounts({
  mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
  page: 1,
  limit: 100
});
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/das/gettokenaccounts">
  getTokenAccounts
</Card>

Menggunakan paginasi; setiap entri mencakup akun, mint, pemilik, dan saldo:

```json theme={"system"}
{
  "total": 100,
  "limit": 100,
  "page": 1,
  "token_accounts": [
    { "address": "...", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "owner": "...", "amount": 12345678 }
  ]
}
```

## Metadata dan harga token dengan DAS API

Untuk mendapatkan metadata token dan harga dalam USD, panggil metode DAS `getAsset` dengan mengaktifkan `showFungible`. Harga untuk token terverifikasi dikembalikan dalam `token_info.price_info`.

<Note>
  Data harga dari `getAsset` disimpan dalam cache hingga 600 detik, sehingga data tersebut mungkin sudah berusia hingga 10 menit.
</Note>

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getAsset',
    params: {
      id: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263', // Bonk
      options: {
        showFungible: true
      }
    }
  })
});
const { result } = await response.json();
console.log(result.token_info.price_info);
```

<Card title="API Reference" horizontal icon="code" href="/docs/id/api-reference/das/getasset">
  getAsset
</Card>

Respons mengembalikan pasokan, jumlah desimal, dan harga dalam `token_info`:

```json theme={"system"}
{
  "token_info": {
    "symbol": "Bonk",
    "supply": 8881594973561640000,
    "decimals": 5,
    "token_program": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    "price_info": {
      "price_per_token": 0.0000192271,
      "currency": "USDC"
    }
  }
}
```

### Menghitung kapitalisasi pasar

Kalikan harga dengan pasokan yang telah disesuaikan berdasarkan desimal:

```typescript theme={"system"}
const { price_per_token } = result.token_info.price_info;
const { supply, decimals } = result.token_info;
const marketCap = (supply / Math.pow(10, decimals)) * price_per_token;
```

Untuk mencantumkan setiap token yang dapat dipertukarkan dalam dompet (beserta saldo dan harga) dalam satu panggilan, gunakan `getAssetsByOwner` atau `searchAssets` dengan `tokenType: "fungible"`. Lihat [ekstensi token yang dapat dipertukarkan](/docs/id/das/fungible-token-extension) untuk memahami bagaimana `tokenType`, saldo, ekstensi Token-2022, dan data harga muncul dalam respons.

## Praktik terbaik

* Gunakan paginasi untuk metode yang mengembalikan kumpulan hasil berukuran besar. Lihat [panduan Paginasi](/docs/id/das/pagination).
* Utamakan metode DAS (`getAsset`, `getAssetsByOwner`, `getTokenAccounts`) saat Anda memerlukan metadata atau harga dalam USD; gunakan metode RPC standar untuk saldo dan pasokan mentah di blockchain.
* Tangani kesalahan dengan baik menggunakan blok try/catch dan percobaan ulang.
* Simpan respons dalam cache jika sesuai untuk mengurangi panggilan API.

## Langkah selanjutnya

<CardGroup cols={3}>
  <Card title="Fungible Token Extension" icon="coins" href="/docs/id/das/fungible-token-extension">
    Cara DAS mengembalikan token yang dapat dipertukarkan, ekstensi Token-2022, dan harga.
  </Card>

  <Card title="Get Assets (NFTs)" icon="image" href="/docs/id/das/get-nfts">
    Ambil NFT, NFT terkompresi, edisi, dan bukti.
  </Card>

  <Card title="DAS API reference" icon="code" href="/docs/id/api-reference/das">
    Skema lengkap untuk setiap metode DAS.
  </Card>
</CardGroup>
