links.next até ele ser null:
Trate o cursor como opaco
Não parseie, construa nem armazene um cursor. O conteúdo é um detalhe de implementação e vai mudar quando os endpoints passarem para paginação por keyset — maslinks.next continua funcionando, que é o ponto de te entregar
uma URL em vez de um offset.
Passar um cursor que você mesmo montou, ou um de outro endpoint, devolve
400 invalid_cursor.
Não há um total
A resposta diz se existe outra página (meta.has_more), não quantos
registros existem no total. Contar o conjunto filtrado significaria um segundo
scan completo em cada página, que fica mais lento exatamente quando o
workspace cresce.
Se você precisa de uma contagem, pagine e conte o que receber.
Ordenação
Passesort para ordenar uma coleção, por exemplo sort=-created_at para os
mais novos primeiro. Mantenha sort idêntico em cada página de um mesmo
percurso — mudá-lo no meio invalida o cursor.
Como escolher um limit
limit tem default 25 e aceita até 100. Páginas maiores significam menos
round trips; páginas menores, respostas individuais mais rápidas. Para um
sync em massa, 100 costuma ser o certo.