Pular para o conteúdo principal
Todos os endpoints de listagem nas APIs de Organização e Enterprise usam paginação baseada em cursor. Isso proporciona uma paginação consistente e eficiente, independentemente do tamanho do conjunto de resultados.

Como funciona

Cada endpoint de listagem aceita dois parâmetros de consulta:
ParâmetroTipoDescrição
firstinteiroNúmero máximo de itens a retornar por página (o padrão varia conforme o endpoint)
afterstringCursor opaco de uma resposta anterior. Omita na primeira página

Formato da resposta

Respostas em lista incluem metadados de paginação:
{
  "items": [...],
  "has_next_page": true,
  "end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
  "total": 142
}
FieldDescription
itemsArray de resultados da página atual
has_next_pagetrue se existirem mais resultados
end_cursorPasse-o como parâmetro after para obter a próxima página. null quando has_next_page é false
totalNúmero total de itens correspondentes (pode ser omitido por alguns endpoints por motivos de desempenho)

Exemplo: paginando sessões

Primeira página

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

Próxima página

Use o valor end_cursor da resposta anterior:
curl "https://api.devin.ai/v3/organizations/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"

Coletar todos os 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")

Migrando da paginação baseada em offset

Ao migrar da API v1 ou v2, substitua offset/limit por after/first:
# Antes (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"

# Depois
curl ".../v3/organizations/sessions?first=25&after=CURSOR_FROM_PREVIOUS_PAGE"
A paginação baseada em cursor é mais confiável do que a paginação baseada em deslocamento porque não é afetada por itens que são adicionados ou removidos entre uma página e outra.