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

# getProgramAccountsV2

> getProgramAccountsV2 es una versión mejorada de getProgramAccounts que incluye paginación basada en cursor y actualizaciones mediante changedSinceSlot para consultar grandes conjuntos de cuentas de Solana.

## Descripción general

`getProgramAccountsV2` es una versión mejorada del método estándar `getProgramAccounts`, diseñada para aplicaciones que necesitan consultar de manera eficiente grandes conjuntos de cuentas pertenecientes a programas específicos de Solana. Este método incorpora paginación basada en cursor y funciones de actualización incremental.

<Info>
  **Nuevas funciones de V2:**

  * **Paginación basada en cursor**: Configura límites de 1 a 10 000 cuentas por solicitud
  * **Actualizaciones incrementales**: Usa `changedSinceSlot` para obtener solo las cuentas modificadas recientemente
  * **Mejor rendimiento**: Evita tiempos de espera agotados y reduce el uso de memoria con conjuntos de datos grandes
  * **Compatibilidad con versiones anteriores**: Admite todos los parámetros existentes de `getProgramAccounts`
  * **`withContext` opcional**: `true` agrega `slot` y `apiVersion` dentro de `result.context`; omítelo o usa `false` para que no se incluyan
</Info>

## Beneficios principales

<CardGroup cols={2}>
  <Card title="Consultas escalables" icon="chart-line">
    Gestiona programas con millones de cuentas mediante una paginación eficiente de los resultados
  </Card>

  <Card title="Sincronización en tiempo real" icon="arrows-rotate">
    Usa `changedSinceSlot` para realizar actualizaciones incrementales y sincronizar datos en tiempo real
  </Card>

  <Card title="Evita tiempos de espera agotados" icon="clock">
    Las consultas grandes que antes agotaban el tiempo de espera ahora funcionan de manera confiable con la paginación
  </Card>

  <Card title="Uso eficiente de la memoria" icon="microchip">
    Procesa los datos en bloques en lugar de cargar todo en la memoria de una sola vez
  </Card>
</CardGroup>

## Prácticas recomendadas de paginación

<Warning>
  **Comportamiento importante de la paginación**: El final de la paginación solo se indica cuando **no se devuelve ninguna cuenta**. La API puede devolver menos cuentas que el límite debido al filtrado. Continúa siempre la paginación hasta que `paginationKey` sea `null`.
</Warning>

### Patrón básico de paginación

```typescript theme={"system"}
let allAccounts = [];
let paginationKey = null;

do {
  const response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: '1',
      method: 'getProgramAccountsV2',
      params: [
        "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        {
          encoding: 'base64',
          filters: [{ dataSize: 165 }],
          limit: 5000,
          ...(paginationKey && { paginationKey })
        }
      ]
    })
  });
  
  const data = await response.json();
  allAccounts.push(...data.result.accounts);
  paginationKey = data.result.paginationKey;
} while (paginationKey);
```

### Actualizaciones incrementales

```typescript theme={"system"}
// Get only accounts modified since slot 150000000
const incrementalUpdate = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getProgramAccountsV2',
    params: [
      programId,
      {
        encoding: 'jsonParsed',
        limit: 1000,
        changedSinceSlot: 150000000
      }
    ]
  })
});
```

## Consejos de rendimiento

<Tip>
  **Tamaño óptimo del límite**: Para la mayoría de los casos de uso, un límite de entre 1000 y 5000 cuentas por solicitud ofrece el mejor equilibrio entre rendimiento y confiabilidad.
</Tip>

* **Comienza con límites más pequeños** (1000) y auméntalos según el rendimiento de tu red
* **Usa la codificación adecuada**: `jsonParsed` para mayor comodidad, `base64` para mayor rendimiento
* **Aplica filtros** para reducir el tamaño del conjunto de datos antes de la paginación
* **Guarda `paginationKey`** para reanudar las consultas si se interrumpen
* **Supervisa los tiempos de respuesta** y ajusta los límites según corresponda

## `withContext` (opcional)

Valor booleano en el objeto de configuración del programa (`params[1]`). Solo cambia la estructura de `result`, no los filtros, los límites ni la paginación.

```json theme={"system"}
// Omitted or false
{ "jsonrpc": "2.0", "id": "1", "result": { "accounts": [], "paginationKey": null } }

// true — snapshot metadata plus page under `result.value`
{ "jsonrpc": "2.0", "id": "1", "result": {
  "context": { "slot": 411895550, "apiVersion": "3.1.9" },
  "value": { "accounts": [], "paginationKey": null }
}}
```

## Migración desde getProgramAccounts

Migrar desde el método original es sencillo: solo reemplaza el nombre del método y agrega los parámetros de paginación:

