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

> ## Agent Instructions
> Reconify's API reference is read-only for customer data. Do not invent endpoints or authentication behavior beyond the OpenAPI contract.
> The public OpenAPI document contains only the documented external /v2 contract.

# Python pagination

> Iterate events and issues without handling cursors yourself.

List operations return one page and an opaque cursor. Pass the cursor as `after`
to get the next page.

| Parameter     | Meaning                                           |
| ------------- | ------------------------------------------------- |
| `limit`       | Records per page, 1 to 100. Defaults to 50.       |
| `after`       | Opaque cursor from the previous response.         |
| `next_cursor` | Present in the response while more records exist. |

## Iterate every record

The iterator helpers live on the client, not on the resource modules. They
follow the cursor for you and stop when `next_cursor` is absent.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
with Reconify() as client:
    for issue in client.iter_issues(status="open", limit=100):
        print(issue.id, issue.category, issue.severity, issue.message)

    for event in client.iter_events(limit=100):
        print(event.id, event.event_type, event.status)

    for event in client.iter_issue_events(
        "00000000-0000-7000-8000-000000000001", limit=50
    ):
        print(event.event_type, event.occurred_at)
```

Query parameters are keyword arguments, the same as on the list operation.

<Warning>
  These iterators walk the whole collection. Break out of the loop, or filter with
  `status`, when you only need recent records.
</Warning>

## Async iteration

`AsyncReconify` exposes the same three methods and returns async iterators.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
async with AsyncReconify() as client:
    async for issue in client.iter_issues(status="open"):
        await triage(issue)
```

## Handle one page at a time

Call the list operation directly when you store the cursor between runs, for
example in a scheduled job.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
cursor = load_cursor()

page = client.events.list_events(limit=100, **({"after": cursor} if cursor else {}))

for event in page.events:
    process(event)

if page.next_cursor:
    save_cursor(page.next_cursor)
```

Treat the cursor as opaque. Do not parse it, build it, or assume it stays valid
across contract versions.

## Notes are not paginated

`list_issue_notes` returns every note on the issue in one response.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
notes = client.issues.list_issue_notes(
    "00000000-0000-7000-8000-000000000001"
)

for note in notes.notes:
    print(note.created_at, note.body)
```

## Next

Handle failures in [Errors and retries](/sdks/python/errors-and-retries).
