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.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; läuft nach 24 h ab |
| sort | nur Werte aus der Referenz, etwa -updatedAt |
| unbekannt | 400 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 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.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.