> ## 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 ist eine erweiterte Version von getProgramAccounts mit cursorbasierter Paginierung und changedSinceSlot-Updates zur Abfrage großer Solana-Kontensätze.

## Übersicht

`getProgramAccountsV2` ist eine erweiterte Version der standardmäßigen `getProgramAccounts`-Methode, die für Anwendungen entwickelt wurde, die effizient große Sätze von Konten abfragen müssen, die bestimmten Solana-Programmen gehören. Diese Methode führt eine cursorbasierte Paginierung und inkrementelle Aktualisierungsfunktionen ein.

<Info>
  **Neue Funktionen in V2:**

  * **Cursorbasierte Paginierung**: Konfigurieren Sie Limits von 1 bis 10.000 Konten pro Anfrage
  * **Inkrementelle Updates**: Verwenden Sie `changedSinceSlot`, um nur kürzlich geänderte Konten abzurufen
  * **Bessere Leistung**: Verhindert Zeitüberschreitungen und reduziert den Speicherbedarf bei großen Datensätzen
  * **Rückwärtskompatibilität**: Unterstützt alle vorhandenen `getProgramAccounts`-Parameter
  * **Optionale `withContext`**: `true` fügt `slot` und `apiVersion` unter `result.context` hinzu; weglassen oder `false` und sie sind nicht enthalten
</Info>

## Hauptvorteile

<CardGroup cols={2}>
  <Card title="Skalierbare Abfragen" icon="chart-line">
    Verarbeiten Sie Programme mit Millionen von Konten, indem Sie effizient durch die Ergebnisse paginieren
  </Card>

  <Card title="Echtzeit-Synchronisierung" icon="arrows-rotate">
    Verwenden Sie `changedSinceSlot` für inkrementelle Updates und Echtzeit-Datensynchronisierung
  </Card>

  <Card title="Vermeidung von Zeitüberschreitungen" icon="clock">
    Große Abfragen, die zuvor Zeitüberschreitungen verursacht haben, funktionieren jetzt zuverlässig mit Paginierung
  </Card>

  <Card title="Speichereffizient" icon="microchip">
    Verarbeiten Sie Daten in Teilen statt alles auf einmal in den Speicher zu laden
  </Card>
</CardGroup>

## Paginierungs-Best Practices

<Warning>
  **Wichtiges Paginierungsverhalten**: Das Ende der Paginierung wird nur angezeigt, wenn **keine Konten zurückgegeben werden**. Die API kann weniger Konten als Ihr Limit zurückgeben aufgrund von Filterung - setzen Sie die Paginierung immer fort, bis `paginationKey` `null` ist.
</Warning>

### Grundlegendes Paginationsmuster

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

### Inkrementelle Updates

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

## Leistungstipps

<Tip>
  **Optimale Limitgröße**: Für die meisten Anwendungsfälle bietet ein Limit von 1.000-5.000 Konten pro Anfrage die beste Balance zwischen Leistung und Zuverlässigkeit.
</Tip>

* **Mit kleineren Limits beginnen** (1000) und basierend auf der Netzwerkleistung erhöhen
* **Geeignete Codierung verwenden**: `jsonParsed` für Bequemlichkeit, `base64` für Leistung
* **Filter anwenden**, um die Datensatzgröße vor der Paginierung zu reduzieren
* **`paginationKey` speichern**, um Abfragen bei Unterbrechung fortzusetzen
* **Antwortzeiten überwachen** und Limits entsprechend anpassen

## `withContext` (optional)

Boolean im Programmkonfigurationsobjekt (`params[1]`). Nur die Form von `result` ändert sich, nicht die Filter, Limits oder Paginierungen.

