openapi: 3.2.0 info: title: ActionStreamer Device Health API description: 'A web API for the ActionStreamer platform. Publish date: 2026-07-07 16:13:41 UTC' termsOfService: https://actionstreamer.com/terms-of-use contact: name: Contact url: https://actionstreamer.com/company version: v1 tags: - name: Device Health paths: /v1/devicehealth/{deviceHealthID}: get: tags: - Device Health summary: Gets a device health record by ID parameters: - name: deviceHealthID in: path description: The ID of the device health record to retrieve. required: true style: simple schema: type: integer format: int64 example: 1 responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DeviceHealth' example: key: 1 deviceID: 201 healthDate: '2026-03-30T12:00:00.0000000Z' healthJSON: Example value creationDate: '2026-03-30T12:00:00.0000000Z' operationId: getV1DevicehealthByDeviceHealthID x-operation-id-source: derived put: tags: - Device Health summary: Updates a device health record description: 'Request body: JSON object. Updates the stored `healthJSON` for the specified record after validating device ownership.' parameters: - name: deviceHealthID in: path description: The ID of the device health record to update. required: true style: simple schema: type: integer format: int64 example: 1 requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDeviceHealth' example: deviceName: WearableDevice deviceSerial: '10001234' healthJSON: Example value required: true responses: '200': description: Success content: application/json: example: deviceHealthID: 501 operationId: putV1DevicehealthByDeviceHealthID x-operation-id-source: derived /v1/devicehealth/getlatest/{deviceID}: get: tags: - Device Health summary: Gets the latest device health record for a device parameters: - name: deviceID in: path description: The ID of the device whose latest health record should be returned. required: true style: simple schema: type: integer format: int64 example: 1 responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DeviceHealth' example: key: 1 deviceID: 201 healthDate: '2026-03-30T12:00:00.0000000Z' healthJSON: Example value creationDate: '2026-03-30T12:00:00.0000000Z' operationId: getV1DevicehealthGetlatestByDeviceID x-operation-id-source: derived /v1/devicehealth/list: post: tags: - Device Health summary: Gets the device health list description: 'Request body: JSON object. Requires `deviceID`, converts the epoch range to dates internally, and limits the result count to 5000. The `order` field is accepted but is not currently used.' requestBody: content: application/json: schema: $ref: '#/components/schemas/EpochAndCountFilter' example: deviceID: 201 startEpoch: 1711800000 endEpoch: 1711800000 count: 25 order: Example value videoClipTypeID: 1 required: true responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/DeviceHealth' example: - key: 1 userID: 101 deviceID: 201 healthDate: '2026-03-30T12:00:00.0000000Z' healthJSON: Example value creationDate: '2026-03-30T12:00:00.0000000Z' createdBy: 1 lastModifiedDate: '2026-03-30T12:00:00.0000000Z' lastModifiedBy: 1 example: - key: 1 deviceID: 201 healthDate: '2026-03-30T12:00:00.0000000Z' healthJSON: Example value creationDate: '2026-03-30T12:00:00.0000000Z' operationId: postV1DevicehealthList x-operation-id-source: derived /v1/device/list/health: get: tags: - Device Health summary: Gets device health rows for the authenticated user's devices description: Use the optional `status=online` query parameter to return only online devices. responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/DeviceHealthRow' example: - key: 201 deviceName: WearableDevice serialNumber: '10001234' batteryStatus: Example value batteryPercent: 42.5 batteryVoltage: 1 cpuTemp: 1 gpuTemp: 1 cpuPercent: Example value accessPointName: Example value networkAlias: Example value frequency: 1 linkQuality: Example value signalStrength_dBm: 1 transferBitrate_Mbps: 1 deviceStatus: Example value cameraStatus: online cameraActivity: Example value tunnelStatus: Example value softwareVersion: 1.0.0 lastHeardFromDate: '2026-03-30T12:00:00.0000000Z' lastVideoClipDate: '2026-03-30T12:00:00.0000000Z' softwareDeployDate: '2026-03-30T12:00:00.0000000Z' example: - key: 201 deviceName: WearableDevice serialNumber: '10001234' batteryStatus: Example value batteryPercent: 42.5 batteryVoltage: 1 cpuTemp: 1 gpuTemp: 1 cpuPercent: Example value accessPointName: Example value networkAlias: Example value frequency: 1 linkQuality: Example value signalStrength_dBm: 1 transferBitrate_Mbps: 1 deviceStatus: Example value cameraStatus: online cameraActivity: Example value tunnelStatus: Example value softwareVersion: 1.0.0 lastHeardFromDate: '2026-03-30T12:00:00.0000000Z' lastVideoClipDate: '2026-03-30T12:00:00.0000000Z' softwareDeployDate: '2026-03-30T12:00:00.0000000Z' operationId: getV1DeviceListHealth x-operation-id-source: derived /v1/device/{deviceID}/health/linechart: post: tags: - Device Health summary: Gets line chart data for a device health variable description: 'Request body: JSON object with a variable name and optional epoch range, count, and vertical line timestamps. Returns line chart data.' parameters: - name: deviceID in: path description: The ID of the device whose line chart data should be generated. required: true style: simple schema: type: integer format: int64 example: 1 requestBody: content: application/json: schema: $ref: '#/components/schemas/LineChartArgs' example: startEpoch: 1711800000 endEpoch: 1711800000 count: 25 variableName: Example value verticalLineTimestamps: - 1 required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/LineChartResponse' example: datasets: - label: Example value data: - null verticalLines: - timestamp: 1 color: Example value operationId: postV1DeviceByDeviceIDHealthLinechart x-operation-id-source: derived /v1/devicehealth: post: tags: - Device Health summary: Creates a device health record description: 'Request body: JSON object. Accepts either `deviceSerial` or `deviceName`. If `healthJSON.time.datetime` contains a valid epoch in milliseconds, it is used for `healthDate`; otherwise the server uses the current UTC time.' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDeviceHealth' example: deviceName: WearableDevice deviceSerial: '10001234' healthJSON: Example value required: true responses: '200': description: Success content: application/json: example: deviceHealthID: 501 operationId: postV1Devicehealth x-operation-id-source: derived /v1/devicehealth/updatelatest: post: tags: - Device Health summary: Updates the latest device health record for a device description: 'Request body: JSON object. Updates the latest device health state and returns the affected device health record ID.' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDeviceHealth' example: deviceName: WearableDevice deviceSerial: '10001234' healthJSON: Example value required: true responses: '200': description: Success content: application/json: example: deviceHealthID: 501 operationId: postV1DevicehealthUpdatelatest x-operation-id-source: derived components: schemas: Dataset: type: object properties: label: type: - string - 'null' example: Example value data: type: - array - 'null' items: $ref: '#/components/schemas/DataPoint' example: - time: 1 value: -4 additionalProperties: false example: label: Example value data: - time: 1 value: -4 DataPoint: type: object properties: time: type: integer format: int64 example: 1 value: type: number format: double example: 1 additionalProperties: false example: time: 1 value: -4 DeviceHealthRow: type: object properties: key: type: integer format: int64 example: 1 deviceName: type: - string - 'null' example: Example value serialNumber: type: - string - 'null' example: Example value batteryStatus: type: - string - 'null' example: Example value batteryPercent: type: number format: double example: 1 batteryVoltage: type: number format: double example: 1 cpuTemp: type: number format: double example: 1 gpuTemp: type: number format: double example: 1 cpuPercent: type: - string - 'null' example: Example value accessPointName: type: - string - 'null' example: Example value networkAlias: type: - string - 'null' example: Example value frequency: type: number format: double example: 1 linkQuality: type: - string - 'null' example: Example value signalStrength_dBm: type: number format: double example: 1 transferBitrate_Mbps: type: number format: double example: 1 deviceStatus: type: - string - 'null' example: Example value cameraStatus: type: - string - 'null' example: Example value cameraActivity: type: - string - 'null' example: Example value tunnelStatus: type: - string - 'null' example: Example value softwareVersion: type: - string - 'null' example: Example value lastHeardFromDate: type: - string - 'null' format: date-time example: '2026-03-30T12:00:00.0000000Z' lastVideoClipDate: type: - string - 'null' format: date-time example: '2026-03-30T12:00:00.0000000Z' softwareDeployDate: type: - string - 'null' format: date-time example: '2026-03-30T12:00:00.0000000Z' additionalProperties: false example: key: 201 deviceName: WearableDevice serialNumber: '10001234' batteryStatus: Example value batteryPercent: 42.5 batteryVoltage: 1 cpuTemp: 1 gpuTemp: 1 cpuPercent: Example value accessPointName: Example value networkAlias: Example value frequency: 1 linkQuality: Example value signalStrength_dBm: 1 transferBitrate_Mbps: 1 deviceStatus: Example value cameraStatus: online cameraActivity: Example value tunnelStatus: Example value softwareVersion: 1.0.0 lastHeardFromDate: '2026-03-30T12:00:00.0000000Z' lastVideoClipDate: '2026-03-30T12:00:00.0000000Z' softwareDeployDate: '2026-03-30T12:00:00.0000000Z' DeviceHealth: type: object properties: key: type: integer format: int64 example: 1 deviceID: type: integer format: int64 example: 1 healthDate: type: - string - 'null' format: date-time example: '2026-03-30T12:00:00.0000000Z' healthJSON: type: - string - 'null' example: Example value creationDate: type: - string - 'null' format: date-time example: '2026-03-30T12:00:00.0000000Z' additionalProperties: false example: key: 1 deviceID: 201 healthDate: '2026-03-30T12:00:00.0000000Z' healthJSON: Example value creationDate: '2026-03-30T12:00:00.0000000Z' LineChartResponse: type: object properties: datasets: type: - array - 'null' items: $ref: '#/components/schemas/Dataset' example: - label: Example value data: - time: null value: null verticalLines: type: - array - 'null' items: $ref: '#/components/schemas/VerticalLine' example: - timestamp: 1 color: Example value additionalProperties: false example: datasets: - label: Example value data: - null verticalLines: - timestamp: 1 color: Example value VerticalLine: type: object properties: timestamp: type: integer format: int64 example: 1 color: type: - string - 'null' example: Example value additionalProperties: false example: timestamp: 1 color: Example value LineChartArgs: type: object properties: startEpoch: type: - integer - 'null' format: int64 example: 1 endEpoch: type: - integer - 'null' format: int64 example: 1 count: type: - integer - 'null' format: int64 example: 1 variableName: type: - string - 'null' example: Example value verticalLineTimestamps: type: - array - 'null' items: type: integer format: int64 example: 1 example: - 1 additionalProperties: false example: startEpoch: 1711800000 endEpoch: 1711800000 count: 25 variableName: Example value verticalLineTimestamps: - 1 EpochAndCountFilter: type: object properties: deviceID: type: integer format: int64 example: 1 startEpoch: type: - integer - 'null' format: int64 example: 1 endEpoch: type: - integer - 'null' format: int64 example: 1 count: type: - integer - 'null' format: int64 example: 1 order: type: - string - 'null' example: Example value videoClipTypeID: type: - integer - 'null' format: int64 example: 1 additionalProperties: false example: deviceID: 201 startEpoch: 1711800000 endEpoch: 1711800000 count: 25 order: Example value videoClipTypeID: 1 CreateDeviceHealth: type: object properties: deviceName: type: - string - 'null' example: Example value deviceSerial: type: - string - 'null' example: Example value healthJSON: type: - string - 'null' example: Example value additionalProperties: false example: deviceName: WearableDevice deviceSerial: '10001234' healthJSON: Example value