Pair a device onto a register
Registers a new peripheral against a store’s register. This is an ONBOARDING operation performed while someone is physically installing hardware — it records the pairing, it does not connect to the device, so the paired row is bookkeeping until the till itself reports a link. The id is caller-supplied and permanent (use a stable slug such as reg-pilot-1-printer); 409s when a device already carries it. status defaults to disconnected, which is correct for a device that is not online yet — do not claim ready you have not observed. Do NOT send lastSeen: the server stamps it from its own clock and ignores yours. store and register are free-text display labels; copy the exact strings already used by the other devices on that register so the fleet listing stays groupable. PERMISSION TRAP (see solya-pos#950): the route guard accepts pos.settings.manage, but the use-case additionally asserts the kernel config:manage permission and NO pos.settings.* scope maps to it, so a principal authenticated by scopes alone clears the guard and then 403s inside the use-case.
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.
Body
Response
The paired device, with the server-stamped lastSeen.
The paired device, with the server-stamped lastSeen.
111111^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
