Pagination
Cursor-based, by created_at, descending.
Cursor-based, by created_at, descending.
Every list endpoint in the Pivotal API uses cursor pagination. The pattern is the same shape across customers, contacts, and onboardings:
Response:
Pass response.next_cursor straight back as the next request’s cursor. Stop when has_more is false.
cursor must validate as an ISO 8601 datetime. Garbage in returns a 400:
Python:
Filters like ?status=active apply on the server, then pagination cuts the filtered result. The cursor still walks created_at descending — you don’t get drift from cursoring through a moving filter as long as the filter is stable for the duration of the walk.
If you mutate records mid-walk (e.g. flipping status from onboarding to active while paginating ?status=onboarding), expect to either skip or duplicate the affected rows depending on the timing. Snapshot in your client if that’s a problem.
/customers/count endpoint will land — for now, walk the list once and cache).before cursor. Lists return newest first; if you need older-first, reverse the page in your client.{ object: "list", data: [], has_more: false, next_cursor: null }.has_more: false even if it returned limit items — trust the flag, not the count.GET /customers/{id} will 404 — soft-deleted is treated as gone). If you need to read deletes, surface them through the customer’s timeline.