> ## 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 est une version améliorée de getProgramAccounts avec pagination par curseur et mises à jour changedSinceSlot pour interroger de grands ensembles de comptes Solana.

## Vue d'ensemble

`getProgramAccountsV2` est une version améliorée de la méthode standard `getProgramAccounts`, conçue pour les applications qui ont besoin de consulter efficacement de grands ensembles de comptes appartenant à des programmes Solana spécifiques. Cette méthode introduit des capacités de pagination par curseur et de mise à jour incrémentielle.

<Info>
  **Nouvelles fonctionnalités dans la version V2 :**

  * **Pagination par curseur** : Configurez des limites de 1 à 10 000 comptes par requête
  * **Mises à jour incrémentielles** : Utilisez `changedSinceSlot` pour récupérer uniquement les comptes récemment modifiés
  * **Meilleure performance** : Évite les dépassements de délai et réduit l'utilisation de la mémoire pour les grands ensembles de données
  * **Compatibilité ascendante** : Prend en charge tous les paramètres existants `getProgramAccounts`
  * **Optionnel `withContext`** : `true` ajoute `slot` et `apiVersion` sous `result.context`; omettez ou `false` et ils ne sont pas inclus
</Info>

## Principaux avantages

<CardGroup cols={2}>
  <Card title="Requêtes évolutives" icon="chart-line">
    Gérez des programmes avec des millions de comptes en paginant efficacement les résultats
  </Card>

  <Card title="Synchronisation en temps réel" icon="arrows-rotate">
    Utilisez `changedSinceSlot` pour les mises à jour incrémentielles et la synchronisation des données en temps réel
  </Card>

  <Card title="Prévenir les dépassements de délai" icon="clock">
    Les grandes requêtes qui expirent désormais fonctionnent de manière fiable avec la pagination
  </Card>

  <Card title="Efficacité de la mémoire" icon="microchip">
    Traitez les données par morceaux au lieu de tout charger en mémoire d'un seul coup
  </Card>
</CardGroup>

## Bonnes pratiques de pagination

<Warning>
  **Comportement important de la pagination** : La fin de la pagination n'est indiquée que lorsque **aucun compte n'est retourné**. L'API peut retourner moins de comptes que votre limite en raison du filtrage - continuez toujours la pagination jusqu'à ce que `paginationKey` soit `null`.
</Warning>

### Modèle de pagination de base

```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);
```

### Mises à jour incrémentielles

```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
      }
    ]
  })
});
```

## Conseils de performance

<Tip>
  **Taille limite optimale** : Pour la plupart des cas d'utilisation, une limite de 1 000 à 5 000 comptes par requête offre le meilleur équilibre entre performance et fiabilité.
</Tip>

* **Commencez avec des limites plus petites** (1000) et augmentez selon les performances de votre réseau
* **Utilisez un encodage approprié** : `jsonParsed` pour la commodité, `base64` pour la performance
* **Appliquez des filtres** pour réduire la taille du jeu de données avant la pagination
* **Stockez `paginationKey`** pour reprendre les requêtes en cas d'interruption
* **Surveillez les temps de réponse** et ajustez les limites en conséquence

## `withContext` (optionnel)

Booléen sur l'objet de configuration du programme (`params[1]`). Seule la forme de `result` change, pas les filtres, limites ou pagination.

```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 }
}}
```

## Migration depuis getProgramAccounts

La migration depuis la méthode originale est simple - remplacez simplement le nom de la méthode et ajoutez des paramètres de pagination :

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

## Méthodes connexes

<CardGroup cols={2}>
  <Card title="getProgramAccounts" icon="code" href="/docs/fr/api-reference/rpc/http/getprogramaccounts">
    Méthode originale sans pagination
  </Card>

  <Card title="getTokenAccountsByOwnerV2" icon="wallet" href="/docs/fr/api-reference/rpc/http/gettokenaccountsbyownerv2">
    Méthode V2 pour les requêtes de comptes de jetons
  </Card>
</CardGroup>

## Paramètres de la requête

<ParamField body="address" type="string" required>
  La clé publique (adresse) du programme Solana pour interroger les comptes, en tant que chaîne encodée en base-58.
