links.next es un cursor. Devuélvelo en el parámetro cursor — en un
POST /search, como cursor en el cuerpo — hasta que sea null:
Las páginas no se mueven mientras los registros cambian
Contactos, organizaciones y negocios se paginan a partir del último registro que recibiste, no por posición. Un registro creado o eliminado durante el recorrido nunca hace que veas un registro dos veces ni que te saltes uno, y un registro editado a mitad de camino vuelve a aparecer más adelante con sus valores nuevos. Eso es lo que hace seguro un sync conupdated_since — mira
Sincronización.
Trata el cursor como opaco
No parsees, construyas ni guardes un cursor más allá de un recorrido. Su contenido es un detalle de implementación y cambia sin aviso. Un cursor solo vale para la consulta que lo generó. Envíalo con los mismos filtros y el mismosort; cualquier otra cosa — un cursor que armaste tú, uno
de otro endpoint o uno reutilizado con otros filtros — devuelve
400 invalid_cursor.
No hay un total
La respuesta te dice si existe otra página (meta.has_more), no cuántos
registros hay en total. Contar el conjunto filtrado significaría un segundo
recorrido completo en cada página, que se vuelve más lento justo cuando el
workspace crece.
Si necesitas un conteo, pagina y cuenta lo que recibes.
Ordenamiento
Pasasort para ordenar una colección, por ejemplo sort=-created_at para los
más nuevos primero o sort=updated_at para recorrer los cambios en orden.
Antepón - a la clave para orden descendente; los registros sin valor quedan al
final en ambos sentidos.
Cómo elegir un limit
limit vale 50 por defecto y acepta hasta 200. Páginas más grandes significan
menos idas y vueltas; páginas más chicas, respuestas individuales más rápidas.
Para un sync masivo, 200 suele ser lo correcto.