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

# Ограничения частоты запросов Helius

> Полное руководство по ограничениям частоты запросов Helius для всех тарифов и продуктов.

## Что такое ограничения частоты запросов?

Ограничения частоты запросов определяют, сколько запросов в секунду вы можете выполнять. При превышении ограничений вы получите ответ HTTP 429. Рекомендации о том, что делать при получении ответа 429 или другой временной ошибке, приведены ниже в разделе [Повторные попытки и обработка ошибок](#повторные-попытки-и-обработка-ошибок).

## Стандартные ограничения частоты запросов

Для вашего тарифа предусмотрены две стандартные группы ограничений частоты запросов: одна для запросов RPC, другая — для запросов DAS API. Ниже приведены базовые ограничения для каждого тарифа Helius:

<table>
  <thead align="left">
    <tr>
      <th width="200">Тариф</th>
      <th width="260">Ограничение частоты запросов RPC</th>
      <th width="260">DAS и расширенные API</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>Бесплатный</strong></td>
      <td>10 запросов/с</td>
      <td>2 запроса/с</td>
    </tr>

    <tr>
      <td><strong>Developer</strong></td>
      <td>50 запросов/с</td>
      <td>10 запросов/с</td>
    </tr>

    <tr>
      <td><strong>Business</strong></td>
      <td>200 запросов/с</td>
      <td>50 запросов/с</td>
    </tr>

    <tr>
      <td><strong>Professional</strong></td>
      <td>500 запросов/с</td>
      <td>100 запросов/с</td>
    </tr>

    <tr>
      <td><strong>Enterprise</strong></td>
      <td>Индивидуально</td>
      <td>Индивидуально</td>
    </tr>
  </tbody>
</table>

### Увеличение ограничений частоты запросов

Команды на тарифе Professional могут приобрести дополнительные 100 запросов/с за 100 долларов США в месяц.

Если перед запуском вам нужны индивидуальные ограничения частоты запросов, [свяжитесь с нашим отделом продаж](https://www.helius.dev/contact). Если вы используете тариф Developer или Business, перейдите на более высокий тариф, чтобы увеличить ограничения частоты запросов.

## Особые ограничения частоты запросов

Для некоторых конечных точек и специализированных продуктов Helius действуют особые ограничения частоты запросов из-за их требований к вычислительным ресурсам.

### Отправка транзакций

<table>
  <thead align="left">
    <tr>
      <th width="200">Конечная точка</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>Sender</code></td>
      <td>50/с</td>
      <td>50/с</td>
      <td>50/с</td>
      <td>50/с</td>
    </tr>

    <tr>
      <td><code>sendTransaction</code></td>
      <td>1/с</td>
      <td>5/с</td>
      <td>50/с</td>
      <td>100/с</td>
    </tr>

    <tr>
      <td><code>sendBundle</code></td>
      <td>—</td>
      <td>—</td>
      <td>5/с</td>
      <td>5/с</td>
    </tr>

    <tr>
      <td><code>simulateBundle</code></td>
      <td>10/с</td>
      <td>50/с</td>
      <td>200/с</td>
      <td>500/с</td>
    </tr>
  </tbody>
</table>

<Note>
  Запросы Sender без ключа `/fast` ограничены одним запросом в секунду на исходящий
  IP-адрес в каждом регионе. Клиенты, использующие один и тот же NAT, совместно используют это ограничение. Отклонённые запросы `429`
  учитываются в ограничении, а `/ping` — нет. Добавьте существующий API-ключ проекта Helius,
  чтобы получить ограничение в 50 запросов в секунду на каждый ключ в каждом регионе.
</Note>

Если вы используете тариф Professional и хотите увеличить ограничения частоты запросов `sendTransaction`, [свяжитесь с нашим отделом продаж](https://www.helius.dev/contact).

Пользователи тарифа Professional также могут [запросить](https://www.helius.dev/contact) увеличение ограничений частоты запросов и индивидуальные условия чаевых для Sender, чтобы обеспечить работу торговых приложений с более высокой пропускной способностью.

### Сложные вызовы RPC

<table>
  <thead align="left">
    <tr>
      <th width="200">Конечная точка</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getProgramAccounts</code></td>
      <td>5/с</td>
      <td>25/с</td>
      <td>50/с</td>
      <td>75/с</td>
    </tr>
  </tbody>
</table>

### Исторические данные

При выполнении пакетных запросов к методам получения исторических данных действуют следующие ограничения:

<table>
  <thead align="left">
    <tr>
      <th style={{width: '300px'}}>Метод</th>
      <th style={{width: '300px'}}>Максимальный размер пакета</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getTransaction</code></td>
      <td>100 элементов на запрос</td>
    </tr>

    <tr>
      <td><code>getTransactionsForAddress</code></td>
      <td>Пакетные запросы не разрешены</td>
    </tr>

    <tr>
      <td><code>getTransfersByAddress</code></td>
      <td>Пакетные запросы не разрешены</td>
    </tr>

    <tr>
      <td>Все остальные методы получения исторических данных</td>
      <td>10 элементов на запрос</td>
    </tr>
  </tbody>
</table>

<Warning>
  Превышение ограничений размера пакета приведёт к ответу с ошибкой. Для `getTransactionsForAddress` и `getTransfersByAddress` каждый адрес необходимо запрашивать отдельно.
</Warning>

### LaserStream

<table>
  <thead align="left">
    <tr>
      <th width="200">Ресурс</th>
      <th width="50">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="150">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Сети</td>
      <td>—</td>
      <td>Devnet</td>
      <td>Devnet, Mainnet</td>
      <td>Devnet, Mainnet</td>
    </tr>

    <tr>
      <td>Максимальное число публичных ключей</td>
      <td>—</td>
      <td>10 млн</td>
      <td>10 млн</td>
      <td>10 млн</td>
    </tr>

    <tr>
      <td>Активные подключения</td>
      <td>—</td>
      <td>—</td>
      <td>10</td>
      <td>100</td>
    </tr>
  </tbody>
</table>

### Wallet API

Для [Wallet API](/docs/ru/api-reference/wallet-api) действуют те же ограничения частоты запросов, что и для DAS и расширенных API. Эти ограничения являются общими для всех конечных точек:

<table>
  <thead align="left">
    <tr>
      <th width="200">Конечная точка</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Все конечные точки Wallet API</td>
      <td>2/с</td>
      <td>10/с</td>
      <td>50/с</td>
      <td>100/с</td>
    </tr>
  </tbody>
</table>

К ним относятся конечные точки поиска идентификационных данных, получения балансов и истории, выполнения переводов и определения источников пополнения. Подробнее см. в нашей [документации по Wallet API](/docs/ru/wallet-api/overview).

### Разобранные потоки

<table>
  <thead align="left">
    <tr>
      <th width="200">Ресурс</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Одновременные подключения</td>
      <td>5</td>
      <td>10</td>
      <td>50</td>
      <td>50</td>
    </tr>

    <tr>
      <td>Подписки на одно подключение</td>
      <td>25</td>
      <td>25</td>
      <td>25</td>
      <td>25</td>
    </tr>
  </tbody>
</table>

Подключения учитываются для каждого проекта суммарно по всем его API-ключам. Когда проект достигает предельного числа подключений, он получает ответ HTTP 429. Ограничения для отдельных фильтров и сообщений см. в разделе [Ограничения Parsed Streams](/docs/ru/api-reference/parsed-streams/overview#ограничения).

### WebSocket LaserStream

<table>
  <thead align="left">
    <tr>
      <th width="200">Ресурс</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Одновременные подключения</td>
      <td>5</td>
      <td>150</td>
      <td>250</td>
      <td>1 000</td>
    </tr>

    <tr>
      <td>Подписки на одно подключение</td>
      <td>1 000</td>
      <td>1 000</td>
      <td>1 000</td>
      <td>1 000</td>
    </tr>

    <tr>
      <td>Типы WebSocket</td>
      <td>Стандартные</td>
      <td>Стандартные, расширенные</td>
      <td>Стандартные, расширенные</td>
      <td>Стандартные, расширенные</td>
    </tr>
  </tbody>
</table>

### Вебхуки

<table>
  <thead align="left">
    <tr>
      <th width="200">Ресурс</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Максимальное число вебхуков</td>
      <td>5</td>
      <td>50</td>
      <td>50</td>
      <td>50</td>
    </tr>

    <tr>
      <td>Адресов на вебхук</td>
      <td>100 тыс.</td>
      <td>100 тыс.</td>
      <td>100 тыс.</td>
      <td>100 тыс.</td>
    </tr>
  </tbody>
</table>

### ZK-сжатие

<table>
  <thead align="left">
    <tr>
      <th width="200">Сервис</th>
      <th width="100">Бесплатный</th>
      <th width="100">Developer</th>
      <th width="100">Business</th>
      <th width="100">Professional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>API Photon</td>
      <td>2/с</td>
      <td>10/с</td>
      <td>50/с</td>
      <td>100/с</td>
    </tr>

    <tr>
      <td><code>getValidityProof</code></td>
      <td>1/с</td>
      <td>5/с</td>
      <td>10/с</td>
      <td>20/с</td>
    </tr>
  </tbody>
</table>

## Повторные попытки и обработка ошибок

Когда ваше приложение получает ответ `429 Too Many Requests`, `503 Service Unavailable` или временный ответ `5xx`, немного подождите и повторите попытку — не отправляйте повторный запрос немедленно. Немедленные повторные попытки накапливают запросы и замедляют, а не ускоряют восстановление после превышения ограничения частоты запросов.

### Рекомендуемая стратегия

* Подождите около **1 секунды** перед первой повторной попыткой.
* **Удваивайте время ожидания** после каждой повторной попытки, но не более чем до **30 секунд**.
* Добавляйте к каждому периоду ожидания небольшое случайное отклонение в **±25%**, чтобы несколько приложений не выполняли повторные попытки одновременно.
* Прекратите попытки после **5 раз** и верните ошибку вызывающему коду.

### При каких ошибках следует повторять попытку

| Статус | Повторить? | Причина |
| - | - | - |
| `400`, `401`, `403`, `404` | Нет | Ошибки клиента — повторная попытка не изменит результат. |
| `408` | Да | Истекло время ожидания запроса. |
| `409` | Нет | Конфликт — устраните его в вызывающем коде. |
| `422` | Нет | Ошибка валидации. |
| `429` | Да | Превышено ограничение частоты запросов — подождите и повторите попытку с увеличенной задержкой. |
| `500`, `502` | Да | Временная ошибка сервера. |
| `503` | Да | Сервис недоступен — подождите и повторите попытку с увеличенной задержкой. |
| `504` | Да | Истекло время ожидания шлюза. |
| Сетевая ошибка | Да | Сброс подключения, ошибка DNS или истечение времени ожидания сокета. |

### Пример

<CodeGroup>
  ```ts TypeScript theme={"system"}
  const RETRYABLE = new Set([408, 429, 500, 502, 503, 504]);

  export async function callWithRetry<T>(
    request: () => Promise<Response>,
    maxAttempts = 5,
  ): Promise<T> {
    let delay = 1000;
    for (let attempt = 1; attempt <= maxAttempts; attempt++) {
      const res = await request();
      if (res.ok) return (await res.json()) as T;

      if (!RETRYABLE.has(res.status) || attempt === maxAttempts) {
        throw new Error(`${res.status} after ${attempt} attempt(s): ${await res.text()}`);
      }

      const jitterMs = delay * (0.75 + Math.random() * 0.5);
      await new Promise((r) => setTimeout(r, jitterMs));
      delay = Math.min(delay * 2, 30_000);
    }
    throw new Error("unreachable");
  }
  ```

  ```python Python theme={"system"}
  import random
  import time

  RETRYABLE = {408, 429, 500, 502, 503, 504}

  def call_with_retry(request, max_attempts: int = 5):
      delay = 1.0
      for attempt in range(1, max_attempts + 1):
          response = request()
          if response.ok:
              return response.json()

          if response.status_code not in RETRYABLE or attempt == max_attempts:
              response.raise_for_status()

          time.sleep(delay * random.uniform(0.75, 1.25))
          delay = min(delay * 2, 30.0)
  ```

  ```bash Shell theme={"system"}
  call_with_retry() {
    local attempt=1 delay=1 body status
    while [ "$attempt" -le 5 ]; do
      response=$(curl -sS -w "\n%{http_code}" "$@")
      body=$(printf '%s\n' "$response" | sed '$d')
      status=$(printf '%s\n' "$response" | tail -n1)
      case "$status" in
        2*) printf '%s\n' "$body"; return 0 ;;
        408|429|500|502|503|504) ;;  # fall through and retry
        *) printf '%s\n' "$body" >&2; return 1 ;;
      esac
      # ~delay seconds with 25% jitter
      sleep "$(awk -v d="$delay" 'BEGIN { srand(); print d * (0.75 + rand() * 0.5) }')"
      delay=$(( delay * 2 > 30 ? 30 : delay * 2 ))
      attempt=$(( attempt + 1 ))
    done
    return 1
  }
  ```
</CodeGroup>

### Формат ответа с ошибкой

При ошибке все API Helius возвращают структурированное тело JSON. Конечные точки JSON-RPC (Solana RPC, DAS, Sender, Priority Fee, ZK Compression) возвращают стандартную оболочку JSON-RPC 2.0:

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "error": { "code": -32005, "message": "Too many requests" },
  "id": "1"
}
```

Конечные точки REST (Wallet API, Admin API) возвращают:

```json theme={"system"}
{
  "error": "RATE_LIMIT_EXCEEDED",
  "code": 429,
  "details": "Too many requests. Retry after 2 seconds."
}
```

Полный список кодов ошибок и их значений см. в разделе [Распространённые коды ошибок](/docs/ru/api-reference/common-error-codes).


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