# Paginación

> Las listas de la API de Trevol usan cursores (starting_after); los SDK ofrecen iteradores que recorren todas las páginas.

Fuente: https://platform.trevol.si/docs/paginacion

Las listas devuelven un sobre `{object: "list", data, has_more, next_cursor}`. Pide la página siguiente con `starting_after=<next_cursor>`; `limit` cambia el tamaño de la página.

`GET /v1/invoices` (`listInvoices`)

#### cURL

```bash
curl "https://api.trevol.si/v1/invoices?limit=100" \
  -H "Authorization: Bearer $TREVOL_API_KEY"
```

[Probar en el Playground](https://platform.trevol.si/playground?op=listInvoices)

- Los listados de documentos filtran por `status`, `external_id`, `created_from` y `created_to`; los de nómina, por `employee_code` y `period_end_from`/`period_end_to` (nunca por la cédula).
- Si una página con `has_more` verdadero no trae `next_cursor`, usa el `id` del último elemento.
- `GET /v1/events` guarda los eventos 30 días y `GET /v1/requests`, el registro de peticiones, otros 30.

## Iteradores en los SDK

Cada SDK trae un iterador perezoso con su idioma: `paginate` devuelve un `AsyncIterable` en Node, un generador en Python y PHP, un `Iterable` en Java, un `IAsyncEnumerable` en C#, un `iter.Seq2` en Go y un `Enumerator::Lazy` en Ruby. Pides la primera página, y el iterador sigue solo con `next_cursor` mientras `has_more`. En el README de cada SDK hay un ejemplo completo.
