---
title: "Accept Training Run"
method: POST
path: "/risk-assessment/training-runs/{training_run_id}/accept"
tags: ["risk-assessment"]
---

# Accept Training Run

`POST /risk-assessment/training-runs/{training_run_id}/accept`

## 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/training-runs/{training_run_id}/accept`
- Auth: none declared

Adopt the proposed guidance, and with it the experiment that justified it.

Two things move together on purpose: the factor's active guidance (which
changes every future run, for **every vendor**) and this factor's displayed
result, which becomes the winning experiment's rating and citations. A
rewrite the reviewer accepts without seeing its effect applied would leave
the page contradicting the decision.

## Path parameters

- `training_run_id` string, uuid, required

## Response `200`

Successful Response

- TrainingRunSummary
  - `training_run_id` string, uuid, required
  - `factor_assessment_id` string, uuid, required
  - `status` 'pending' | 'running' | 'completed' | 'failed', required
  - `outcome` 'promoted' | 'gave_up', required: How a `RiskFactorTrainingAgentRun` ended. Both are terminal tool calls, not failures: an agent that cannot justify a rewrite is expected to GIVE_UP with questions rather than promote one.
  - `proposal_status` 'active' | 'proposed' | 'hidden' | 'inactive', required: Where one `risk_factor_versions` row stands. A factor's name and slug are permanent; its description, assessment guidance, rating rubric and applicability logic are versioned, so a rewrite never destroys the text that produced historical ratings. ACTIVE is what the next assessment run uses, and a partial unique index (`uq_risk_factor_versions_one_active`) enforces at most one per factor. HIDDEN is a training agent's working draft — created mid-run and never shown to a reviewer. PROPOSED is a draft the agent promoted and the reviewer has not yet accepted or rejected. INACTIVE covers both "superseded" and "rejected"; the two are distinguishable from the training run's outcome.
  - `created` string, date-time, required
  - `started_at` string, date-time, nullable, required
  - `finished_at` string, date-time, nullable, required
  - `experiment_count` integer, required
  - `error` string, nullable, required

## 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)