</ParamField>

<ParamField body="commitment" type="string">
  Le niveau d'engagement pour la requête.

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

<ParamField body="minContextSlot" type="number">
  Le slot minimum auquel la requête peut être évaluée.
</ParamField>

<ParamField body="withContext" type="boolean">
  Lorsque `true`, retourne `result.context` (métadonnées instantanées : `slot`, `apiVersion`) et imbrique
  `accounts` et `paginationKey` sous `result.value`. Lorsque `false` ou omis,
  ces champs apparaissent directement sur `result` (par exemple `result.accounts`). Les mêmes filtres et limites s'appliquent.
</ParamField>

<ParamField body="encoding" type="string">
  Format d'encodage pour les données de compte retournées.

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

<ParamField body="dataSlice" type="object">
  Demander une tranche des données du compte.
</ParamField>

<ParamField body="dataSlice.length" type="number">
  Nombre d'octets à retourner.
</ParamField>

<ParamField body="dataSlice.offset" type="number">
  Décalage en octets à partir duquel commencer la lecture.
</ParamField>

<ParamField body="limit" type="number">
  Nombre maximum de comptes à retourner par requête (1-10 000).
</ParamField>

<ParamField body="paginationKey" type="string">
  Curseur de pagination encodé en base-58 pour récupérer les pages suivantes. Utilisez le paginationKey de la réponse précédente.
</ParamField>

<ParamField body="changedSinceSlot" type="number">
  Ne retournez que les comptes modifiés à partir de ce numéro de slot. Utile pour les mises à jour incrémentielles.
</ParamField>

<ParamField body="filters" type="array">
  Système de filtrage puissant pour interroger efficacement des modèles de données de comptes Solana spécifiques.
</ParamField>


## OpenAPI

