---
title: "Get Research Run"
method: GET
path: "/risk-assessment/research-runs/{agent_run_id}"
tags: ["risk-assessment"]
---

# Get Research Run

`GET /risk-assessment/research-runs/{agent_run_id}`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/risk-assessment/research-runs/{agent_run_id}`
- Auth: none declared

## Path parameters

- `agent_run_id` string, uuid, required

## Response `200`

Successful Response

- ResearchRunDetail
  - `agent_run_id` string, uuid, required
  - `vendor_id` string, uuid, required
  - `status` 'pending' | 'running' | 'completed' | 'failed', required
  - `created` string, date-time, required
  - `started_at` string, date-time, nullable, required
  - `finished_at` string, date-time, nullable, required
  - `error` string, nullable, required
  - `dossier` DossierRef, required
    - `artifact_id` string, uuid, required
    - `title` string, required
    - `step_count` integer, nullable
    - `source_count` integer, nullable
  - `steps` StepView[]
    - `step_id` string, uuid, required
    - `ordinal` integer, required
    - `kind` 'thinking' | 'tool_call' | 'verdict', required: One `agent_run_steps` row per unit of agent activity. VERDICT is a terminal `submit_*` step (the risk-factor subagent's rating, or a control-assessment's check label + answer); the research agent only emits THINKING/TOOL_CALL rows. A tool declares its own kind via `AgentTool.step_kind`, so the loop knows it before the row is written.
    - `group_id` string, uuid, required
    - `tool_use_id` string, nullable, required
    - `tool_name` string, nullable, required
    - `input` object, nullable, required
    - `content` string, nullable, required
    - `result_preview` unknown, required
    - `result_state` 'ok' | 'empty' | 'error' | 'timeout', required: Outcome of a TOOL_CALL step. NULL on the row means still in flight. EMPTY is distinct from ERROR: a tool that ran successfully and found nothing (e.g. an empty web search) is not a failure.
    - `result_summary` string, nullable, required
    - `result_bytes` integer, nullable, required
    - `model` string, nullable, required
    - `input_tokens` integer, nullable, required
    - `output_tokens` integer, nullable, required
    - `started_at` string, date-time, nullable, required
    - `duration_ms` integer, nullable, required
    - `cited_in_verdict` boolean
    - `risk_factor_id` string, uuid, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/fastapi.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/fastapi/revisions/8587332d5e43?raw)
