Passer au contenu principal
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.

Fonctionnement

Chaque endpoint de liste accepte deux paramètres de requête :
ParamètreTypeDescription
firstintegerNombre maximal d’éléments à renvoyer par page (la valeur par défaut varie selon l’endpoint)
afterstringCurseur opaque provenant d’une réponse précédente. À omettre pour la première page

Format de réponse

Les réponses de type liste incluent des métadonnées de pagination :
{
  "items": [...],
  "has_next_page": true,
  "end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
  "total": 142
}
ChampDescription
itemsListe de résultats pour la page actuelle
has_next_pagetrue s’il y a d’autres résultats
end_cursorPassez cette valeur en paramètre after pour obtenir la page suivante. null lorsque has_next_page est false
totalNombre total d’éléments correspondants (peut être omis par certains endpoints pour des raisons de performances)

Exemple : pagination des sessions

Première page

curl "https://api.devin.ai/v3/organizations/sessions?first=10" \
  -H "Authorization: Bearer $DEVIN_API_KEY"

Page suivante

Utilisez la valeur end_cursor de la réponse précédente :
curl "https://api.devin.ai/v3/organizations/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"

Récupérer tous les résultats

import os
import requests

url = "https://api.devin.ai/v3/organizations/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")

Migration depuis une pagination basée sur un offset

Si vous migrez depuis l’API v1 ou v2, remplacez offset/limit par after/first :
# Avant (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"

# Après
curl ".../v3/organizations/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.