Pagination
List projects is paginated with a cursor. Every other list returns everything at once.
Cursors
Ask for a page with limit (20 by default, 50 at most). The response carries the page's items and a nextCursor:
Pass nextCursor back as cursor for the next page, with the same search if you used one. The last page has nextCursor: null.
A cursor is opaque: don't build or change one. A cursor this route didn't return gets a 400.
All pages, in a script
Pages are ordered newest first and the cursor points past the last item, so a project created while you page doesn't shift the next pages.