```diff theme={"system"}
{
  "jsonrpc": "2.0",
  "id": "1",
- "method": "getProgramAccounts",
+ "method": "getProgramAccountsV2",
  "params": [
    "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    {
      "encoding": "base64",
      "filters": [{ "dataSize": 165 }],
+     "limit": 5000
    }
  ]
}
```

## Métodos relacionados

<CardGroup cols={2}>
  <Card title="getProgramAccounts" icon="code" href="/docs/es/api-reference/rpc/http/getprogramaccounts">
    Método original sin paginación
  </Card>

  <Card title="getTokenAccountsByOwnerV2" icon="wallet" href="/docs/es/api-reference/rpc/http/gettokenaccountsbyownerv2">
    Método V2 para consultas de cuentas de tokens
  </Card>
</CardGroup>

## Parámetros de la solicitud

<ParamField body="address" type="string" required>
  La clave pública (dirección) del programa de Solana cuyas cuentas quieres consultar, como una cadena codificada en base 58.
</ParamField>

<ParamField body="commitment" type="string">
  El nivel de compromiso de la solicitud.

  * `confirmed`
  * `finalized`
  * `processed`
</ParamField>

<ParamField body="minContextSlot" type="number">
  El slot mínimo en el que se puede evaluar la solicitud.
</ParamField>

<ParamField body="withContext" type="boolean">
  Cuando es `true`, devuelve `result.context` (metadatos de la instantánea: `slot`, `apiVersion`) y anida
  `accounts` y `paginationKey` dentro de `result.value`. Cuando es `false` o se omite,
  esos campos aparecen directamente en `result` (por ejemplo, `result.accounts`). Se aplican los mismos filtros y límites.
</ParamField>

<ParamField body="encoding" type="string">
  Formato de codificación de los datos de cuenta devueltos.

  * `jsonParsed`
  * `base58`
  * `base64`
  * `base64+zstd`
</ParamField>

<ParamField body="dataSlice" type="object">
  Solicita una sección de los datos de la cuenta.
</ParamField>

<ParamField body="dataSlice.length" type="number">
  Número de bytes que se devolverán.
</ParamField>

<ParamField body="dataSlice.offset" type="number">
  Desplazamiento en bytes desde el que se comenzará a leer.
</ParamField>

<ParamField body="limit" type="number">
  Número máximo de cuentas que se devolverán por solicitud (1-10 000).
</ParamField>

<ParamField body="paginationKey" type="string">
  Cursor de paginación codificado en base 58 para obtener las páginas siguientes. Usa el paginationKey de la respuesta anterior.
</ParamField>

<ParamField body="changedSinceSlot" type="number">
  Devuelve únicamente las cuentas modificadas durante este número de slot o después. Es útil para las actualizaciones incrementales.
</ParamField>

<ParamField body="filters" type="array">
  Potente sistema de filtrado para consultar de manera eficiente patrones específicos de datos de cuentas de Solana.
</ParamField>


## OpenAPI

