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

# Pagination

> Cursor-based pagination, stable under inserts.

List endpoints (`/v1/audit`, `/v1/permits`, `/v1/approvals`, `/v1/policies`) are paginated with opaque cursors. Cursors are stable — inserting new rows does not shift or duplicate existing pages.

## Request

```http theme={null}
GET /v1/audit?limit=100&cursor=eyJvZmZzZXQiOjMwMH0
```

| Param | Default | Max | Notes |
| - | - | - | - |
| `limit` | 50 | 500 | Page size. |
| `cursor` | — | — | Opaque. From `next_cursor` of the previous response. |

## Response

```json theme={null}
{
  "data": [ /* ...items */ ],
  "next_cursor": "eyJvZmZzZXQiOjQwMH0",
  "has_more": true
}
```

When `has_more` is `false`, there is no next cursor and iteration is complete.

## SDK iteration

<CodeGroup>
  ```typescript TypeScript theme={null}
  for await (const entry of client.audit.list({ from, to })) {
    process(entry);
  }
  ```

  ```python Python theme={null}
  for entry in client.audit.list(from_=start, to=end):
      process(entry)
  ```
</CodeGroup>

SDKs handle cursor advancement and stop automatically on `has_more == false`.


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