GET /api/recorder/records/?page=1&pageSize=2&direct=desc
Get a page of archived recorder entries.
Auth: Bearer.
Query params
Section titled “Query params”| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
page | number | no* | — | Page number, starting at 1. Used only in the first request in a series. Ignored if cursor is provided. |
pageSize | number | yes | — | Number of records per page. Valid range: 1..8. |
direct | string | no | "desc" | Sort direction: "asc" — oldest to newest; "desc" — newest to oldest. |
cursor | number | no* | — | Cursor for continuing the query. See below. |
*Either page or cursor is required.
cursor
Section titled “cursor”The cursor provides stable sequential pagination without duplicates or gaps.
- First request in a series: the client sends
page=1and omitscursor. The server starts the query atlastSequence(desc) oroldestSequence(asc). - Response contains
nextCursor, the position from which to continue. - Subsequent requests: the client sends the
cursorfrom the previous response;pageis ignored. - End of the query:
nextCursor: nullmeans that no more data is available. - New series (when navigating to another UI page): the client resets
cursorand starts again withpage=1.
Response 200
Section titled “Response 200”{ "nextCursor": 1532, "recordCount": 2, "records": [ { "sequence": 1534, "timestamp": "2026-04-16T12:01:00Z", "channels": [ { "state": "normal", "temperature": 72.6, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 68.3, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 65.1, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 63.8, "enabled": true, "trip": false, "alarm": false, "fan": false } ] }, { "sequence": 1533, "timestamp": "2026-04-16T12:00:00Z", "channels": [ { "state": "normal", "temperature": 72.4, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 68.1, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 64.9, "enabled": true, "trip": false, "alarm": false, "fan": false }, { "state": "normal", "temperature": 63.6, "enabled": true, "trip": false, "alarm": false, "fan": false } ] } ]}Response fields
Section titled “Response fields”| Field | Type | Description |
|---|---|---|
nextCursor | number|null | Cursor for the next request. null if the end of the query has been reached. |
recordCount | number | Number of records in the current result set (0..pageSize). |
records | array | Records in direct order. |
If no more data is available, the response contains recordCount: 0, records: [],
and nextCursor: null. This is not an error.
records[]
Section titled “records[]”| Field | Type | Description |
|---|---|---|
sequence | number | Record sequence number |
timestamp | string | ISO 8601 UTC |
channels | array | 4 elements (CH1..CH4) |
records[].channels[]
Section titled “records[].channels[]”| Field | Type | Description |
|---|---|---|
state | string | "normal", "open", "short", "invalid" |
temperature | number|null | Temperature (null if the state is not "normal") |
enabled | boolean | Whether the channel is enabled |
trip | boolean | Trip state |
alarm | boolean | Alarm state |
fan | boolean | Fan state |
Scenario: populate a 25-record UI page (5 requests of 5)
Section titled “Scenario: populate a 25-record UI page (5 requests of 5)”GET /api/recorder/records/?page=1&pageSize=5&direct=desc→ { "nextCursor": 1529, "recordCount": 5, "records": [...] }
GET /api/recorder/records/?cursor=1529&pageSize=5&direct=desc→ { "nextCursor": 1524, "recordCount": 5, "records": [...] }
GET /api/recorder/records/?cursor=1524&pageSize=5&direct=desc→ { "nextCursor": 1519, "recordCount": 5, "records": [...] }
GET /api/recorder/records/?cursor=1519&pageSize=5&direct=desc→ { "nextCursor": 1514, "recordCount": 5, "records": [...] }
GET /api/recorder/records/?cursor=1514&pageSize=5&direct=desc→ { "nextCursor": null, "recordCount": 5, "records": [...] }The first request uses page=1; subsequent requests use the cursor from the previous response.