> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lapyme.com.ar/llms.txt
> Use this file to discover all available pages before exploring further.

# Paginación

> Recorré listados paginados por cursor usando el SDK de TypeScript

Los listados de la API usan cursor. Cada respuesta incluye `has_more` y `next_cursor`. No uses `page` ni offsets.

## Recorrer una página

```typescript theme={null}
import { Lapyme } from "lapyme";

const lapyme = new Lapyme({
  bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});

const page = await lapyme.products.list({
  limit: 50,
  query: "remera",
});

console.log(page.result.data);
console.log(page.result.nextCursor);
```

## Recorrer todas las páginas

```typescript theme={null}
import { Lapyme } from "lapyme";

const lapyme = new Lapyme({
  bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});

let cursor: string | undefined;

do {
  const page = await lapyme.products.list({
    limit: 100,
    cursor,
  });

  for (const product of page.result.data) {
    console.log(product.id, product.name);
  }

  cursor = page.result.nextCursor ?? undefined;
} while (cursor);
```

## Patrón reusable

```typescript theme={null}
import { Lapyme } from "lapyme";

const lapyme = new Lapyme({
  bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});

async function* listProducts(query?: string) {
  let cursor: string | undefined;

  do {
    const page = await lapyme.products.list({
      limit: 100,
      cursor,
      query,
    });

    yield* page.result.data;
    cursor = page.result.nextCursor ?? undefined;
  } while (cursor);
}

for await (const product of listProducts("remera")) {
  console.log(product.sku);
}
```

<Tip>
  Guardá el cursor solo como un token opaco. No intentes parsearlo ni construirlo a mano.
</Tip>
