links.next é um cursor. Envie-o de volta no parâmetro cursor — num
POST /search, como cursor no corpo — até ele ser null:
As páginas não se movem enquanto os registros mudam
Contatos, organizações e negócios são paginados a partir do último registro que você recebeu, não por posição. Um registro criado ou excluído durante o percurso nunca faz você ver um registro duas vezes nem pular um, e um registro editado no meio do caminho aparece de novo mais adiante com os valores novos. É isso que torna seguro um sync comupdated_since — veja
Sincronização.
Trate o cursor como opaco
Não parseie, construa nem armazene um cursor além de um percurso. O conteúdo é um detalhe de implementação e muda sem aviso. Um cursor só vale para a consulta que o gerou. Envie-o com os mesmos filtros e o mesmosort; qualquer outra coisa — um cursor que você montou, um de outro
endpoint ou um reaproveitado com outros filtros — devolve 400 invalid_cursor.
Não há contagem total
A resposta diz se existe outra página (meta.has_more), não quantos registros
há no total. Contar o conjunto filtrado significaria uma segunda varredura
completa a cada página, que fica mais lenta justamente 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 ou sort=updated_at para percorrer as mudanças em ordem.
Prefixe a chave com - para ordem decrescente; registros sem valor ficam por
último nos dois sentidos.
Como escolher um limit
limit vale 50 por padrão e aceita até 200. Páginas maiores significam menos
idas e voltas; páginas menores, respostas individuais mais rápidas. Para um
sync em massa, 200 costuma ser o certo.