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

> Cantumkan nama instruksi, peristiwa, dan peran akun yang telah didekodekan dari suatu program agar Anda dapat membuat filter Parsed Streams yang benar-benar cocok.

Kegagalan paling umum pada API berbasis filter adalah filter yang valid tetapi tidak cocok dengan apa pun, biasanya karena nama instruksi atau peran yang ditebak. `describeProgram` mencegah hal tersebut dengan menampilkan nama persis yang dibandingkan oleh pencocok — nama instruksi yang didekodekan, nama peristiwa, dan peran akun untuk salah satu dari 3.600+ program dalam katalog.

`describeProgram` adalah metode JSON-RPC yang dikirim melalui koneksi WebSocket. Saat ini, metode tersebut hanya tersedia di `wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>`, bukan di endpoint Gatekeeper (`wss://beta.helius-rpc.com`) tempat Anda berlangganan. Buka koneksi terpisah ke `fs-beta` untuk penemuan, lalu berlangganan di Gatekeeper.

Alur yang disarankan: gunakan `describeProgram` untuk mendapatkan nama instruksi dan peran yang tepat, buat filter dengan nama tersebut, lalu [berlangganan](/docs/id/api-reference/parsed-streams/parsedtransactionsubscribe). Panduan [Melacak Swap Jupiter](/docs/id/parsed-streams/guides/track-jupiter-swaps) menjelaskan proses ini dari awal hingga akhir.

## Isi

<ParamField body="params" type="array" required>
  <Expandable title="Kueri" defaultOpen>
    <ParamField body="program" type="string" required>
      Alamat program (base58) atau nama katalog. **Utamakan alamat**: nama dapat bersifat ambigu di berbagai versi program (lebih dari satu entri katalog bernama `jupiter`, dan pencarian nama dapat mengarah ke versi yang lebih lama). Jika Anda mencari berdasarkan nama, pastikan bahwa `result.id` adalah program yang ingin Anda ikuti.
    </ParamField>
  </Expandable>
</ParamField>

## Respons

<ResponseField name="id" type="string">
  Alamat program (base58).
</ResponseField>

<ResponseField name="name" type="string">
  Nama katalog program.
</ResponseField>

<ResponseField name="instructions" type="string[]">
  Nama instruksi yang didekodekan, persis seperti yang dibandingkan oleh pencocok. Gunakan nama ini di bidang filter `instructionNames`.
</ResponseField>

<ResponseField name="events" type="string[]">
  Nama peristiwa yang dikenali pengurai untuk program ini.
</ResponseField>

<ResponseField name="roles" type="string[]">
  Nama peran akun yang didekodekan. Gunakan nama ini sebagai kunci di bidang filter `accounts.roles` — nama harus sama persis tanpa normalisasi huruf besar-kecil.
</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>