````yaml es/openapi/rpc-http/getProgramAccountsV2.yaml POST /
openapi: 3.1.0
info:
  title: API RPC de Solana
  version: 1.0.0
  description: >-
    API mejorada de indexación de cuentas de programas de Solana con paginación
    basada en cursores y compatibilidad con changedSinceSlot para consultar de
    manera eficiente grandes conjuntos de cuentas pertenecientes a programas
    específicos. Admite actualizaciones incrementales mediante filtrado por slot
    para sincronizar datos en tiempo real.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: Endpoint RPC de Mainnet
  - url: https://devnet.helius-rpc.com
    description: Endpoint RPC de Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getProgramAccountsV2
      description: >
        Versión mejorada de getProgramAccounts con paginación basada en cursores
        y compatibilidad con changedSinceSlot para consultar de manera
        eficiente 

        grandes conjuntos de cuentas pertenecientes a programas específicos de
        Solana. Permite obtener datos de forma incremental con 

        tamaños de página configurables de hasta 10,000 cuentas por solicitud.
        El parámetro changedSinceSlot permite recuperar 

        únicamente las cuentas modificadas desde un slot específico de la
        blockchain, lo que resulta ideal para los flujos de trabajo de
        indexación y 

        sincronización de datos en tiempo real. Es esencial para aplicaciones
        que gestionan el descubrimiento de cuentas de programas a gran escala, 

        como protocolos DeFi, mercados de NFT y plataformas de análisis de
        blockchain.


        Nota: El fin de la paginación solo se indica cuando no se devuelve
        ninguna cuenta. La API puede devolver menos cuentas 

        que el límite debido al filtrado. Continúa la paginación hasta que
        paginationKey sea null.


        **withContext**: Booleano opcional en el objeto de configuración (junto
        con encoding, limit, etc.). Cuando 

        `withContext` es `true`, el RPC devuelve la estructura encapsulada
        estándar de Solana: `result.context` (metadatos de la 

        instantánea, incluidos `slot` y, por lo general, `apiVersion`) y
        `result.value`, que contiene `accounts`, `paginationKey`. 

        Cuando `withContext` es `false` o se omite, esos campos se devuelven
        directamente en `result`

        (por ejemplo, `result.accounts`). Los filtros, los límites y el
        comportamiento de paginación no cambian; solo difiere la estructura
        JSON 

        de `result`.
      operationId: getProgramAccountsV2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - jsonrpc
                - id
                - method
                - params
              properties:
                jsonrpc:
                  type: string
                  description: La versión del protocolo JSON-RPC.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Un identificador único para la solicitud.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: El nombre del método RPC que se invocará.
                  enum:
                    - getProgramAccountsV2
                  example: getProgramAccountsV2
                  default: getProgramAccountsV2
                params:
                  type: array
                  description: Parámetros del método paginado mejorado.
                  default:
                    - TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                    - encoding: base64
                      limit: 1000
                  items:
                    oneOf:
                      - type: string
                        description: >-
                          La clave pública (dirección) del programa de Solana
                          cuyas cuentas se consultarán, como una cadena
                          codificada en base 58.
                        example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                      - type: object
                        description: >-
                          Opciones de configuración mejoradas con compatibilidad
                          con paginación para optimizar las consultas de cuentas
                          de programas.
                        properties:
                          commitment:
                            type: string
                            description: El nivel de compromiso de la solicitud.
                            enum:
                              - confirmed
                              - finalized
                              - processed
                            example: finalized
                          minContextSlot:
                            type: integer
                            description: >-
                              El slot mínimo en el que puede evaluarse la
                              solicitud.
                            example: 1000
                          withContext:
                            type: boolean
                            description: >
                              Cuando es `true`, devuelve `result.context`
                              (metadatos de la instantánea: `slot`,
                              `apiVersion`) y anida

                              `accounts` y `paginationKey` en `result.value`.
                              Cuando es `false` o se omite,

                              esos campos aparecen directamente en `result` (por
                              ejemplo, `result.accounts`). Se aplican los mismos
                              filtros y límites.
                            example: true
                          encoding:
                            type: string
                            description: >-
                              Formato de codificación de los datos de cuenta
                              devueltos.
                            enum:
                              - jsonParsed
                              - base58
                              - base64
                              - base64+zstd
                            example: base64
                          dataSlice:
                            type: object
                            description: Solicita una sección de los datos de la cuenta.
                            properties:
                              length:
                                type: integer
                                description: Cantidad de bytes que se devolverán.
                                example: 50
                              offset:
                                type: integer
                                description: >-
                                  Desplazamiento en bytes desde el que se
                                  comenzará a leer.
                                example: 0
                          limit:
                            type: integer
                            description: >-
                              Cantidad máxima de cuentas que se devolverán por
                              solicitud (1-10,000).
                            minimum: 1
                            maximum: 10000
                            example: 1000
                          paginationKey:
                            type: string
                            description: >-
                              Cursor de paginación codificado en base 58 para
                              obtener las páginas siguientes. Usa el
                              paginationKey de la respuesta anterior.
                            example: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
                          changedSinceSlot:
                            type: integer
                            description: >-
                              Devuelve únicamente las cuentas modificadas en
                              este número de slot o después. Es útil para las
                              actualizaciones incrementales.
                            example: 12345678
                          filters:
                            type: array
                            description: >-
                              Potente sistema de filtrado para consultar de
                              manera eficiente patrones específicos de datos de
                              cuentas de Solana.
                            items:
                              oneOf:
                                - type: object
                                  description: >-
                                    Filtra cuentas de Solana por el tamaño
                                    exacto de sus datos en bytes.
                                  properties:
                                    dataSize:
                                      type: integer
                                      description: >-
                                        El tamaño exacto en bytes de los datos
                                        de la cuenta que se usará para el
                                        filtrado.
                                      example: 165
                                - type: object
                                  description: >-
                                    Filtra cuentas de Solana comparando datos en
                                    desplazamientos específicos de memoria (el
                                    filtro más potente).
                                  properties:
                                    memcmp:
                                      type: object
                                      description: >-
                                        Filtro de comparación de memoria para
                                        encontrar cuentas con patrones de datos
                                        específicos.
                                      properties:
                                        offset:
                                          type: integer
                                          description: >-
                                            Desplazamiento en bytes dentro de los
                                            datos de la cuenta en el que se
                                            realizará la comparación.
                                          example: 4
                                        bytes:
                                          type: string
                                          description: >-
                                            Datos codificados en base 58 que se
                                            compararán en la posición de
                                            desplazamiento especificada.
                                          example: 3Mc6vR
      responses:
        '200':
          description: Las cuentas de programas paginadas se recuperaron correctamente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: La versión del protocolo JSON-RPC.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Identificador que coincide con la solicitud.
                    example: '1'
                  result:
                    oneOf:
                      - $ref: '#/components/schemas/ProgramAccountsV2Page'
                        title: sin withContext
                      - type: object
                        title: con withContext
                        description: >-
                          Resultado encapsulado cuando `withContext` es `true`
                          en las opciones de la solicitud.
                        required:
                          - context
                          - value
                        properties:
                          context:
                            type: object
                            description: >-
                              Metadatos de la instantánea de la respuesta del
                              nodo (coherencia del slot, depuración).
                            properties:
                              slot:
                                type: integer
                                description: Slot en el que el nodo generó esta respuesta.
                                example: 411895550
                              apiVersion:
                                type: string
                                description: Versión de la API RPC cuando está disponible.
                                example: 3.1.9
                          value:
                            $ref: '#/components/schemas/ProgramAccountsV2Page'
        '400':
          description: >-
            Solicitud incorrecta: parámetros de solicitud no válidos o solicitud
            con formato incorrecto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Parámetros no válidos
                  data: {}
                id: '1'
        '401':
          description: 'No autorizado: la clave de API no es válida o no se proporcionó.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: No autorizado
                  data: {}
                id: '1'
        '429':
          description: 'Demasiadas solicitudes: se superó el límite de solicitudes.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Demasiadas solicitudes
                  data: {}
                id: '1'
        '500':
          description: 'Error interno del servidor: ocurrió un error en el servidor.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Error interno
                  data: {}
                id: '1'
        '503':
          description: >-
            Servicio no disponible: el servicio no está disponible
            temporalmente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Servicio no disponible
                  data: {}
                id: '1'
        '504':
          description: >-
            Tiempo de espera de la puerta de enlace agotado: se agotó el tiempo
            de espera de la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32003
                  message: Tiempo de espera de la puerta de enlace agotado
                  data: {}
                id: '1'
      security:
        - ApiKeyQuery: []
