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

# getTokenAccounts

> Список аккаунтов SPL Token и Token-2022 по владельцу или по минту с пагинацией с помощью DAS getTokenAccounts в OrbitFlare.

## Обзор

`getTokenAccounts` возвращает список токен-аккаунтов, отфильтрованных по владельцу, по минту или по обоим параметрам. Фильтруйте по минту, чтобы постранично перебрать всех держателей токена; фильтруйте по владельцу, чтобы получить список токен-аккаунтов кошелька. В отличие от [getProgramAccounts](/ru/rpc/methods/getProgramAccounts), этот метод поддерживает пагинацию, поэтому подходит для минтов с миллионами держателей.

Аккаунты с нулевым балансом не включаются, если не задан `showZeroBalance`.

## Параметры

Передайте хотя бы один из параметров `owner` и `mint`.

<ResponseField name="owner" type="string">
  Кошелёк владельца (base-58). Также принимается как `ownerAddress`.
</ResponseField>

<ResponseField name="mint" type="string">
  Минт токена (base-58). Также принимается как `mintAddress`.
</ResponseField>

<ResponseField name="page" type="number">
  Номер страницы, начиная с 1. См. [Пагинация](/ru/das-api/pagination).
</ResponseField>

<ResponseField name="limit" type="number">
  Количество результатов на странице. Максимум и значение по умолчанию: 1 000.
</ResponseField>

<ResponseField name="cursor" type="string">
  Курсор из предыдущего ответа.
</ResponseField>

<ResponseField name="before" type="string">
  Вернуть аккаунты до указанного.
</ResponseField>

<ResponseField name="after" type="string">
  Вернуть аккаунты после указанного.
</ResponseField>

<ResponseField name="options" type="object">
  [Параметры отображения](/ru/das-api/display-options): `showZeroBalance`. Также принимается как `displayOptions`.
</ResponseField>

## Ответ

<ResponseField name="result" type="object">
  <Expandable title="поля result">
    <ResponseField name="total" type="number">
      Количество аккаунтов на этой странице.
    </ResponseField>

    <ResponseField name="limit" type="number">
      Использованный размер страницы.
    </ResponseField>

    <ResponseField name="page" type="number">
      Номер страницы при пагинации по страницам.
    </ResponseField>

    <ResponseField name="cursor" type="string">
      Курсор для следующей страницы при пагинации по курсору.
    </ResponseField>

    <ResponseField name="token_accounts" type="array">
      <Expandable title="поля токен-аккаунта">
        <ResponseField name="address" type="string">
          Адрес токен-аккаунта.
        </ResponseField>

        <ResponseField name="mint" type="string">
          Адрес минта.
        </ResponseField>

        <ResponseField name="owner" type="string">
          Кошелёк владельца.
        </ResponseField>

        <ResponseField name="amount" type="number">
          Баланс в базовых единицах.
        </ResponseField>

        <ResponseField name="delegate" type="string | null">
          Делегат, если задан.
        </ResponseField>

        <ResponseField name="delegated_amount" type="number">
          Сумма, которую может передать делегат.
        </ResponseField>

        <ResponseField name="close_authority" type="string | null">
          Полномочие на закрытие (close authority), если задано.
        </ResponseField>

        <ResponseField name="frozen" type="boolean">
          Заморожен ли аккаунт.
        </ResponseField>

        <ResponseField name="token_extensions" type="object">
          Расширения аккаунта Token-2022, если они есть.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

## Примеры кода

### Держатели минта

```bash theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getTokenAccounts",
  "params": {
    "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "page": 1,
    "limit": 2
  }
}'
```

```json theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
{
  "jsonrpc": "2.0",
  "result": {
    "total": 2,
    "limit": 2,
    "page": 1,
    "token_accounts": [
      {
        "address": "1113odRAP5wXa8n7NFVBG53XrqWeDrViZu5rSiSsVA3",
        "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "owner": "HJNr4feTNiDn59RCL1pYoARXMFoBEQSmAY7R7Cm21z9T",
        "amount": 170812,
        "delegate": null,
        "delegated_amount": 0,
        "close_authority": null,
        "frozen": false
      },
      {
        "address": "11NCSQ2Bm6UZdtDqBeHFcos5eFXT1kJ3jG29qKJCWU",
        "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "owner": "FRPPBdG4sYCH7EnTMeKFSVLsfzfEUo4PQ1wWCUkzzmuv",
        "amount": 1804811,
        "delegate": null,
        "delegated_amount": 0,
        "close_authority": null,
        "frozen": false
      }
    ]
  },
  "id": 1
}
```

### Подсчёт всех держателей токена

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
const RPC_URL = 'https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY';

async function countHolders(mint: string) {
  const owners = new Set<string>();
  let cursor: string | undefined;

  while (true) {
    const response = await fetch(RPC_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 1,
        method: 'getTokenAccounts',
        params: { mint, limit: 1000, cursor },
      }),
    });
    const { result, error } = await response.json();
    if (error) throw new Error(error.message);

    for (const account of result.token_accounts) owners.add(account.owner);
    if (result.token_accounts.length < 1000) break;
    cursor = result.cursor;
  }

  return owners.size;
}
```

## Распространённые ошибки

| Код | Сообщение | Решение |
| - | - | - |
| -32602 | Validation Error: Pass 'owner', 'mint' or both (also accepted as 'ownerAddress' and 'mintAddress') | Передайте `owner`, `mint` или оба параметра |
| -32602 | Validation Error: Invalid pubkey ... | Передайте действительные адреса в base-58 |
| -32602 | Pagination Error. Limit should not be greater than 1000. | Используйте `limit` не более 1 000 |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.