Ir al contenido
SimploSimplo Docs

Paginación

Paginación por cursor en la API de Simplo — Page<T>, auto-paginación con for await y checkpoints manuales de cursor.

Los endpoints de listado usan paginación por cursor: cada página trae un next_cursor opaco que devuelves para obtener la página siguiente. El SDK lo envuelve en Page<T> y puede recorrer todas las páginas por ti.

const page = await simplo.dtes.list({ estado: 'aceptado', limit: 100 });
page.data; // Dte[] — los items de esta página
page.hasMore; // boolean
page.nextCursor; // string | null
page.totalCount; // number | undefined — total de coincidencias, cuando se reporta
const next = await page.getNextPage(); // Page<Dte> | null

limit va de 1 a 100 (default 20). Los filtros del listado de DTEs están documentados en ListDtesParams: tipo_dte, estado, fecha_desde, fecha_hasta, rut_receptor.

Un Page es un iterable asíncrono sobre todos los items restantes; las páginas siguientes se piden de forma lazy a medida que el loop las alcanza:

for await (const dte of await simplo.dtes.list({ fecha_desde: '2026-08-01' })) {
console.log(dte.folio, dte.monto_total);
}

Puedes cortar el loop en cualquier momento — después de eso no se piden más páginas.

Juntar todo (ojo con la memoria en rangos grandes):

const all: Dte[] = [];
for await (const dte of await simplo.dtes.list(filters)) all.push(dte);

Para checkpoints de jobs, persiste el cursor y retoma después:

let cursor: string | undefined = savedCursor;
do {
const page = await simplo.dtes.list({ ...filters, cursor });
await process(page.data);
cursor = page.nextCursor ?? undefined;
await saveCheckpoint(cursor);
} while (cursor !== undefined);

Los cursores son opacos — nunca los parsees ni los construyas.

folios.list() y webhooks.list() devuelven arrays planos: esas colecciones son pequeñas por naturaleza (una empresa tiene un puñado de CAFs y de endpoints de webhook).