devices
📄️ Fetch the server-authoritative desired state for a device, including active binding, model entries, and policy config.
Fetch the server-authoritative desired state for a device, including active binding, model entries, and policy config.
📄️ Fetch a single device by id. Dashboard's device detail page, plus any operator workflow that needs the full row (assignm
Fetch a single device by id. Dashboard's device detail page, plus any operator workflow that needs the full row (assignments, labels, capability profile, last heartbeat).
📄️ Partial update of a device. Operators use this to tag devices with labels (steering them into DeviceGroup label-selector
Partial update of a device. Operators use this to tag devices with labels (steering them into DeviceGroup label-selector membership), rename, or flip status (e.g. archive a decommissioned camera). Cannot rotate auth tokens — use devices.revoke + devices.register for that.
📄️ Return the most recently uploaded camera frame for a device. Backs the dashboard's 'Latest frames' tile + device detail
Return the most recently uploaded camera frame for a device. Backs the dashboard's 'Latest frames' tile + device detail page. Polled at ~5s cadence; matches the iPad SDK's upload interval so faster polling has no benefit.
📄️ Periodic device-health ping. Reports operational telemetry and pulls server-side control directives. PUT (not POST) beca
Periodic device-health ping. Reports operational telemetry and pulls server-side control directives. PUT (not POST) because every call is idempotent — replaying the same heartbeat shouldn't double-count anything; the server uses the latest payload as the device's current state.
📄️ List devices for the authenticated org with optional filters. Results are enriched with the winning DeviceAssignment. Su
List devices for the authenticated org with optional filters. Results are enriched with the winning DeviceAssignment. Supports offset-based pagination. Label filters use bracket notation: label[key]=value.
📄️ Return a chronological activity feed for a device. Powers the 'Activity' timeline on the device detail page.
Return a chronological activity feed for a device. Powers the 'Activity' timeline on the device detail page.
📄️ List every DeviceGroup the device belongs to. Powers the 'Groups' panel on the device detail page.
List every DeviceGroup the device belongs to. Powers the 'Groups' panel on the device detail page.
📄️ Report the device's current observed state to the server. Used by the control plane for fleet health monitoring and drif
Report the device's current observed state to the server. Used by the control plane for fleet health monitoring and drift detection.
📄️ Retrieve device capability profiles. Profiles are the output of the device-classifier service that scores devices agains
Retrieve device capability profiles. Profiles are the output of the device-classifier service that scores devices against catalog variants.
📄️ Register or re-register a device with the org. Idempotent on (org_id, device_identifier): re-registration updates fields
Register or re-register a device with the org. Idempotent on (org_id, device_identifier): re-registration updates fields and rotates tokens but keeps the same Device.id. SDKs call this once at first launch and again whenever the persisted token is invalidated.
📄️ Mark a device as revoked. Sets Device.status to 'revoked' and recomputes connectivity_status. The server does NOT invali
Mark a device as revoked. Sets Device.status to 'revoked' and recomputes connectivity_status. The server does NOT invalidate outstanding device tokens at this layer — token revocation is a separate concern handled by DeviceTokenService.revoke_all_sessions, which this route does not call. SDKs that need both should additionally invoke the token-revocation flow.
📄️ Unified sync endpoint that combines desired state fetch and observed state report into a single round-trip. Client sends
Unified sync endpoint that combines desired state fetch and observed state report into a single round-trip. Client sends inventory + observed state, server returns desired state + directives. Supersedes separate devices.desired_state and devices.observed_state calls for new SDKs.
📄️ Upload the latest camera frame as a JPEG. Replaces any previously uploaded frame for this device. Used by the iPad / And
Upload the latest camera frame as a JPEG. Replaces any previously uploaded frame for this device. Used by the iPad / Android SDKs' `ThumbnailUploader` to feed the dashboard's deployment-detail 'Latest frames' tile.