Collections come back in an envelope:
{
"data": [ { "id": 1489, "object": "member" } ],
"has_more": true,
"next_cursor": "eyJpZCI6MTU4OH0"
}Pass next_cursor back as ?cursor= until has_more is false. limit defaults to 50 and is clamped at 200.
People are added while you iterate. With page numbers that quietly skips or repeats rows — for a member export, a skipped row is a missing child. A cursor is a position in the data, so inserts elsewhere cannot shift it.
A malformed or truncated cursor returns 422. It does not silently restart at page one, which would loop forever without telling you.
Any collection accepts Accept: text/csv. CSV is not paginated; it is capped at 10,000 rows, and beyond that you get a 413 pointing back here.