Vai al contenuto principale
Tutti gli endpoint di elenco nelle API Organization ed Enterprise usano la paginazione basata su cursore. Questo garantisce una paginazione coerente ed efficiente indipendentemente dalla dimensione del set di risultati.

Come funziona

Ogni endpoint di tipo lista accetta due parametri di query:
ParametroTipoDescrizione
firstintegerNumero massimo di elementi da restituire per pagina (il valore predefinito varia a seconda dell’endpoint)
afterstringCursore opaco restituito da una risposta precedente. Omettilo per la prima pagina

Formato della risposta

Le risposte che restituiscono elenchi includono metadati sulla paginazione:
{
  "items": [...],
  "has_next_page": true,
  "end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
  "total": 142
}
FieldDescription
itemsArray di risultati della pagina corrente
has_next_pagetrue se ci sono altri risultati
end_cursorPassa questo valore come parametro after per ottenere la pagina successiva. null quando has_next_page è false
totalNumero totale di elementi corrispondenti (può essere omesso da alcuni endpoint per motivi di performance)

Esempio: paginare le sessioni

Prima pagina

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

Pagina successiva

Utilizza il valore end_cursor dalla risposta precedente:
curl "https://api.devin.ai/v3/organizations/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"

Raccogliere tutti i risultati

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")

Migrazione dalla paginazione basata su offset

Se stai effettuando la migrazione dalle API v1 o v2, sostituisci offset/limit con after/first:
# Prima (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"

# Dopo
curl ".../v3/organizations/sessions?first=25&after=CURSOR_FROM_PREVIOUS_PAGE"
La paginazione basata su cursore è più affidabile della paginazione basata su offset perché non viene influenzata dall’aggiunta o dalla rimozione di elementi tra una pagina e l’altra.