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

> List a program's decoded instruction names, events, and account roles so you can build Parsed Streams filters that actually match.

The most common failure with a filter-based API is a filter that is valid but matches nothing, usually a guessed instruction or role name. `describeProgram` prevents that by returning the exact names the matcher compares against.

Recommended flow: `describeProgram` to get the exact instruction and role names, build the filter with those names, then [subscribe](/docs/api-reference/parsed-streams/parsedtransactionsubscribe). The [Track Jupiter Swaps](/docs/parsed-streams/guides/track-jupiter-swaps) guide walks through this end to end.

## Body

<ParamField body="params" type="array" required>
  <Expandable title="Query" defaultOpen>
    <ParamField body="program" type="string" required>
      A program address (base58) or a catalog name. **Prefer the address**: names can be ambiguous across program versions (more than one catalog entry is named `jupiter`, and a name lookup can resolve to the older one). If you do look up by name, check that `result.id` is the program you intend to subscribe to.
    </ParamField>
  </Expandable>
</ParamField>

## Response

<ResponseField name="id" type="string">
  The program's address (base58).
</ResponseField>

<ResponseField name="name" type="string">
  The program's catalog name.
</ResponseField>

<ResponseField name="instructions" type="string[]">
  Decoded instruction names, exactly as the matcher compares them. Use these in the `instructionNames` filter field.
</ResponseField>

<ResponseField name="events" type="string[]">
  Event names the parser recognizes for this program.
</ResponseField>

<ResponseField name="roles" type="string[]">
  Decoded account role names. Use these as keys in the `accounts.roles` filter field — they match exactly, with no case folding.
</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>
