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

# Pagination

> Learn how to paginate through list endpoints.

# Pagination

All list endpoints return paginated results. Use the `page` and `per_page` query parameters to control pagination.

## Query Parameters

| Parameter  | Type    | Default | Description                          |
| ---------- | ------- | ------- | ------------------------------------ |
| `page`     | integer | 1       | Page number (starts at 1)            |
| `per_page` | integer | 25      | Number of results per page (max 100) |

## Response Format

Every paginated response includes a `meta` object with pagination information:

```json theme={null}
{
  "data": [...],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 142
  }
}
```

| Field           | Type    | Description                      |
| --------------- | ------- | -------------------------------- |
| `meta.page`     | integer | Current page number              |
| `meta.per_page` | integer | Number of items per page         |
| `meta.total`    | integer | Total number of matching records |

## Example

Fetch the second page of leads with 10 results per page:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://api.reachedapp.com/v1/leads?page=2&per_page=10" \
    -H "Authorization: Bearer rchd_live_xxxxxxxxxxxx"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.reachedapp.com/v1/leads?page=2&per_page=10",
    {
      headers: {
        "Authorization": "Bearer rchd_live_xxxxxxxxxxxx"
      }
    }
  );
  const { data, meta } = await response.json();
  console.log(`Page ${meta.page} of ${Math.ceil(meta.total / meta.per_page)}`);
  ```
</CodeGroup>

## Iterating Through All Pages

<CodeGroup>
  ```javascript JavaScript theme={null}
  async function fetchAllLeads(apiKey) {
    const baseUrl = "https://api.reachedapp.com/v1/leads";
    const allLeads = [];
    let page = 1;
    let hasMore = true;

    while (hasMore) {
      const response = await fetch(`${baseUrl}?page=${page}&per_page=100`, {
        headers: { "Authorization": `Bearer ${apiKey}` }
      });
      const { data, meta } = await response.json();
      allLeads.push(...data);
      hasMore = page * meta.per_page < meta.total;
      page++;
    }

    return allLeads;
  }
  ```

  ```python Python theme={null}
  import requests

  def fetch_all_leads(api_key):
      base_url = "https://api.reachedapp.com/v1/leads"
      all_leads = []
      page = 1

      while True:
          response = requests.get(
              f"{base_url}?page={page}&per_page=100",
              headers={"Authorization": f"Bearer {api_key}"}
          )
          result = response.json()
          all_leads.extend(result["data"])

          if page * result["meta"]["per_page"] >= result["meta"]["total"]:
              break
          page += 1

      return all_leads
  ```
</CodeGroup>

<Note>
  To minimize the number of requests, use `per_page=100` (the maximum) when fetching all records.
</Note>
