List endpoints use **numbered pages** with a per-page size — stable, bookmarkable, and cache-friendly.
## Parameters
| Parameter | Type | Rules | Default |
|---|---|---|---|
| `page` | integer | 1-based. `0` and negatives are *valid* — they return an empty `200`, not an error | `1` |
| `maxResults` | integer | 1–100 | `20` |
Two listing surfaces are paginated: `GET /v1/summaries` and `GET /v1/chat/messages` (the chat history window is additionally capped at the latest 100 exchanges). Manage lists (feeds, channels, tickets, feature requests) return complete, unpaginated collections — see their pages.
## Response shape
Every paginated list carries `pageInfo` beside `items`:
```responses
~~~200 OK
{
"data": {
"items": [ … ],
"pageInfo": {
"resultsPerPage": 20,
"page": 2,
"totalResults": 42,
"totalPages": 3
}
},
"request_id": "5f0c…"
}
~~~
```
- `totalResults` is exact for the current filter set; `totalPages` is computed server-side (minimum 1 on non-empty result sets).
- An out-of-range page returns an empty `items` array with the same shape (`200`), never a 404.
> `page=0` and negative pages are accepted and empty by design — clients can probe "the page before 1" without branching. Non-integers (`1.5`) are rejected with `400 validation.invalid_input`.
## Combining with filters
`page` and `maxResults` compose with every listing filter (`q`, `is_saved`, `is_shared`, time windows). Any filter change resets you to page 1 — the same `page` number under a different filter is a different result set.
Pagination
List endpoints use numbered pages with a per-page size — stable, bookmarkable, and cache-friendly.
Parameters
| Parameter | Type | Rules | Default |
|---|---|---|---|
| page | integer | 1-based. 0 and negatives are *valid* — they return an empty 200, not an error | 1 |
| maxResults | integer | 1–100 | 20 |
Two listing surfaces are paginated: GET /v1/summaries and GET /v1/chat/messages (the chat history window is additionally capped at the latest 100 exchanges). Manage lists (feeds, channels, tickets, feature requests) return complete, unpaginated collections — see their pages.
Response shape
Every paginated list carries pageInfo beside items:
~~~200 OK
{
"data": {
"items": [ … ],
"pageInfo": {
"resultsPerPage": 20,
"page": 2,
"totalResults": 42,
"totalPages": 3
}
},
"request_id": "5f0c…"
}
~~~
• totalResults is exact for the current filter set; totalPages is computed server-side (minimum 1 on non-empty result sets).
• An out-of-range page returns an empty items array with the same shape (200), never a 404.
page=0 and negative pages are accepted and empty by design — clients can probe "the page before 1" without branching. Non-integers (1.5) are rejected with 400 validation.invalid_input.
Combining with filters
page and maxResults compose with every listing filter (q, is_saved, is_shared, time windows). Any filter change resets you to page 1 — the same page number under a different filter is a different result set.
List endpoints use numbered pages with a per-page size — stable, bookmarkable, and cache-friendly.
Parameters
Parameter
Type
Rules
Default
page
integer
1-based. 0 and negatives are valid — they return an empty 200, not an error
1
maxResults
integer
1–100
20
Two listing surfaces are paginated: GET /v1/summaries and GET /v1/chat/messages (the chat history window is additionally capped at the latest 100 exchanges). Manage lists (feeds, channels, tickets, feature requests) return complete, unpaginated collections — see their pages.
Response shape
Every paginated list carries pageInfo beside items:
totalResults is exact for the current filter set; totalPages is computed server-side (minimum 1 on non-empty result sets).
An out-of-range page returns an empty items array with the same shape (200), never a 404.
page=0 and negative pages are accepted and empty by design — clients can probe "the page before 1" without branching. Non-integers (1.5) are rejected with 400 validation.invalid_input.
Combining with filters
page and maxResults compose with every listing filter (q, is_saved, is_shared, time windows). Any filter change resets you to page 1 — the same page number under a different filter is a different result set.