---
title: "Get full details of an analysis run"
method: GET
path: "/cleanse/run/{operationId}"
tags: ["Cleanse"]
---

# Get full details of an analysis run

`GET /cleanse/run/{operationId}`

Returns the complete operation state including per-phase progress,
live RPM statistics, and projected completion times.

## Path parameters

- `operationId` string, required

## Response `200`

Analysis run details

- CleanseAnalysisOperationDto
  - `id` string
  - `status` 'Running' | 'Completed' | 'Failed' | 'Cancelling' | 'Cancelled'
  - `startedAtUtc` string, date-time
  - `completedAtUtc` string, date-time, nullable
  - `progressPercentage` number, double — Weighted aggregate across all phases (0-100)
  - `statusDescription` string
  - `recordsAnalyzed` integer
  - `totalRecords` integer
  - `issuesFound` integer
  - `issuesResolved` integer
  - `error` string, nullable
  - `durationMs` integer, nullable
  - `reportObjectKey` string, nullable
  - `reportUrl` string, nullable
  - `finalAverageRpm` number, double, nullable
  - `cancelledAtUtc` string, date-time, nullable
  - `progress` OperationNode, nullable — Immutable snapshot of a single node in the operation tree. Combines timing, progress, and rate metrics into one self-describing recursive structure. The root node is named "total" with phase children (Analysis, Deactivation, Export) that may contain further sub-scopes.
    - `name` string — Node name (e.g. "total", "Analysis", "CTS Pump", "fetching").
    - `status` 'not-started' | 'in-progress' | 'completed' | 'failed' | 'cancelled' — Current status of this node.
    - `description` string, nullable — Human-readable description of what this node is doing.
    - `percentComplete` number, double, nullable — Progress percentage (0-100). Leaf nodes compute from processedCount/totalRecords; parent nodes use weighted average of children.
    - `processedCount` integer, nullable — Number of records processed so far in this scope.
    - `totalRecords` integer, nullable — Total records expected in this scope.
    - `elapsedMs` integer — Cumulative elapsed time in milliseconds.
    - `elapsed` string — Formatted elapsed time (e.g. "00:07:42.3").
    - `projectedRemainingMs` integer, nullable — Estimated remaining time in milliseconds based on current throughput.
    - `projectedEndTimeUtc` string, date-time, nullable — Projected completion time based on current throughput.
    - `currentRecordsPerMinute` number, double, nullable — Windowed records-per-minute rate (last 60 seconds).
    - `averageRecordsPerMinute` number, double, nullable — Average records-per-minute rate since the scope started.
    - `children` OperationNode[], nullable — Child nodes forming a recursive tree.

## Other responses

- `404` — Operation not found
- `499` — Client closed request

---

[API](https://skmtc.net/defra/apis/keeper-data-bridge-api.md) · [All operations](https://skmtc.net/defra/apis/keeper-data-bridge-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/defra/keeper-data-bridge-api/versions/0ab7d7a7a24f/schema)
