Choose the endpoint contract
These contracts allow pages up to 100 results. The common pagination schema also exposes
limit=-1; prefer bounded pages for bulk work. Event queries and campaign recipient messages require a positive page size and do not support that option.
Use a returned cursor as the next request’s cursor. Common lists also use page=prev when traversing backwards. Event and campaign-recipient cursors encode their traversal information. Treat a missing or null next cursor as the end of the collection.
Walk a contact list
Fetch each page before requesting the next one:token. The /users path names contact records, not team members. This generator yields each page’s contacts and stops when no next cursor is returned.
Sort and filter
Use separatesort and direction parameters where the endpoint supports them. For example, contact lists default to sort=id and direction=desc. Do not prefix a sort field with - or use forward and backward as sort directions.
Filters are endpoint-specific. Event queries require a bounded time window and at least one supported selective filter. Campaign recipient queries accept a bounce_category filter; event queries do not. Use the generated endpoint reference for the accepted parameters.
Interpret changing results
Pagination does not freeze the collection. Records can arrive, change, or disappear between requests. A cursor is a continuation token, not a guarantee that a changing collection cannot produce gaps or repeated records. Persist record identifiers when your integration needs to reconcile repeated reads. Do not assume every endpoint returns total-count or page-index headers. Follow the response body and the endpoint’s documented fields. Event aggregatecount values count occurrences; campaign bounced-message totals count messages.
Next steps
Query events
Inspect events or count occurrences and contacts.
Campaign bounce reporting
Follow message-level causes and diagnostics.