A valid request URL is required to generate request examples{
"items": [
{
"id": "reg-paris-1-printer",
"label": "Imprimante ticket",
"kind": "printer",
"store": "Boutique Rivoli",
"storeId": "store-rivoli",
"register": "Caisse 1",
"status": "ready",
"lastSeen": "2026-07-13T08:15:00.000Z"
}
],
"total": 16,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}List the paired register peripherals
Returns one page of the hardware paired onto the network’s POS registers — this is the answer to ‘is the till equipment working’ and ‘which registers exist’. Each row is ONE peripheral, not one register, so a single register appears several times (once per printer / scanner / terminal / drawer / display). Filter with kind (the peripheral family: printer, scanner, payment-terminal, cash-drawer, customer-display) and/or status (the hardware link state: ready means online; disconnected, connecting and error all mean it is not usable right now) — status=error is the query for a hardware-fault triage. Sort by label or lastSeen (sortField=lastSeen&sortDirection=desc surfaces the most recent state changes first) and page with page/pageSize (max 100). JOINING TO A STORE: each row carries storeId — the id of the store from GET /v1/stores — so the two surfaces join on a REFERENCE. Filter by it (storeId=store-rivoli) to read one shop’s material instead of paging the whole fleet. store and register are the human display LABELS (e.g. Boutique Rivoli, Caisse 1) — print them, never match on them: they are free text typed into the pairing form, so they equal a directory name only by coincidence, and two shops can carry the same one. A device paired before the store selector existed has a label and NO storeId: it answers no storeId filter, and it is the only case where falling back to the label is right. register has no reference at all — there is no registers table — so a register is identified by its (storeId, register) pair.
A valid request URL is required to generate request examples{
"items": [
{
"id": "reg-paris-1-printer",
"label": "Imprimante ticket",
"kind": "printer",
"store": "Boutique Rivoli",
"storeId": "store-rivoli",
"register": "Caisse 1",
"status": "ready",
"lastSeen": "2026-07-13T08:15:00.000Z"
}
],
"total": 16,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Query Parameters
1-based page index to return. Defaults to 1.
1 <= x <= 9007199254740991Rows per page, 1..100. Defaults to 20.
1 <= x <= 100Peripheral family filter: printer, scanner, payment-terminal (TPE), cash-drawer or customer-display.
1Hardware link-state filter: ready (online), disconnected, connecting, error or retired (unpaired). status=error triages hardware faults.
1Store REFERENCE filter: a store id from GET /v1/stores (e.g. store-rivoli), never a store name. This is how you read one shop's material without paging the whole fleet. A device paired before the store selector existed carries a store label and no storeId, so it matches NO value of this filter — read the fleet unfiltered when you need those legacy rows too.
1Field to order by: label or lastSeen.
label, lastSeen Order direction for sortField (default asc).
asc, desc Response
A page of fleet devices with the pagination totals.
A page of fleet devices with the pagination totals.
The rows on this page, in the query's sort order.
Show child attributes
Show child attributes
Total rows matching the filter across ALL pages, not just this one.
0 <= x <= 9007199254740991The 1-based page number served.
0 < x <= 9007199254740991Rows requested per page.
0 < x <= 9007199254740991Total number of pages; stop walking when page reaches it.
0 <= x <= 9007199254740991
