---
title: "Get specific Operation details (Operation Status)"
method: GET
path: "/v0/operations/{operationId}/"
tags: ["device_Operations"]
---

# Get specific Operation details (Operation Status)

`GET /v0/operations/{operationId}/`

Retrieves the full status and aggregate device counts for a single Dispatch operation.

Use this endpoint to check whether a Converge, install, or uninstall operation has resolved, how many devices it reached, and how many succeeded or failed. The operation_stats object gives the aggregate breakdown, while operation_activity gives a timestamped history of the operation's state transitions.

**About Operation Status**

An Operation moves through Created, Query Initiated, Query Resolved, Dispatching, Dispatched, Processing, and finally Success or Failure. The operation is only marked Success once every applicable device has executed the command successfully; a single device failure marks the whole operation Failure. Operations can remain indefinitely in Dispatched or Processing if devices are not picking up the command, which is usually a sign of network connectivity issues rather than a problem with the operation itself.

**Common Use Cases**

Polling an operation after creation to confirm it reached Success

Checking operation_stats to see how many of a large batch of devices failed a Converge action

Reviewing operation_activity to see how long an operation spent in each lifecycle state

**Best Practices**

Treat a Failure state as meaning at least one device failed, not that the entire batch failed; check operation_stats.failed_device_count for the real scope

If an operation is stuck in Dispatched or Processing, check the affected devices' connectivity rather than re-issuing the operation immediately

Use the state query parameter on GET /v0/operations/ to find other operations in the same state if you suspect a systemic issue

**Workflow**

Create the operation with POST /v0/operations/ and capture the returned id

Poll this endpoint until state reaches a terminal value

If state is Failure, call GET /v0/operations/{operationsId}/devices/ to identify which devices failed

Re-drive the operation for the failed devices once their connectivity is confirmed

## Path parameters

- `operationId` string, uuid, required

## Response `200`

Operation information for the Tenant

- object
  - `content` DeviceOperationWithStats
    - `id` string, uuid
    - `operation` 'CONVERGE'
    - `state` 'CREATED' | 'RESOLVING' | 'RESOLVED' | 'DISPATCHING' | 'COMPLETED' | 'FAILED'
    - `schedule_type` 'IMMEDIATE' | 'WINDOW' — Following Schedule types are supported ``` * IMMEDIATE: Schedule the command to execcute Immediately * WINDOW: Schedule the command to execute within the given window
    - `schedule_args` DeviceScheduleArgs
      - `start_datetime` string, date-time — Start date and time in ISO 8601 format, including timezone (e.g., 2024-08-08T14:30:00Z or 2024-08-08T14:30:00+05:30).
      - `end_datetime` string, date-time — End date and time in ISO 8601 format, including timezone (e.g., 2024-08-08T15:30:00Z or 2024-08-08T15:30:00+05:30).
      - `time_type` 'console' | 'device' — The Time-Type argument, in Schedule args, is to indicate which timezone the Command Framework should utilize when scheduling the command. Following Schedule Args for Time-Type are supported: ``` * CONSOLE: Use the local timezone of the user creating the schedule. * DEVICE: Use the local timezone of the device, to which the command is issued, wherever it may be. ```
      - `window_start_time` string, date-time — It is automatically populated by the time field from the request's start_datetime and cannot be injected via the API request body.
      - `window_end_time` string, date-time — It is automatically populated by the time field from the request's end_datetime and cannot be injected via the API request body.
      - `days` integer[]
    - `operation_device_query` object
    - `arguments` object
      - `converge_with_provision` boolean
      - `sample_key` string
      - `geofence_ids` string[] — List of geofence UUIDs to apply (APPLY_GEO_FENCE).
    - `reason` string
    - `created_at` string, date-time
    - `created_by` string, uuid
    - `updated_at` string, date-time
    - `updated_by` string, uuid
    - `operation_activity` object[]
      - `operation_state` 'CREATED' | 'QUERY INITIATED' | 'QUERY RESOLVED' | 'DISPATCHING' | 'DISPATCHED' | 'PROCESSING' | 'PROCESSED' | 'SUCCESS' | 'FAILURE' | 'CANCELLED'
      - `created_at` string, date-time
    - `operation_stats` DeviceOperationStats
      - `device_operation_statuses_count` object
        - `resolved_device_count` integer
        - `dispatched_device_count` integer
        - `dispatch_failed_count` integer
        - `failed_device_count` integer
        - `success_device_count` integer
        - `cancelled_device_count` integer

---

[API](https://skmtc.net/esper/apis/esper-api-reference.md) · [All operations](https://skmtc.net/esper/apis/esper-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/esper/esper-api-reference/revisions/e1f64cbb488e/schema)
