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

# Pagination and Filters

> Shared list response and filtering conventions.

List endpoints use request-body cursor pagination. Send `cursor.limit` on the first request, then pass the returned `cursor.next` as `cursor.after` to fetch the next page.

```http theme={null}
POST /v1/signals/leads
```

```json Request theme={null}
{
  "cursor": {
    "limit": 100
  }
}
```

```json theme={null}
{
  "data": [],
  "cursor": {
    "next": "opaque_cursor_from_the_response",
    "has_more": true
  }
}
```

Use the next cursor in a follow-up request:

```json Request theme={null}
{
  "cursor": {
    "limit": 100,
    "after": "opaque_cursor_from_the_response"
  }
}
```

## Common body fields

| Field          | Description                                                                  |
| -------------- | ---------------------------------------------------------------------------- |
| `cursor.limit` | Number of records to return. Maximum value is `100`.                         |
| `cursor.after` | Opaque cursor returned by the previous response. Omit it for the first page. |

Keep the same filters and sort on every page. Cursors are tied to the requested sort and are rejected if reused with another sort.

## Endpoint-specific time ranges

| Endpoint                    | Start                                                 | End                        |
| --------------------------- | ----------------------------------------------------- | -------------------------- |
| `POST /v1/signals/leads`    | `date_found.start_time` or `latest_signal.start_time` | Matching `end_time` field  |
| `POST /v1/signals/accounts` | `date_found.start_time` or `latest_signal.start_time` | Matching `end_time` field  |
| `POST /v1/monitor/leads`    | `latest_activity.start_time`                          | `latest_activity.end_time` |
| `POST /v1/monitor/accounts` | `latest_activity.start_time`                          | `latest_activity.end_time` |
| `POST /v1/monitor/signals`  | `observed_at.start_time`                              | `observed_at.end_time`     |

For Leads, the `latest_signal` range is applied to the same occurrence that matches `signals` and `sheet_ids`, so the returned `signal.observed_at` is always inside the requested window.

Use filters on the Leads endpoint instead of nested result endpoints.

```http theme={null}
POST /v1/signals/leads
```

```json theme={null}
{
  "signals": ["topic_engagement_signal"],
  "sheet_ids": ["sh_6P9vR3"],
  "company_ids": ["co_4F7xN2"],
  "cursor": { "limit": 100 }
}
```
