---
title: "Get Agent Conversation"
method: GET
path: "/internal/get-agent-conversation/{agent_run_id}"
tags: ["internal"]
---

# Get Agent Conversation

`GET /internal/get-agent-conversation/{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/internal/get-agent-conversation/{agent_run_id}`
- Auth: none declared

Fetch an agent run's conversation JSON, step groups, and a file listing.

## Path parameters

- `agent_run_id` string, uuid, required

## Response `200`

Successful Response

- AgentRunConversationResponse
  - `files` object, required
  - `conversation` object[], nullable, required
  - `groups` AgentRunStepGroupView[]
    - `group_id` string, uuid, required
    - `message_id` string, nullable, required
    - `first_step_id` string, uuid, required
    - `created` string, date-time, required
    - `duration_ms` integer, required
    - `step_count` integer, required
    - `tool_names` string[], required
    - `kinds` AgentRunStepKind[], required
  - `message_metadata` object
  - `steps` AgentRunStepView[]
    - `step_id` string, uuid, required
    - `group_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.
    - `message_id` string, nullable, required
    - `tool_use_id` string, nullable, required
    - `tool_name` string, nullable, required
    - `input` object, nullable, required
    - `content` string, nullable, required
    - `result` 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
    - `model` string, nullable, required
    - `input_tokens` integer, nullable, required
    - `output_tokens` integer, nullable, required
    - `duration_ms` integer, nullable, required
    - `created` string, date-time, required
  - `conversation_source` 's3' | 'steps', nullable

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-05** `eb329fb4c94a`: 2 info
  - added the optional property `conversation_source` to the response with the `200` status
  - added the optional property `steps` to the response with the `200` status

[Operation history](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/changes/internal/get-agent-conversation/:agent_run_id/get.md)

---

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