---
title: "One run, from all three records, with its diagnostic counts"
method: GET
path: "/v1/admin/runs/{id}"
tags: ["runs"]
---

# One run, from all three records, with its diagnostic counts

`GET /v1/admin/runs/{id}`

## Request

- Base URL: `https://api.hyperresearch.ai`
- URL: `https://api.hyperresearch.ai/v1/admin/runs/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `hr_session`

The D1 control row, the RunAgent manifest summary (including the `x_cloud.internal` the customer manifest strips), what the Workflow engine says about the instance behind the run, the clarification state stored on the row, and a histogram of every event kind the run log holds — so "did a provider refuse anything?" and "did that fan-out resolve to one?" are answered before any page of the log is read. Cross-workspace, audited, read only.

## Path parameters

- `id` string, required

## Response `200`

The run

- OperatorRunDetail
  - `run` OperatorRunRow, required
    - `id` string, required
    - `workspace_id` string, required
    - `status` string, required
    - `tier` string, required
    - `profile` string, required
    - `channel` string, required
    - `created_at` string, required
    - `started_at` string, nullable, required
    - `finished_at` string, nullable, required
    - `progress_at` string, nullable, required
    - `duration_ms` integer, nullable, required
    - `step_id` string, nullable, required
    - `step_name` string, nullable, required
    - `steps_done` integer, nullable, required
    - `steps_total` integer, nullable, required
    - `chapters_total` integer, nullable, required
    - `blocked_on` string, nullable, required
    - `failure_reason` string, nullable, required
    - `failure_detail` string, nullable, required: The raw platform/vendor text behind the failure. Operator surface: this is exactly the field the customer-facing run view replaces with a sentence from the failure-reason table.
    - `failure_request_id` string, nullable, required
    - `sources_fetched` integer, nullable, required
    - `notes_written` integer, nullable, required
    - `candidates_seen` integer, nullable, required
    - `fetch_attempts` integer, nullable, required
    - `report_words` integer, nullable, required
    - `price_cents` integer, nullable, required
    - `billed` integer, nullable, required
    - `launch_state` string, nullable, required
    - `launch_attempts` integer, nullable, required
    - `project_id` string, nullable, required
  - `manifest` object, nullable, required: Null for a run that never reached `init`: queued, or launched and gone.
    - `status` string, required
    - `profile` string, required
    - `started_at` string, nullable, required
    - `updated_at` string, nullable, required
    - `blocked_on` string, nullable, required
    - `steps_total` integer, required
    - `steps_done` integer, required
    - `steps_unfinished` object[], required
      - `step` string, required
      - `status` string, required
    - `chapters` object[], required
      - `id` string, required
      - `status` string, nullable, required
      - `title` string, nullable, required
    - `spend` object, nullable, required
    - `internal` unknown
  - `instance` object, nullable, required: What the Workflow engine says about this run. The one record not written BY the run — when a run dies without executing any more of our code, the row and the manifest both still say it is fine and this is the only witness (fault 71). Null when there is no instance to ask, which is the normal answer for a queued run.
    - `id` string, required: The Workflow instance that was asked: the run id, or `<run id>-finish<n>` for a run whose `finish` was re-entered (0039).
    - `status` string, required: The Workflow engine's own state: `queued`, `running`, `paused`, `waiting`, `waitingForPause`, `errored`, `terminated`, `complete`, `unknown`. `errored`/`terminated`/`complete` against an active `run.status` is a run whose worker is gone — what the instance watchdog settles.
    - `error` string, nullable, required: The engine's error text on an `errored` instance, e.g. "Too many API requests by single Worker invocation". Operator only; it never reaches a customer sentence.
  - `counts` object, required: Every kind that appears in the run log, with how often.
    - `counted` integer, required
    - `truncated` boolean, required: True when the log is longer than the bounded walk; the counts are then a floor, not a total.
    - `last_seq` integer, required
    - `provider_rejected` integer, required
    - `fanout` integer, required: `fanout` plus `wave-fanout`.
    - `error` integer, required
    - `warning` integer, required
    - `by_kind` object, required
  - `clarification` object, nullable, required
    - `status` string, nullable, required
    - `resolution` string, nullable, required
    - `skip_reason` string, nullable, required: Why the ambiguity assessment was skipped, from `runs.clarifications_json`. This is the durable trace of the `clarify_assessment_skipped` log line, which is otherwise only a `console.warn`.
    - `round` integer, nullable, required
    - `questions` integer, required
    - `answers` integer, required

## Other responses

- `400`: Invalid request
- `401`: Authentication failed
- `403`: Insufficient scope or plan
- `404`: Not found
- `429`: Rate limited or over quota
- `500`: Internal error

---

[API](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api.md) · [All operations](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/revisions/726ef831ebf4?raw)
