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

# Pagination

> Pagination par pages pour les endpoints de listing

# Pagination

Tous les endpoints de listing qui retournent plusieurs éléments utilisent une **pagination par pages** propulsée par `Page<T>` de Spring Data.

## Paramètres de requête

| Paramètre | Type   | Défaut   | Description                                       |
| --------- | ------ | -------- | ------------------------------------------------- |
| `page`    | entier | `0`      | Index de page commençant à zéro                   |
| `size`    | entier | `20`     | Nombre d'éléments par page (max 100)              |
| `sort`    | chaîne | variable | Champ et direction de tri (ex : `createdAt,desc`) |

## Exemple de requête

```bash theme={null}
curl "https://api.colismove.com/v1/api/annonces?page=0&size=10&sort=dateDepart,asc" \
  -H "Authorization: Bearer {token}"
```

## Format de la réponse

```json theme={null}
{
  "content": [
    { "id": 1, "villeDepart": "Paris", "villeArrivee": "Lyon" },
    { "id": 2, "villeDepart": "Marseille", "villeArrivee": "Toulouse" }
  ],
  "page": {
    "number": 0,
    "size": 10,
    "totalElements": 47,
    "totalPages": 5
  }
}
```

## Champs de la réponse

| Champ                | Type    | Description                                  |
| -------------------- | ------- | -------------------------------------------- |
| `content`            | tableau | Les éléments de la page courante             |
| `page.number`        | entier  | Index de la page courante (commence à zéro)  |
| `page.size`          | entier  | Nombre d'éléments par page                   |
| `page.totalElements` | entier  | Nombre total d'éléments sur toutes les pages |
| `page.totalPages`    | entier  | Nombre total de pages                        |

## Naviguer entre les pages

Pour itérer sur l'ensemble des pages :

```javascript theme={null}
let page = 0;
let totalPages = 1;

while (page < totalPages) {
  const response = await fetch(`/v1/api/annonces?page=${page}&size=20`);
  const data = await response.json();

  // Traiter data.content

  totalPages = data.page.totalPages;
  page++;
}
```

<Info>
  La taille maximale d'une page est de **100** éléments. Les requêtes excédant cette limite sont automatiquement plafonnées.
</Info>
