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

# Paginação

> Como os endpoints de listagem da MoneyDev paginam resultados com limit e cursores starting_after.

Todo endpoint de listagem (`GET /v1/customers`, `GET /v1/products`, `GET /v1/products/:id/offers`, `GET /v1/checkouts`) retorna o mesmo envelope e pagina do mesmo jeito.

## Objeto de lista

```json theme={null}
{
  "object": "list",
  "data": [
    { "id": "cus_2f...", "object": "customer", "...": "..." },
    { "id": "cus_1a...", "object": "customer", "...": "..." }
  ],
  "has_more": true,
  "next_cursor": "cus_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
}
```

<ResponseField name="object" type="string">
  Sempre `"list"`.
</ResponseField>

<ResponseField name="data" type="array">
  A página de resultados, mais recentes primeiro (por data de criação).
</ResponseField>

<ResponseField name="has_more" type="boolean">
  `true` quando existe pelo menos mais um registro depois desta página.
</ResponseField>

<ResponseField name="next_cursor" type="string | null">
  O ID a passar como `starting_after` na próxima página. `null` quando `has_more` é `false`.
</ResponseField>

## Parâmetros de query

<ParamField query="limit" type="integer" default="20">
  Quantos registros retornar, de `1` a `100`.
</ParamField>

<ParamField query="starting_after" type="string">
  Um ID de recurso de uma página anterior (normalmente o `next_cursor`). A resposta começa no registro imediatamente após ele. Um ID malformado ou que não pertence à sua conta retorna `400` com `code: "invalid_cursor"`.
</ParamField>

## Percorrendo todos os registros

```javascript theme={null}
async function* allCustomers(token) {
  let cursor;
  do {
    const url = new URL("https://api.moneydev.com.br/v1/customers");
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("starting_after", cursor);

    const res = await fetch(url, {
      headers: { Authorization: `Bearer ${token}` },
    });
    const page = await res.json();

    yield* page.data;
    cursor = page.next_cursor;
  } while (cursor);
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.