components:
  schemas:
    ProgramAccountsV2Page:
      type: object
      description: >-
        Cuentas de programas paginadas. Los mismos campos aparecen en result
        cuando withContext es false o se omite, o en result.value cuando
        withContext es true.
      properties:
        accounts:
          type: array
          description: Lista de cuentas de programas de la página actual.
          items:
            $ref: '#/components/schemas/ProgramAccountV2Entry'
        paginationKey:
          type: string
          description: >-
            Cursor de paginación para la página siguiente. Es null únicamente
            cuando no se devuelve ninguna cuenta (fin de la paginación). Ten en
            cuenta que pueden devolverse menos cuentas que el límite debido al
            filtrado, pero esto no indica el fin de la paginación.
          example: 8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
          nullable: true
    ErrorResponse:
      type: object
      properties:
        jsonrpc:
          type: string
          description: La versión del protocolo JSON-RPC.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: El código de error.
              example: -32602
            message:
              type: string
              description: El mensaje de error.
            data:
              type: object
              description: Datos adicionales sobre el error.
        id:
          type: string
          description: Identificador que coincide con la solicitud.
          example: '1'
    ProgramAccountV2Entry:
      type: object
      properties:
        pubkey:
          type: string
          description: La Pubkey de la cuenta como una cadena codificada en base 58.
          example: CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY
        account:
          type: object
          description: Detalles de la cuenta.
          properties:
            lamports:
              type: integer
              description: Cantidad de lamports asignados a esta cuenta.
              example: 15298080
            owner:
              type: string
              description: >-
                Pubkey codificada en base 58 del programa al que está asignada
                esta cuenta.
              example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
            data:
              type: array
              description: Datos de la cuenta como binario codificado o en formato JSON.
              items:
                type: string
              example:
                - 2R9jLfiAQ9bgdcw6h8s44439
                - base64
            executable:
              type: boolean
              description: Indica si la cuenta contiene un programa.
              example: false
            rentEpoch:
              type: integer
              description: La época en la que esta cuenta volverá a adeudar alquiler.
              example: 28
            space:
              type: integer
              description: El tamaño de los datos de la cuenta.
              example: 165
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Tu clave de API de Helius. Puedes obtener una gratis en el
        [panel](https://dashboard.helius.dev/api-keys).

````