> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Paginierung

> Funktionsweise der cursorbasierten Paginierung in der Devin API

Alle Listenendpunkte in der Organization-API und der Enterprise-API verwenden **cursorbasierte Paginierung**. Das sorgt für eine konsistente, effiziente Paginierung – unabhängig von der Größe der Ergebnismenge.

<div id="how-it-works">
  ## Funktionsweise
</div>

Jeder Listen-Endpunkt akzeptiert zwei Query-Parameter:

| Parameter | Typ     | Beschreibung                                                                                               |
| --------- | ------- | ---------------------------------------------------------------------------------------------------------- |
| `first`   | integer | Maximale Anzahl von Elementen pro Seite, die zurückgegeben werden (Standardwert variiert je nach Endpoint) |
| `after`   | string  | Opaker Cursor aus einer vorherigen Antwort. Für die erste Seite weglassen                                  |

<div id="response-format">
  ### Antwortformat
</div>

Antworten mit Listen enthalten Paginierungsmetadaten:

```json theme={null}
{
  "items": [...],
  "has_next_page": true,
  "end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
  "total": 142
}
```

| Field           | Beschreibung                                                                                                              |
| --------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `items`         | Array mit den Ergebnissen für die aktuelle Seite                                                                          |
| `has_next_page` | `true`, wenn es weitere Ergebnisse gibt                                                                                   |
| `end_cursor`    | Übergeben Sie diesen Wert als `after`-Parameter, um die nächste Seite abzurufen. `null`, wenn `has_next_page` `false` ist |
| `total`         | Gesamtzahl der übereinstimmenden Einträge (kann bei einigen Endpunkten aus Performancegründen ausgelassen werden)         |

<div id="example-paginating-through-sessions">
  ## Beispiel: Sitzungen seitenweise abrufen
</div>

<div id="first-page">
  ### Erste Seite
</div>

```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

<div id="next-page">
  ### Nächste Seite
</div>

Verwenden Sie den Wert `end_cursor` aus der vorherigen Antwort:

```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

<div id="collecting-all-results">
  ### Alle Ergebnisse abrufen
</div>

```python theme={null}
import os
import requests

org_id = os.environ["DEVIN_ORG_ID"]
url = f"https://api.devin.ai/v3/organizations/{org_id}/sessions"
headers = {"Authorization": f"Bearer {os.environ['DEVIN_API_KEY']}"}
all_sessions = []
cursor = None

while True:
    params = {"first": 50}
    if cursor:
        params["after"] = cursor

    response = requests.get(url, headers=headers, params=params).json()
    all_sessions.extend(response["items"])

    if not response.get("has_next_page"):
        break
    cursor = response["end_cursor"]

print(f"Fetched {len(all_sessions)} sessions")
```

<div id="migrating-from-offset-based-pagination">
  ## Migration von offset-basierter Paginierung
</div>

Wenn Sie von API v1 oder v2 migrieren, ersetzen Sie `offset`/`limit` durch `after`/`first`:

```bash theme={null}
# Vorher (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"

# Nachher
curl ".../v3/organizations/{org_id}/sessions?first=25&after=CURSOR_FROM_PREVIOUS_PAGE"
```

Cursorbasierte Paginierung ist zuverlässiger als offset-basierte Paginierung, weil sie nicht dadurch beeinflusst wird, dass zwischen den Seiten Einträge hinzugefügt oder entfernt werden.
