# Paginering (/api/paginering)

> page, limit och offset, samt MetaInformation i listsvar.

Alla listendpoints pagineras som hos Fortnox.

| Parameter | Standard | Beskrivning |
|---|---|---|
| `page` | `1` | Sidnummer, från 1. |
| `limit` | `100` | Poster per sida. Max `500`; större värden kapas till 500. |
| `offset` | – | Antal poster att hoppa över. **Vinner över `page`** om båda skickas. |

Ogiltiga värden (t.ex. `page=0` eller `limit=abc`) ersätts tyst med standardvärdet.

## MetaInformation [#metainformation]

Varje listsvar har ett `MetaInformation`-block. `@`-prefixen är Fortnox egna.

```json
{
  "Invoices": [ ... ],
  "MetaInformation": {
    "@TotalResources": 230,
    "@TotalPages": 3,
    "@CurrentPage": 2
  }
}
```

- `@TotalPages` är alltid minst `1`, även när listan är tom.
- Med `offset` räknas `@CurrentPage` ut som `floor(offset / limit) + 1`.

## Sortering [#sortering]

Många listor tar `sortby` (en vitlista per resurs, se respektive [referenssida](/api/referens/customers)) och `sortorder`. `sortorder` accepterar `asc`, `desc`, `ascending` och `descending`; okänt värde blir `asc`. Ett okänt `sortby` ger resursens standardordning.

## Hämta alla sidor [#hämta-alla-sidor]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl "https://app.klirr.ai/api/v1/3/customers?page=2&limit=500" \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
async function allCustomers(token: string) {
  const out = [];
  for (let page = 1; ; page++) {
    const res = await fetch(
      `https://app.klirr.ai/api/v1/3/customers?page=${page}&limit=500`,
      { headers: { Authorization: `Bearer ${token}` } },
    );
    const body = await res.json();
    out.push(...body.Customers);
    if (page >= body.MetaInformation['@TotalPages']) return out;
  }
}
```
</Tab>
</Tabs>

Tänk på [rate limit](/api/rate-limits) vid stora synkar.