```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 von getProgramAccounts

Die Migration von der ursprünglichen Methode ist einfach - ersetzen Sie einfach den Methodennamen und fügen Sie Paginierungsparameter hinzu:

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

## Verwandte Methoden

<CardGroup cols={2}>
  <Card title="getProgramAccounts" icon="code" href="/docs/de/api-reference/rpc/http/getprogramaccounts">
    Ursprüngliche Methode ohne Paginierung
  </Card>

  <Card title="getTokenAccountsByOwnerV2" icon="wallet" href="/docs/de/api-reference/rpc/http/gettokenaccountsbyownerv2">
    V2-Methode für Token-Kontoanfragen
  </Card>
</CardGroup>

## Anforderungsparameter

<ParamField body="address" type="string" required>
  Der öffentliche Schlüssel (Adresse) des Solana-Programms zur Abfrage von Konten, als base-58 codierter String.
</ParamField>

<ParamField body="commitment" type="string">
  Das Commitment-Level für die Anfrage.

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

<ParamField body="minContextSlot" type="number">
  Der minimale Slot, bei dem die Anfrage ausgewertet werden kann.
</ParamField>

<ParamField body="withContext" type="boolean">
  Wenn `true`, wird `result.context` (Snapshot-Metadaten: `slot`, `apiVersion`) zurückgegeben und
  `accounts` und `paginationKey` werden unter `result.value` verschachtelt. Wenn `false` oder weggelassen,
  erscheinen diese Felder direkt auf `result` (zum Beispiel `result.accounts`). Dieselben Filter und Limits gelten.
</ParamField>

<ParamField body="encoding" type="string">
  Das Codierungsformat für die zurückgegebenen Kontodaten.

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

<ParamField body="dataSlice" type="object">
  Fordern Sie einen Ausschnitt der Kontodaten an.
</ParamField>

<ParamField body="dataSlice.length" type="number">
  Anzahl der zurückzugebenden Byte.
</ParamField>

<ParamField body="dataSlice.offset" type="number">
  Byte-Offset, von dem aus das Lesen beginnen soll.
</ParamField>

<ParamField body="limit" type="number">
  Maximale Anzahl von Konten, die pro Anfrage zurückgegeben werden (1-10.000).
</ParamField>

<ParamField body="paginationKey" type="string">
  Base-58 codierter Paginierungs-Cursor zum Abrufen nachfolgender Seiten. Verwenden Sie den paginationKey aus der vorherigen Antwort.
</ParamField>

<ParamField body="changedSinceSlot" type="number">
  Nur Konten zurückgeben, die bei oder nach dieser Slot-Nummer geändert wurden. Nützlich für inkrementelle Updates.
</ParamField>

<ParamField body="filters" type="array">
  Leistungsfähiges Filtersystem zur effizienten Abfrage spezifischer Solana-Kontodatensätze.
</ParamField>


## OpenAPI

````yaml de/openapi/rpc-http/getProgramAccountsV2.yaml POST /
openapi: 3.1.0
info:
  title: Solana RPC API
  version: 1.0.0
  description: >-
    Erweiterte Solana-Programmkonten-Indexierungs-API mit Cursor-basierter
    Paginierung und Unterstützung für changedSinceSlot, um große Mengen von
    Konten effizient abzufragen, die von bestimmten Programmen verwaltet werden.
    Unterstützt inkrementelle Updates durch Slot-basierte Filterung für
    Echtzeit-Datensynchronisation.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: Mainnet-RPC-Endpunkt
  - url: https://devnet.helius-rpc.com
    description: Devnet-RPC-Endpunkt
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getProgramAccountsV2
      description: >
        Erweiterte Version von getProgramAccounts mit Cursor-basierter
        Paginierung und Unterstützung für changedSinceSlot, um große Mengen von
        Konten effizient abzufragen, die von bestimmten Solana-Programmen
        verwaltet werden. Ermöglicht inkrementelles Abrufen von Daten mit
        konfigurierbaren Seitengrößen von bis zu 10.000 Konten pro Anfrage. Der
        changedSinceSlot-Parameter ermöglicht das Abrufen nur der seit einem
        bestimmten Blockchain-Slot geänderten Konten, perfekt für
        Echtzeit-Indizierung und Datensynchronisations-Workflows. Wesentlich für
        Anwendungen, die sich mit der Entdeckung von groß angelegten
        Programmkonten befassen, wie DeFi-Protokolle, NFT-Marktplätze und
        Blockchain-Analysetools.


        Hinweis: Das Ende der Paginierung wird nur angezeigt, wenn keine Konten
        zurückgegeben werden. Die API kann aufgrund der Filterung weniger Konten
        als die Grenze zurückgeben - paginieren Sie weiter, bis paginationKey
        null ist.


        **withContext**: Optionaler Boolean im Konfigurationsobjekt (neben
        encoding, limit usw.). Wenn `withContext` `true` ist, gibt der RPC die
        standardmäßige Solana-umrahmte Form zurück: `result.context`
        (Snapshot-Metadaten, einschließlich `slot` und normalerweise
        `apiVersion`) und `result.value`, das `accounts`, `paginationKey`
        enthält. Wenn `withContext` `false` oder weggelassen wird, werden diese
        Felder direkt unter `result` zurückgegeben (zum Beispiel
        `result.accounts`). Filter, Grenzen und Paginierungsverhalten bleiben
        unverändert; nur die JSON-Form von `result` unterscheidet sich.
      operationId: getProgramAccountsV2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - jsonrpc
                - id
                - method
                - params
              properties:
                jsonrpc:
                  type: string
                  description: Die JSON-RPC-Protokollversion.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Ein eindeutiger Bezeichner für die Anfrage.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: Der Name der aufzurufenden RPC-Methode.
                  enum:
                    - getProgramAccountsV2
                  example: getProgramAccountsV2
                  default: getProgramAccountsV2
                params:
                  type: array
                  description: Parameter für die erweiterte paginierte Methode.
                  default:
                    - TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                    - encoding: base64
                      limit: 1000
                  items:
                    oneOf:
                      - type: string
                        description: >-
                          Der Solana-Programm-Public-Key (Adresse), für den
                          Konten abgefragt werden sollen, als base-58 kodierte
                          Zeichenkette.
                        example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
                      - type: object
                        description: >-
                          Erweiterte Konfigurationsoptionen mit Unterstützung
                          für Paginierung zur Optimierung von
                          Programm-Kontoabfragen.
                        properties:
                          commitment:
                            type: string
                            description: Das Commitment-Level für die Anfrage.
                            enum:
                              - confirmed
                              - finalized
                              - processed
                            example: finalized
                          minContextSlot:
                            type: integer
                            description: >-
                              Der minimale Slot, auf den die Anfrage evaluiert
                              werden kann.
                            example: 1000
                          withContext:
                            type: boolean
                            description: >
                              Wenn `true`, werden `result.context`
                              (Snapshot-Metadaten: `slot`, `apiVersion`)
                              zurückgegeben und

                              `accounts` sowie `paginationKey` unter
                              `result.value` verschachtelt. Wenn `false` oder
                              weggelassen,

                              werden diese Felder direkt unter `result`
                              zurückgegeben (zum Beispiel `result.accounts`). Es
                              gelten dieselben Filter und Grenzen.
                            example: true
                          encoding:
                            type: string
                            description: >-
                              Kodierungsformat für die zurückgegebenen
                              Kontodaten.
                            enum:
                              - jsonParsed
                              - base58
                              - base64
                              - base64+zstd
                            example: base64
                          dataSlice:
                            type: object
                            description: Fordern Sie einen Ausschnitt der Kontodaten an.
                            properties:
                              length:
                                type: integer
                                description: Anzahl der zurückgegebenen Bytes.
                                example: 50
                              offset:
                                type: integer
                                description: >-
                                  Byte-Offset, ab dem mit dem Lesen begonnen
                                  wird.
                                example: 0
                          limit:
                            type: integer
                            description: >-
                              Maximale Anzahl zurückzugebender Konten pro
                              Anfrage (1-10.000).
                            minimum: 1
                            maximum: 10000
                            example: 1000
                          paginationKey:
                            type: string
                            description: >-
                              Base-58 kodierter Paginierungscursor zum Abrufen
                              nachfolgender Seiten. Verwenden Sie den
                              paginationKey aus der vorherigen Antwort.
                            example: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
                          changedSinceSlot:
                            type: integer
                            description: >-
                              Nur Konten zurückgeben, die ab dieser Slotnummer
                              geändert wurden. Nützlich für inkrementelle
                              Updates.
                            example: 12345678
                          filters:
                            type: array
                            description: >-
                              Leistungsstarkes Filtersystem zur effizienten
                              Abfrage spezifischer Solana-Kontodatenmuster.
                            items:
                              oneOf:
                                - type: object
                                  description: >-
                                    Filtern von Solana-Konten nach ihrer genauen
                                    Datengröße in Bytes.
                                  properties:
                                    dataSize:
                                      type: integer
                                      description: >-
                                        Die genaue Größe der Kontodaten in Bytes
                                        zur Filterung.
                                      example: 165
                                - type: object
                                  description: >-
                                    Filtern von Solana-Konten durch Vergleich
                                    von Daten an bestimmten Speicher-Offsets
                                    (leistungsstärkster Filter).
                                  properties:
                                    memcmp:
                                      type: object
                                      description: >-
                                        Speichervergleichsfilter zum Auffinden
                                        von Konten mit spezifischen
                                        Datenmustern.
                                      properties:
                                        offset:
                                          type: integer
                                          description: >-
                                            Byte-Offset innerhalb der Kontodaten zur
                                            Durchführung des Vergleichs.
                                          example: 4
                                        bytes:
                                          type: string
                                          description: >-
                                            Base-58 kodierte Daten zum Vergleich an
                                            der angegebenen Offset-Position.
                                          example: 3Mc6vR
      responses:
        '200':
          description: Erfolgreich paginierte Programmkonten abgerufen.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: Die JSON-RPC-Protokollversion.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Kennung, die der Anfrage entspricht.
                    example: '1'
                  result:
                    oneOf:
                      - $ref: '#/components/schemas/ProgramAccountsV2Page'
                        title: ohne withContext
                      - type: object
                        title: mit withContext
                        description: >-
                          Umrahmtes Ergebnis, wenn `withContext` in den
                          Anforderungsoptionen `true` ist.
                        required:
                          - context
                          - value
                        properties:
                          context:
                            type: object
                            description: >-
                              Snapshot-Metadaten für die Knotenantwort
                              (Slots-Konsistenz, Debugging).
                            properties:
                              slot:
                                type: integer
                                description: >-
                                  Slot, bei dem der Knoten diese Antwort
                                  erstellt hat.
                                example: 411895550
                              apiVersion:
                                type: string
                                description: RPC-API-Version, wenn verfügbar.
                                example: 3.1.9
                          value:
                            $ref: '#/components/schemas/ProgramAccountsV2Page'
        '400':
          description: >-
            Ungültige Anfrage - Ungültige Anforderungsparameter oder fehlerhafte
            Anfrage.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Ungültige Parameter
                  data: {}
                id: '1'
        '401':
          description: Nicht autorisiert - Ungültiger oder fehlender API-Schlüssel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Nicht autorisiert
                  data: {}
                id: '1'
        '429':
          description: Zu viele Anfragen - Ratenlimit überschritten.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Zu viele Anfragen
                  data: {}
                id: '1'
        '500':
          description: Interner Serverfehler - Ein Fehler ist auf dem Server aufgetreten.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Interner Fehler
                  data: {}
                id: '1'
        '503':
          description: >-
            Dienst nicht verfügbar - Der Dienst ist vorübergehend nicht
            verfügbar.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Dienst nicht verfügbar
                  data: {}
                id: '1'
        '504':
          description: Gateway-Zeitüberschreitung - Die Anfrage hat zu lange gedauert.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32003
                  message: Gateway-Timeout
                  data: {}
                id: '1'
      security:
        - ApiKeyQuery: []
components:
  schemas:
    ProgramAccountsV2Page:
      type: object
      description: >-
        Paginierte Programmkonten. Dieselben Felder erscheinen im Ergebnis, wenn
        withContext falsch oder weggelassen wird, oder unter result.value, wenn
        withContext wahr ist.
      properties:
        accounts:
          type: array
          description: Liste der Programmkonten für die aktuelle Seite.
          items:
            $ref: '#/components/schemas/ProgramAccountV2Entry'
        paginationKey:
          type: string
          description: >-
            Paginierungscursor für die nächste Seite. Nur null, wenn keine
            Konten zurückgegeben werden (Ende der Paginierung). Beachten Sie,
            dass aufgrund der Filterung weniger Konten als die Grenze
            zurückgegeben werden können, dies jedoch nicht das Ende der
            Paginierung anzeigt.
          example: 8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
          nullable: true
    ErrorResponse:
      type: object
      properties:
        jsonrpc:
          type: string
          description: Die JSON-RPC-Protokollversion.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: Der Fehlercode.
              example: -32602
            message:
              type: string
              description: Die Fehlermeldung.
            data:
              type: object
              description: Zusätzliche Daten über den Fehler.
        id:
          type: string
          description: Kennung, die der Anfrage entspricht.
          example: '1'
    ProgramAccountV2Entry:
      type: object
      properties:
        pubkey:
          type: string
          description: Der Konto-Pubkey als base-58 kodierte Zeichenkette.
          example: CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY
        account:
          type: object
          description: Details über das Konto.
          properties:
            lamports:
              type: integer
              description: Anzahl der diesem Konto zugewiesenen Lamports.
              example: 15298080
            owner:
              type: string
              description: >-
                Base-58 kodierter Pubkey des Programms, dem dieses Konto
                zugewiesen ist.
              example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
            data:
              type: array
              description: Kontodaten als kodiertes Binär- oder JSON-Format.
              items:
                type: string
              example:
                - 2R9jLfiAQ9bgdcw6h8s44439
                - base64
            executable:
              type: boolean
              description: Zeigt an, ob das Konto ein Programm enthält.
              example: false
            rentEpoch:
              type: integer
              description: Die Epoche, in der dieses Konto das nächste Mal Miete schuldet.
              example: 28
            space:
              type: integer
              description: Die Datengröße des Kontos.
              example: 165
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Ihr Helius-API-Schlüssel. Sie können einen kostenlos im
        [Dashboard](https://dashboard.helius.dev/api-keys) erhalten.

````