---
title: "Pagination & Sync"
description: "Listen blättern über einen opaken Cursor. Abgleichen geht über updatedSince und includeDeleted, auch neben Webhooks."
lang: de
url: https://developers.bodo-app.com/guides/pagination/
apiVersion: 2026-11-01
---

# Pagination & Sync

Listen blättern über einen opaken Cursor. Abgleichen geht über updatedSince und includeDeleted, auch neben Webhooks.

## Blättern

Frag die nächste Seite mit `nextCursor` ab, solange `hasMore` wahr ist.

```http
GET /v1/contacts?limit=100&sort=-updatedAt

{
  "data": [ { "id": "con_4Nf7…", … }, … ],
  "hasMore": true,
  "nextCursor": "eyJ2IjoxLCJrIjoi…"
}

GET /v1/contacts?limit=100&sort=-updatedAt&cursor=eyJ2Ijox…
```

Die SDKs gehen den Cursor selbst ab: `for await (const contact of bodo.contacts.list())` bzw. `for contact in bodo.contacts.list()`.

## Regeln

| Parameter | Regel |
| --- | --- |
| limit | Vorgabe 25, höchstens 100 |
| cursor | an Filter und Sortierung gebunden, sonst [400 CURSOR_MISMATCH](/problems/CURSOR_MISMATCH/); läuft nach 24 h ab |
| sort | nur Werte aus der Referenz, etwa `-updatedAt` |
| unbekannt | [400 UNKNOWN_PARAMETER](/problems/UNKNOWN_PARAMETER/), es gibt keine Filtersprache |
| Gesamtzahl | nicht in Listen, sondern `GET /v1/contacts/count` (2 Punkte) |

## Abgleichen, auch neben Webhooks

Merke dir den Startzeitpunkt jedes Laufs und frage beim nächsten Mal nur Änderungen ab. Löschmarker kommen mit `includeDeleted=true`. [Webhooks](/guides/webhooks/) melden nur, dass sich etwas geändert hat; den Stand holst du genau so. Unterstützt eine Ressource keine Löschmarker, steht das in ihrer Referenz.

```http
GET /v1/contacts?updatedSince=2026-11-03T09:00:00Z&includeDeleted=true&limit=100

{"data": [
  {"id": "con_4Nf7…", "lastName": "Mustermann", "updatedAt": "2026-11-03T09:14:22Z"},
  {"id": "con_9Qa2…", "deleted": true, "updatedAt": "2026-11-03T10:02:51Z"}
], "hasMore": false, "nextCursor": null}
```

> Fällt dein Empfänger länger aus, holst du Verpasstes mit `updatedSince` nach. Ereignisse liest du außerdem 30 Tage lang über `GET /v1/events`.