````yaml fr/openapi/rpc-http/getProgramAccountsV2.yaml POST /
openapi: 3.1.0
info:
  title: Solana RPC API
  version: 1.0.0
  description: >-
    API d'indexation de comptes de programme Solana améliorée avec pagination
    basée sur le curseur et support de changedSinceSlot pour interroger
    efficacement de grands ensembles de comptes détenus par des programmes
    spécifiques. Prend en charge les mises à jour incrémentielles via le
    filtrage basé sur les slots pour la synchronisation des données en temps
    réel.
  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 Mainnet
  - url: https://devnet.helius-rpc.com
    description: Endpoint RPC Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getProgramAccountsV2
      description: >
        Version améliorée de getProgramAccounts avec pagination basée sur le
        curseur et support de changedSinceSlot pour interroger efficacement

        de grands ensembles de comptes détenus par des programmes Solana
        spécifiques. Permet une récupération de données 

        incrémentielle avec des tailles de page configurables jusqu'à 10 000
        comptes par requête. Le paramètre changedSinceSlot permet de récupérer 

        uniquement les comptes modifiés depuis un slot de blockchain spécifique,
        idéal pour l'indexation en temps réel et les flux de 

        travail de synchronisation des données. Essentiel pour les applications
        traitant de la découverte de comptes de programme à grande échelle 

        tels que les protocoles DeFi, les places de marché NFT et les
        plateformes d'analyse blockchain.


        Note : La fin de la pagination n'est indiquée que lorsque aucun compte
        n'est retourné. L'API peut retourner moins de comptes 

        que la limite en raison du filtrage - continuez la pagination jusqu'à ce
        que paginationKey soit nul.


        **withContext**: Option booléenne facultative sur l'objet de
        configuration (en plus de encoding, limit, etc.). Lorsque 

        `withContext` est `true`, le RPC retourne la forme standard enveloppée
        de Solana : `result.context` (métadonnées de 

        instantané, y compris `slot` et généralement `apiVersion`) et
        `result.value` contenant `accounts`, `paginationKey`, 

        Lorsque `withContext` est `false` ou omis, ces champs sont retournés
        directement sur `result`

        (par exemple `result.accounts`). Les filtres, les limites et le
        comportement de pagination restent inchangés ; seule la forme 

        JSON de `result` diffère.
      operationId: getProgramAccountsV2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - jsonrpc
                - id
                - method
                - params
              properties:
                jsonrpc:
                  type: string
                  description: La version du protocole JSON-RPC.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Un identifiant unique pour la requête.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: Le nom de la méthode RPC à invoquer.
                  enum:
                    - getProgramAccountsV2
                  example: getProgramAccountsV2
                  default: getProgramAccountsV2
                params:
                  type: array
                  description: Paramètres pour la méthode paginée améliorée.
                  default:
                    - TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                    - encoding: base64
                      limit: 1000
                  items:
                    oneOf:
                      - type: string
                        description: >-
                          La clé publique du programme Solana (adresse) pour
                          interroger les comptes, sous forme de chaîne encodée
                          en base-58.
                        example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                      - type: object
                        description: >-
                          Options de configuration améliorées avec prise en
                          charge de la pagination pour optimiser les requêtes de
                          comptes de programme.
                        properties:
                          commitment:
                            type: string
                            description: Le niveau d'engagement pour la requête.
                            enum:
                              - confirmed
                              - finalized
                              - processed
                            example: finalized
                          minContextSlot:
                            type: integer
                            description: >-
                              Le slot minimum auquel la requête peut être
                              évaluée.
                            example: 1000
                          withContext:
                            type: boolean
                            description: >
                              Lorsque `true`, retourne `result.context`
                              (métadonnées de l'instantané : `slot`,
                              `apiVersion`) et niche 

                              `accounts` et `paginationKey` sous `result.value`.
                              Lorsque `false` ou omis, 

                              ces champs apparaissent directement sur `result`
                              (par exemple `result.accounts`). Les mêmes filtres
                              et limites s'appliquent.
                            example: true
                          encoding:
                            type: string
                            description: >-
                              Format d'encodage des données de compte
                              retournées.
                            enum:
                              - jsonParsed
                              - base58
                              - base64
                              - base64+zstd
                            example: base64
                          dataSlice:
                            type: object
                            description: Demandez une tranche des données du compte.
                            properties:
                              length:
                                type: integer
                                description: Nombre d'octets à retourner.
                                example: 50
                              offset:
                                type: integer
                                description: >-
                                  Décalage d'octet à partir duquel commencer la
                                  lecture.
                                example: 0
                          limit:
                            type: integer
                            description: >-
                              Nombre maximum de comptes à retourner par requête
                              (1-10,000).
                            minimum: 1
                            maximum: 10000
                            example: 1000
                          paginationKey:
                            type: string
                            description: >-
                              Curseur de pagination encodé en base-58 pour
                              récupérer les pages suivantes. Utilisez le
                              paginationKey de la réponse précédente.
                            example: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
                          changedSinceSlot:
                            type: integer
                            description: >-
                              Retourne uniquement les comptes qui ont été
                              modifiés à ce numéro de slot ou après. Utile pour
                              les mises à jour incrémentielles.
                            example: 12345678
                          filters:
                            type: array
                            description: >-
                              Système de filtrage puissant pour interroger
                              efficacement des modèles de données spécifiques de
                              comptes Solana.
                            items:
                              oneOf:
                                - type: object
                                  description: >-
                                    Filtrer les comptes Solana par leur taille
                                    de données exacte en octets.
                                  properties:
                                    dataSize:
                                      type: integer
                                      description: >-
                                        La taille exacte des données du compte
                                        en octets pour le filtrage.
                                      example: 165
                                - type: object
                                  description: >-
                                    Filtrer les comptes Solana en comparant les
                                    données à des décalages de mémoire
                                    spécifiques (filtre le plus puissant).
                                  properties:
                                    memcmp:
                                      type: object
                                      description: >-
                                        Filtre de comparaison de mémoire pour
                                        trouver des comptes avec des modèles de
                                        données spécifiques.
                                      properties:
                                        offset:
                                          type: integer
                                          description: >-
                                            Décalage d'octet dans les données du
                                            compte pour effectuer la comparaison.
                                          example: 4
                                        bytes:
                                          type: string
                                          description: >-
                                            Données encodées en base-58 à comparer à
                                            la position de décalage spécifiée.
                                          example: 3Mc6vR
      responses:
        '200':
          description: Program accounts paginés récupérés avec succès.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: La version du protocole JSON-RPC.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Identifiant correspondant à la requête.
                    example: '1'
                  result:
                    oneOf:
                      - $ref: '#/components/schemas/ProgramAccountsV2Page'
                        title: sans withContext
                      - type: object
                        title: avec withContext
                        description: >-
                          Résultat enveloppé lorsque `withContext` est `true`
                          dans les options de la requête.
                        required:
                          - context
                          - value
                        properties:
                          context:
                            type: object
                            description: >-
                              Métadonnées de l'instantané pour la réponse du
                              nœud (cohérence des slots, débogage).
                            properties:
                              slot:
                                type: integer
                                description: Slot auquel le nœud a construit cette réponse.
                                example: 411895550
                              apiVersion:
                                type: string
                                description: Version de l'API RPC lorsque disponible.
                                example: 3.1.9
                          value:
                            $ref: '#/components/schemas/ProgramAccountsV2Page'
        '400':
          description: >-
            Requête incorrecte - Paramètres de requête invalides ou requête mal
            formée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Paramètres invalides
                  data: {}
                id: '1'
        '401':
          description: Non autorisé - Clé API invalide ou manquante.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Non autorisé
                  data: {}
                id: '1'
        '429':
          description: Trop de requêtes - Limite de débit dépassée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Trop de requêtes
                  data: {}
                id: '1'
        '500':
          description: >-
            Erreur interne du serveur - Une erreur s'est produite sur le
            serveur.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Erreur interne
                  data: {}
                id: '1'
        '503':
          description: Service indisponible - Le service est temporairement indisponible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Service indisponible
                  data: {}
                id: '1'
        '504':
          description: Délai d'attente de la passerelle - La requête a expiré.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32003
                  message: Délai d'attente de la passerelle
                  data: {}
                id: '1'
      security:
        - ApiKeyQuery: []
