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

# Pagination

> Fonctionnement de la pagination par curseur dans l'API Devin

Tous les endpoints de liste dans les API Organization et Enterprise utilisent la **pagination par curseur**. Elle offre une pagination cohérente et efficace, quelle que soit la taille du jeu de résultats.

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

Chaque endpoint de liste accepte deux paramètres de requête :

| Paramètre | Type    | Description                                                                                 |
| --------- | ------- | ------------------------------------------------------------------------------------------- |
| `first`   | integer | Nombre maximal d’éléments à renvoyer par page (la valeur par défaut varie selon l’endpoint) |
| `after`   | string  | Curseur opaque provenant d’une réponse précédente. À omettre pour la première page          |

<div id="response-format">
  ### Format de réponse
</div>

Les réponses de type liste incluent des métadonnées de pagination :

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

| Champ           | Description                                                                                                        |
| --------------- | ------------------------------------------------------------------------------------------------------------------ |
| `items`         | Liste de résultats pour la page actuelle                                                                           |
| `has_next_page` | `true` s'il y a d'autres résultats                                                                                 |
| `end_cursor`    | Passez cette valeur en paramètre `after` pour obtenir la page suivante. `null` lorsque `has_next_page` est `false` |
| `total`         | Nombre total d'éléments correspondants (peut être omis par certains endpoints pour des raisons de performances)    |

<div id="example-paginating-through-sessions">
  ## Exemple : pagination des sessions
</div>

<div id="first-page">
  ### Première page
</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">
  ### Page suivante
</div>

Utilisez la valeur `end_cursor` de la réponse précédente :

```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">
  ### Récupérer tous les résultats
</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 depuis une pagination par offset
</div>

Si vous migrez depuis l’API v1 ou v2, remplacez `offset`/`limit` par `after`/`first` :

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

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

La pagination par curseur est plus fiable que la pagination par offset, car elle n’est pas affectée par l’ajout ou la suppression d’éléments entre les pages.
