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

# Pagination and sync

> Cursor pagination and incremental synchronization.

List endpoints return a page plus an opaque cursor:

```json theme={"system"}
{
  "data": [{ "id": "mem_...", "updatedAt": "2026-07-01T18:03:11.000Z" }],
  "hasMore": true,
  "nextCursor": "MjAyNi0wNy0wMVQxODowMzoxMS4wMDBafG1lbV8..."
}
```

Pass `nextCursor` back verbatim as `cursor` to fetch the next page, and keep
going while `hasMore` is true. Cursors are keyset-based on `(updatedAt, id)`,
so rows changing mid-walk are never silently skipped or repeated — unlike
offset pagination.

`limit` defaults to 50 and is capped at 100.

## Incremental sync

Records are returned oldest-change-first, so the last `updatedAt` you saw is a
durable sync watermark:

```bash theme={"system"}
curl "https://api.dueflow.co/v1/members?updatedSince=2026-07-01T00:00:00Z" \
  -H "Authorization: Bearer $DUEFLOW_TOKEN"
```

`updatedSince` is an RFC 3339 timestamp with an offset. Combined with the
cursor, a client can resume from where it stopped indefinitely instead of
re-reading the whole roster.

## Filtering

List endpoints take filters alongside the cursor — `isActive` on members,
`status` on payments and reimbursements, `memberId` on payments. Filters are
applied before pagination, so `hasMore` and the cursor describe the filtered
set.

A filter narrows the walk but not the cost: see [Rate limits](/rate-limits) for
what a page actually spends.