components:
  schemas:
    ProgramAccountsV2Page:
      type: object
      description: >-
        Comptes de programme paginés. Les mêmes champs apparaissent dans le
        résultat lorsque withContext est faux ou omis, ou sous result.value
        lorsque withContext est vrai.
      properties:
        accounts:
          type: array
          description: Liste des comptes de programme pour la page en cours.
          items:
            $ref: '#/components/schemas/ProgramAccountV2Entry'
        paginationKey:
          type: string
          description: >-
            Curseur de pagination pour la page suivante. Nul seulement lorsque
            aucun compte n'est retourné (fin de la pagination). Notez que moins
            de comptes que la limite peuvent être retournés en raison du
            filtrage, mais cela n'indique pas la fin de la pagination.
          example: 8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
          nullable: true
    ErrorResponse:
      type: object
      properties:
        jsonrpc:
          type: string
          description: La version du protocole JSON-RPC.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: Le code d'erreur.
              example: -32602
            message:
              type: string
              description: Le message d'erreur.
            data:
              type: object
              description: Données supplémentaires sur l'erreur.
        id:
          type: string
          description: Identifiant correspondant à la requête.
          example: '1'
    ProgramAccountV2Entry:
      type: object
      properties:
        pubkey:
          type: string
          description: Le Pubkey du compte sous forme de chaîne encodée en base-58.
          example: CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY
        account:
          type: object
          description: Détails sur le compte.
          properties:
            lamports:
              type: integer
              description: Nombre de lamports assignés à ce compte.
              example: 15298080
            owner:
              type: string
              description: >-
                Pubkey encodé en base-58 du programme auquel ce compte est
                assigné.
              example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
            data:
              type: array
              description: Données de compte sous forme encodée binaire ou format JSON.
              items:
                type: string
              example:
                - 2R9jLfiAQ9bgdcw6h8s44439
                - base64
            executable:
              type: boolean
              description: Indique si le compte contient un programme.
              example: false
            rentEpoch:
              type: integer
              description: L'époque à laquelle ce compte devra à nouveau payer un loyer.
              example: 28
            space:
              type: integer
              description: La taille des données du compte.
              example: 165
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Votre clé API Helius. Vous pouvez en obtenir une gratuitement dans le
        [dashboard](https://dashboard.helius.dev/api-keys).

````