# Paginierung

> Wie Listen mit page und limit in Seiten aufgeteilt werden, der Block pagination in der Antwort, wie du alles durchläufst und wie Filter und Paginierung zusammenspielen.

Große Listen (Mitglieder, Kontoauszug, Feed, Produkte) kommen seitenweise. Du forderst die Seite mit zwei Parametern an und bekommst zusammen mit den Elementen den Block `pagination`.

## Die Parameter

| Parameter | Was es ist | Standard | Maximum |
|---|---|---|---|
| `page` | Die Seite, beginnend bei 1 | 1 | — |
| `limit` | Elemente pro Seite | 20 | 100 |

```bash
curl -s "https://api.memberfy.net/api/profiles/list?page=2&limit=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID"
```

## Die Antwort

```json
{
  "success": true,
  "message": "…",
  "data": [ { "…": "…" } ],
  "pagination": { "page": 2, "limit": 50, "total": 137, "totalPages": 3 }
}
```

| Feld | Was es ist |
|---|---|
| `page` | Die zurückgegebene Seite |
| `limit` | Elemente pro Seite |
| `total` | Wie viele Elemente es gibt, bereits gefiltert |
| `totalPages` | Wie viele Seiten es gibt |

## Alles durchlaufen

```js
let page = 1;
const all = [];
while (true) {
  const { data, pagination } = await api.profiles.getList({ page, limit: 100 });
  all.push(...data);
  if (page >= pagination.totalPages) break;
  page += 1;
}
```

## Filter und Paginierung

Die Filter (`search`, `role`, `type`, `status` …) werden **vor** der Paginierung angewendet: `total` und `totalPages` zählen nur, was zum Filter passt.

## Tipps

- Nimm das größte sinnvolle `limit` (bis 100), um weniger Aufrufe zu machen.
- Geh nicht davon aus, dass alle Listen paginiert sind: Ist eine es nicht, fehlt der Block `pagination`, und `data` enthält alles.
- Wenn du eine Liste durchläufst, die sich beim Lesen ändert (zum Beispiel den Feed), kann ein Element auf zwei Seiten auftauchen; entferne Duplikate anhand der `id`.

## Verwandte Artikel

- [Antworten und Fehler](/api/respostas-e-erros)
- [JavaScript-SDK](/api/sdk-js)
