Essentials
Pagination
List endpoints return newest first, in pages of limit items (1 to 100, default 10), wrapped like this:
{
"data": [ { "id": "trf_01JA8ZC4QK7N2Y5W3V0T9S8R6P", "object": "transfer" } ],
"has_more": true
}Moving between pages
- Next page: pass the ID of the last item you received as
starting_after. - Previous page: pass the ID of the first item as
ending_before. - Don't combine the two.
curl "$NDEIPI/transfers?user_id=usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R&limit=50&starting_after=trf_01JA8ZC4QK7N2Y5W3V0T9S8R6P" \
-H "Api-Key: $NDEIPI_API_KEY"Reading everything
Keep requesting with starting_after set to the last ID until has_more is false.
async function* allTransfers(userId) {
let cursor;
while (true) {
const url = new URL(`${process.env.NDEIPI}/transfers`);
url.searchParams.set("user_id", userId);
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("starting_after", cursor);
const res = await fetch(url, { headers: { "Api-Key": process.env.NDEIPI_API_KEY } });
const page = await res.json();
yield* page.data;
if (!page.has_more || page.data.length === 0) return;
cursor = page.data[page.data.length - 1].id;
}
}Most lists also take created_after and created_before to narrow the time range.