Saltar al contenido principal
Todos los endpoints de lista en las APIs de Organization y Enterprise usan paginación basada en cursores. Esto ofrece una paginación uniforme y eficiente, independientemente del tamaño del conjunto de resultados.

Cómo funciona

Todos los endpoints de lista aceptan dos parámetros de consulta:
ParámetroTipoDescripción
firstintegerNúmero máximo de elementos que se devolverán por página (el valor predeterminado varía según el endpoint)
afterstringCursor opaco de una respuesta anterior. Omítelo en la primera página

Formato de respuesta

Las respuestas de tipo lista incluyen metadatos de paginación:
{
  "items": [...],
  "has_next_page": true,
  "end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
  "total": 142
}
FieldDescription
itemsArray de resultados para la página actual
has_next_pagetrue si hay más resultados
end_cursorPasa esto como el parámetro after para obtener la página siguiente. null cuando has_next_page es false
totalNúmero total de elementos coincidentes (puede omitirse en algunos endpoints por motivos de rendimiento)

Ejemplo: paginación de sesiones

Primera página

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

Siguiente página

Utiliza el valor de end_cursor de la respuesta anterior:
curl "https://api.devin.ai/v3/organizations/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"

Recopilación de todos los resultados

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

Migración desde paginación basada en offset

Si migras desde la API v1 o v2, reemplaza offset/limit por after/first:
# Antes (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"

# Después
curl ".../v3/organizations/sessions?first=25&after=CURSOR_FROM_PREVIOUS_PAGE"
La paginación basada en cursores es más fiable que la paginación basada en desplazamientos porque no se ve afectada por elementos que se añaden o eliminan entre páginas.