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

# Listar versiones de IDL

> Lista todas las versiones de IDL que Eventos analizados tiene para un programa de Solana, junto con el slot en el que se activó cada versión.

Los parámetros de ruta, el esquema de respuesta y los ejemplos de esta página se generan a partir de la definición de OpenAPI.

Listar versiones de IDL devuelve el historial de la interfaz de un programa desde el catálogo de IDL que Eventos analizados y [Flujos analizados](https://www.helius.dev/docs/es/parsed-streams.md) usan para decodificar instrucciones. Cada elemento representa una versión, identificada por el slot en el que se activó. Los elementos se ordenan del más antiguo al más reciente, por lo que el último corresponde a la versión actual.

Pasa cualquier `slot` de la respuesta a [Obtener IDL](https://www.helius.dev/docs/es/api-reference/parsed-events/idl.md) para recuperar el documento IDL de esa versión. El [explorador Orb](https://www.helius.dev/docs/es/orb/explore-programs.md) usa estos endpoints para mostrar los IDL de los programas.

## Casos de uso

* **Rastrea los cambios en la interfaz.** Consulta periódicamente Listar versiones de IDL para un programa del que dependas. Cuando aparezca una nueva versión, obtén esa versión y la anterior con Obtener IDL y compara sus `instructions`. Una nueva instrucción de administrador o autoridad amerita una revisión de seguridad.
* **Comprueba la cobertura del catálogo.** Un `404` significa que el catálogo no tiene un IDL para el programa. Los programas como SPL Token se decodifican mediante decodificadores integrados y también devuelven `404`.

## Ejemplo: detectar una nueva versión de IDL

Este script lista las versiones de IDL de un programa, obtiene las dos más recientes e imprime las instrucciones que se agregaron o eliminaron:

```javascript diff-idl-versions.js theme={"system"}
const API_KEY = process.env.HELIUS_API_KEY;

if (!API_KEY) {
  console.error("Missing HELIUS_API_KEY.");
  process.exit(1);
}

const BASE = "https://mainnet.helius-rpc.com/v1/parsed-events/idl";
const PROGRAM_ID = "KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD";

async function get(path) {
  const response = await fetch(`${BASE}/${path}?api-key=${API_KEY}`);
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }
  return response.json();
}

const versions = await get(PROGRAM_ID);
if (versions.length < 2) {
  console.log("Fewer than two IDL versions; nothing to compare.");
  process.exit(0);
}

const [previous, latest] = versions.slice(-2);
const [before, after] = await Promise.all([
  get(`${PROGRAM_ID}/${previous.slot}`),
  get(`${PROGRAM_ID}/${latest.slot}`),
]);

const names = (idl) => new Set(idl.instructions.map((ix) => ix.name));
const beforeNames = names(before);
const afterNames = names(after);

console.log(`Comparing slot ${previous.slot} with slot ${latest.slot}`);
console.log("Added:", [...afterNames].filter((name) => !beforeNames.has(name)));
console.log("Removed:", [...beforeNames].filter((name) => !afterNames.has(name)));
```

Para detectar cambios con el tiempo, almacena el `slot` de la última versión que hayas visto y compáralo en cada consulta periódica.

## Créditos

Cada solicitud cuesta **10 créditos** y está disponible en todos los planes. El ejemplo anterior realiza tres solicitudes, por lo que cuesta 30 créditos. Consulta [Créditos](https://www.helius.dev/docs/es/billing/credits.md#eventos-analizados).

## Errores

| Estado | Cuándo ocurre |
| - | - |
| `400` | `programId` no es una dirección base58 válida. |
| `401` | Falta la clave de API o no es válida. El cuerpo es texto sin formato: `Unauthorized`. |
| `404` | El catálogo no tiene un IDL para el programa. |

Otros errores devuelven un cuerpo JSON con un mensaje `error`, como `{"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}`.

## Parámetros de la solicitud

**programId** `string` *required*

Dirección del programa, codificada en base58.


## OpenAPI

````yaml es/openapi/parsed-events.yaml GET /v1/parsed-events/idl/{programId}
openapi: 3.0.3
info:
  title: Eventos analizados
  version: 0.1.0
  description: >-
    Analiza transacciones de Solana y el historial de transacciones analizadas
    con Eventos analizados.
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/idl/{programId}:
    get:
      tags:
        - Eventos analizados
      summary: Listar versiones de IDL
      description: >-
        Lista todas las versiones de IDL que Eventos analizados tiene para un
        programa, desde la más antigua. Cada versión se identifica por el slot
        en el que se activó.
      operationId: listIdlVersionsParsedEvents
      parameters:
        - $ref: '#/components/parameters/ProgramId'
      responses:
        '200':
          description: >-
            Las versiones de IDL del programa, ordenadas por `slot` de forma
            ascendente.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IdlVersion'
              examples:
                default:
                  summary: Kamino Lend (primeras 3 de 43 versiones)
                  value:
                    - slot: 182747476
                      sources:
                        - anchor
                    - slot: 205509752
                      sources:
                        - anchor
                    - slot: 206074074
                      sources:
                        - anchor
        '400':
          description: '`programId` no es una dirección válida.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: 'invalid program id: notanaddress: String is the wrong size'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            El catálogo no tiene una IDL para el programa. Los programas que
            Eventos analizados decodifica con decodificadores integrados, como
            SPL Token, devuelven `404`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      no IDLs found for program
                      TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
components:
  parameters:
    ProgramId:
      name: programId
      in: path
      required: true
      description: Dirección del programa, codificada en base58.
      schema:
        type: string
        example: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
  schemas:
    IdlVersion:
      type: object
      description: Una versión de la IDL de un programa.
      required:
        - slot
        - sources
      properties:
        slot:
          type: integer
          format: uint64
          description: >-
            Slot en el que se activó esta versión de la IDL. Pásalo a Obtener
            IDL para recuperar esta versión.
        sources:
          type: array
          description: >-
            Dónde encontró Eventos analizados esta versión. Los valores incluyen
            `anchor`, `program_metadata` y `github`, y se pueden agregar más.
            Una versión puede tener más de una fuente.
          items:
            type: string
    ErrorResponse:
      type: object
      description: Respuesta de error de la solicitud.
      properties:
        error:
          type: string
          description: Mensaje de error.
  responses:
    Unauthorized:
      description: >-
        Falta la clave de API o no es válida. El cuerpo está en texto sin
        formato.
      content:
        text/plain:
          schema:
            type: string
          examples:
            default:
              value: Unauthorized
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key

````

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