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

# transactionSubscribe

> transactionSubscribe передает события транзакций Solana в реальном времени через WebSocket с настраиваемыми фильтрами — отслеживайте аккаунты, исключайте голосования и задавайте уровень детализации.

## Конечные точки

Расширенные WebSocket доступны в mainnet и devnet:

* **Mainnet** `wss://mainnet.helius-rpc.com/?api-key=<api-key>`
* **Devnet** `wss://devnet.helius-rpc.com/?api-key=<api-key>`

<Note>Для WebSocket действует 10-минутный таймер неактивности. Настоятельно рекомендуется реализовать проверки работоспособности и отправлять ping-запросы каждую минуту, чтобы поддерживать соединение WebSocket активным.</Note>

## Авторизация

<ParamField query="api-key" type="string" required>
  Ваш ключ API Helius. Его можно бесплатно получить на [панели управления](https://dashboard.helius.dev/api-keys).
</ParamField>

## Тело запроса

<ParamField body="params" type="array" required>
  <Expandable title="TransactionSubscribeFilter" defaultOpen>
    <ParamField body="vote" type="boolean">
      Включать или исключать транзакции, связанные с голосованием.
    </ParamField>

    <ParamField body="failed" type="boolean">
      Включать или исключать неуспешные транзакции.
    </ParamField>

    <ParamField body="signature" type="string">
      Фильтровать обновления по конкретной транзакции с помощью ее подписи.
    </ParamField>

    <ParamField body="accountInclude" type="string[]">
      Список аккаунтов, для которых нужно получать обновления транзакций. Транзакция должна включать **хотя бы один** из этих аккаунтов. Поддерживается до 50 000 адресов.
    </ParamField>

    <ParamField body="accountExclude" type="string[]">
      Список аккаунтов, которые нужно исключить из обновлений транзакций. Поддерживается до 50 000 адресов.
    </ParamField>

    <ParamField body="accountRequired" type="string[]">
      Список аккаунтов, которые **все должны** присутствовать в транзакции, чтобы она соответствовала фильтру. Поддерживается до 50 000 адресов.
    </ParamField>

    <ParamField body="tokenAccounts" type="string">
      Включает раскрытие связанных токен-аккаунтов (ATA), чтобы кошелек `accountInclude` также соответствовал транзакциям, в которых ему **принадлежит** баланс токенов SPL. Например, это позволяет сопоставлять входящие переводы токенов, затрагивающие токен-аккаунт кошелька, а не его открытый ключ. Допустимые значения:

      * `"balanceChanged"` — сопоставлять, если кошельку принадлежит баланс токенов, сумма которого изменилась в транзакции (или токен-аккаунт которого был закрыт).
      * `"all"` — сопоставлять любую транзакцию, которая ссылается на принадлежащий кошельку баланс токенов, даже если он не изменился. Создает больший объем данных.
      * `"none"` — то же, что и отсутствие этого поля (без раскрытия). Это значение используется по умолчанию.

      Недопустимое значение возвращает ошибку JSON-RPC `-32602`: `Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all`.
    </ParamField>
  </Expandable>

  <Expandable title="TransactionSubscribeOptions">
    <ParamField body="commitment" type="string">
      Уровень подтверждения для получения данных. Допустимые значения: `processed`, `confirmed` или `finalized`.
    </ParamField>

    <ParamField body="encoding" type="string">
      Формат кодирования возвращаемых данных. Допустимые значения: `base58`, `base64` или `jsonParsed`.
    </ParamField>

    <ParamField body="transactionDetails" type="string">
      Уровень детализации возвращаемых данных транзакции. Допустимые значения: `full`, `signatures`, `accounts` или `none`.
    </ParamField>

    <ParamField body="showRewards" type="boolean">
      Следует ли включать данные о вознаграждениях в обновления.
    </ParamField>

    <ParamField body="maxSupportedTransactionVersion" type="integer">
      Наивысшая версия транзакции, для которой нужно получать обновления. Укажите `1`, чтобы получать устаревшие транзакции, а также транзакции v0 и v1.

      <Note>Обязательное поле, если для `transactionDetails` задано значение `"accounts"` или `"full"`.</Note>
    </ParamField>
  </Expandable>
</ParamField>

## Ответ

<ResponseField name="result" type="integer">
  Идентификатор подписки (необходим для отмены подписки)
</ResponseField>

<RequestExample>
  ```json Request theme={"system"}
  {
    "jsonrpc": "2.0",
    "id": 420,
    "method": "transactionSubscribe",
    "params": [
      {
        "accountInclude": ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"]
      },
      {
        "commitment": "processed",
        "encoding": "jsonParsed",
        "transactionDetails": "full",
        "showRewards": true,
        "maxSupportedTransactionVersion": 1
      }
    ]
  }
  ```

  ```json Watch a wallet incl. token transfers theme={"system"}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "transactionSubscribe",
    "params": [
      {
        "accountInclude": ["<WALLET_PUBKEY>"],
        "tokenAccounts": "balanceChanged"
      },
      { "commitment": "confirmed", "encoding": "jsonParsed" }
    ]
  }
  ```

  ```javascript Code Example theme={"system"}
  const WebSocket = require("ws");

  const ws = new WebSocket("wss://mainnet.helius-rpc.com/?api-key=<API_KEY>");

  ws.on("open", () => {
    ws.send(JSON.stringify({
      jsonrpc: "2.0",
      id: 420,
      method: "transactionSubscribe",
      params: [
        { accountInclude: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"] },
        {
          commitment: "processed",
          encoding: "jsonParsed",
          transactionDetails: "full",
          maxSupportedTransactionVersion: 1,
        },
      ],
    }));

    // Keep connection alive
    setInterval(() => ws.ping(), 30_000);
  });

  ws.on("message", (data) => {
    console.log(JSON.parse(data.toString()));
  });
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={"system"}
  {
    "jsonrpc": "2.0",
    "result": 4743323479349712,
    "id": 420
  }
  ```

  ```json Notification theme={"system"}
  {
    "jsonrpc": "2.0",
    "method": "transactionNotification",
    "params": {
      "subscription": 4743323479349712,
      "result": {
        "transaction": {
          "transaction": [
            "Ae6zfSExLsJ/E1+q0jI+3ueAtSoW+6HnuDohmuFwagUo2BU4OpkSdUKYNI1dJfMOonWvjaumf4Vv1ghn9f3Avg0BAAEDGycH0OcYRpfnPNuu0DBQxTYPWpmwHdXPjb8y2P200JgK3hGiC2JyC9qjTd2lrug7O4cvSRUVWgwohbbefNgKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0HcpwKokfYDDAJTaF/TWRFWm0Gz5/me17PRnnywHurMBAgIAAQwCAAAAoIYBAAAAAAA=",
            "base64"
          ],
          "meta": {
            "err": null,
            "status": {
              "Ok": null
            },
            "fee": 5000,
            "preBalances": [
              28279852264,
              158122684,
              1
            ],
            "postBalances": [
              28279747264,
              158222684,
              1
            ],
            "innerInstructions": [],
            "logMessages": [
              "Program 11111111111111111111111111111111 invoke [1]",
              "Program 11111111111111111111111111111111 success"
            ],
            "preTokenBalances": [],
            "postTokenBalances": [],
            "rewards": null,
            "loadedAddresses": {
              "writable": [],
              "readonly": []
            },
            "computeUnitsConsumed": 0
          }
        },
        "signature": "5moMXe6VW7L7aQZskcAkKGQ1y19qqUT1teQKBNAAmipzdxdqVLAdG47WrsByFYNJSAGa9TByv15oygnqYvP6Hn2p",
        "slot": 224341380,
        "transactionIndex": 42
      }
    }
  }
  ```
</ResponseExample>

## Управление подписками

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

При успешном выполнении `transactionSubscribe` сервер возвращает идентификатор подписки в поле `result`. Это то же число, которое отображается в `params.subscription` в каждом уведомлении этой подписки:

<CodeGroup>
  ```json Subscribe Response theme={"system"}
  {
    "jsonrpc": "2.0",
    "result": 4743323479349712,
    "id": 420
  }
  ```

  ```json Notification theme={"system"}
  {
    "jsonrpc": "2.0",
    "method": "transactionNotification",
    "params": {
      "subscription": 4743323479349712,
      "result": {}
    }
  }
  ```
</CodeGroup>

Сохраните идентификатор подписки из ответа. Он потребуется для отмены подписки.

### Отмена подписки

Чтобы прекратить получать уведомления, вызовите `transactionUnsubscribe` с идентификатором подписки. Каждый вызов `transactionSubscribe` в рамках одного соединения создает отдельную подписку с собственным идентификатором. Поэтому перед повторной подпиской обязательно отмените предыдущую, чтобы не получать дублирующиеся уведомления.

<CodeGroup>
  ```json Request theme={"system"}
  {
    "jsonrpc": "2.0",
    "id": 421,
    "method": "transactionUnsubscribe",
    "params": [4743323479349712]
  }
  ```

  ```json Response theme={"system"}
  {
    "jsonrpc": "2.0",
    "result": true,
    "id": 421
  }
  ```
</CodeGroup>

После вызова `transactionUnsubscribe` еще некоторое время могут поступать сообщения, уже находящиеся в процессе передачи. Это ожидаемое поведение.


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