device_DeviceOperations

Update a specific DeviceOperation for a specific Operation

Changed on

Updates the recorded state of a single device's progress within a Dispatch operation.

Used to request cancellation for an individual device operation (instead of a larger fleetwide operation) by specifying the sate as CANCELLATION_REQUESTED. Cancellation is not guaranteed and depends the command's exact state.

About Update Device Operation

Each DeviceOperation record represents one device's slice of a larger Operation. As the underlying dispatch command progresses on the device side, the owning service reports the new state back through this endpoint, which then rolls up into the parent operation's aggregate stats (resolved, dispatched, failed, and success counts). Because this directly affects the parent operation's reported outcome, updates here should come from the service that owns the operation's execution rather than from ad hoc calls.

Key Fields / Request Body

operation_type — the operation type this device operation belongs to, for example CONVERGE

state — the new device operation state, for example SUCCESS

service_id — Optional. identifies the internal service reporting the update, for example drift-service

reason — free text explaining the state change

Common Use Cases

An internal service reporting that a device successfully completed its Converge action

Marking a device's operation as failed after the underlying command times out on the device

Best Practices

Only update state from the service that actually owns execution of the underlying command for that device

Always populate reason when reporting a failure so the cause is visible in the operation's activity history

Workflow

Identify the operationsId and deviceId for the device operation being updated

Determine the device's actual outcome from the underlying command or drift check

PUT the new state, service_id, and reason to this endpoint

Confirm the update is reflected in the parent operation's aggregate stats via GET /v0/operations/{operationId}/

put/v0/operations/{operationsId}/devices/{deviceId}/

Request

  • Base URL
    https://develop-api.esper.cloud/api
  • URL
    https://develop-api.esper.cloud/api/v0/operations/{operationsId}/devices/{deviceId}/
  • Auth
    HTTP bearer

Path parameters

operationsIdstring uuid required
Example:0aae03d2-32b4-4cab-b733-6919b84bb2ac

ID of the Operation

deviceIdstring uuid required
Example:550e8400-e29b-41d4-a716-446655440000

ID of the Device

Request body

operation_typestring

Optional; resolved from the database if not provided.

state'CANCELLATION_REQUESTED' required

The new state for the device operation. Only CANCELLATION_REQUESTED is supported for user-initiated updates. Cancellation is not guaranteed and depends on the command's current execution state on the device.

service_idstring
reasonstring

Example request

{
  "operation_type": "CONVERGE",
  "state": "CANCELLATION_REQUESTED",
  "service_id": "drift-service",
  "reason": "test"
}

Response

Device Operation updated successfully

Example response

{
  "content": {
    "device_operation_activity": [
      {
        "device_operation_state": "CREATED"
      }
    ]
  }
}

Changes

    • breaking

      request property was restricted to a list of enum values

    • info

      added the new CANCELLATION_REQUESTED enum value to the request property