> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Paginazione

> Come funziona la paginazione basata su cursore nelle API di Devin

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.

<h2 id="how-it-works">
  Come funziona
</h2>

Ogni endpoint di tipo lista accetta due parametri di query:

| Parametro | Tipo | Descrizione |
| - | - | - |
| `first` | integer | Numero massimo di elementi da restituire per pagina (il valore predefinito varia a seconda dell'endpoint) |
| `after` | string | Cursore opaco restituito da una risposta precedente. Omettilo per la prima pagina |

<h3 id="response-format">
  Formato della risposta
</h3>

Le risposte che restituiscono elenchi includono metadati sulla paginazione:

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

| Field | Description |
| - | - |
| `items` | Array di risultati della pagina corrente |
| `has_next_page` | `true` se ci sono altri risultati |
| `end_cursor` | Passa questo valore come parametro `after` per ottenere la pagina successiva. `null` quando `has_next_page` è `false` |
| `total` | Numero totale di elementi corrispondenti (può essere omesso da alcuni endpoint per motivi di performance) |

<h2 id="example-paginating-through-sessions">
  Esempio: paginare le sessioni
</h2>

<h3 id="first-page">
  Prima pagina
</h3>

```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

<h3 id="next-page">
  Pagina successiva
</h3>

Utilizza il valore `end_cursor` dalla risposta precedente:

```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

<h3 id="collecting-all-results">
  Raccogliere tutti i risultati
</h3>

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

<h2 id="migrating-from-offset-based-pagination">
  Migrazione dalla paginazione basata su offset
</h2>

Se stai effettuando la migrazione dalle API v1 o v2, sostituisci `offset`/`limit` con `after`/`first`:

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

# Dopo
curl ".../v3/organizations/{org_id}/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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.