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

# describeProgram

> Получите список имен декодированных инструкций, событий и ролей аккаунтов программы, чтобы создавать фильтры Parsed Streams, которые действительно находят совпадения.

Самая распространенная проблема API на основе фильтров — корректный фильтр, который ничего не находит. Обычно это происходит из-за угаданного имени инструкции или роли. `describeProgram` предотвращает эту проблему, возвращая точные имена, с которыми средство сопоставления сравнивает данные: имена декодированных инструкций, событий и ролей аккаунтов для любой из более чем 3600 программ в каталоге.

`describeProgram` — это метод JSON-RPC, вызываемый через соединение WebSocket. Сейчас он доступен только по адресу `wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>`, но не в конечной точке Gatekeeper (`wss://beta.helius-rpc.com`), через которую вы оформляете подписку. Для поиска откройте отдельное соединение с `fs-beta`, а затем оформите подписку через Gatekeeper.

Рекомендуемый порядок действий: вызовите `describeProgram`, чтобы получить точные имена инструкций и ролей, создайте фильтр с этими именами, а затем [оформите подписку](/docs/ru/api-reference/parsed-streams/parsedtransactionsubscribe). Полный процесс описан в руководстве [Отслеживание обменов Jupiter](/docs/ru/parsed-streams/guides/track-jupiter-swaps).

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

<ParamField body="params" type="array" required>
  <Expandable title="Query" defaultOpen>
    <ParamField body="program" type="string" required>
      Адрес программы (base58) или ее имя в каталоге. **Предпочтительно использовать адрес**: имена могут быть неоднозначными для разных версий программы (несколько записей каталога имеют имя `jupiter`, поэтому поиск по имени может вернуть более старую версию). Если вы все же выполняете поиск по имени, убедитесь, что `result.id` соответствует программе, на которую вы хотите подписаться.
    </ParamField>
  </Expandable>
</ParamField>

## Ответ

<ResponseField name="id" type="string">
  Адрес программы (base58).
</ResponseField>

<ResponseField name="name" type="string">
  Имя программы в каталоге.
</ResponseField>

<ResponseField name="instructions" type="string[]">
  Имена декодированных инструкций в точном виде, в котором их сравнивает средство сопоставления. Используйте их в поле фильтра `instructionNames`.
</ResponseField>

<ResponseField name="events" type="string[]">
  Имена событий, которые синтаксический анализатор распознает для этой программы.
</ResponseField>

<ResponseField name="roles" type="string[]">
  Имена декодированных ролей аккаунтов. Используйте их как ключи в поле фильтра `accounts.roles`. Они должны совпадать точно, без преобразования регистра.
</ResponseField>

<RequestExample>
  ```json Request theme={"system"}
  { "jsonrpc": "2.0", "id": 1, "method": "describeProgram", "params": [{ "program": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" }] }
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={"system"}
  {
    "jsonrpc": "2.0", "id": 1,
    "result": {
      "id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "name": "jupiter",
      "instructions": ["route", "shared_accounts_route", "exact_out_route"],
      "events": ["SwapEvent"],
      "roles": ["user_transfer_authority", "destination_token_account"]
    }
  }
  ```
</ResponseExample>


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