Pagination
Lists answer { "object": "list", "data": [...], "has_more": true, "next_cursor": "..." }. Send limit (1–200, default 50) and the next_cursor you got back as cursor. A cursor belongs to the filters it was made with; reused with others it answers 400 invalid_cursor instead of skipping or repeating rows.
TypeScript
let cursor = null;
do {
const url = new URL("https://api.norreach.app/v1/contacts");
url.searchParams.set("limit", "200");
if (cursor) url.searchParams.set("cursor", cursor);
const page = await (await fetch(url, { headers: { Authorization: `Bearer ${process.env.NORREACH_API_KEY}` } })).json();
for (const contact of page.data) handle(contact);
cursor = page.has_more ? page.next_cursor : null;
} while (cursor);