---
title: "Public Submit Review"
method: POST
path: "/v1/review"
tags: ["public-api"]
---

# Public Submit Review

`POST /v1/review`

Submit a review verdict on a trace (TRA-1052) — the write half of
the queue above, so Claude agents review through the same flow humans
do.

Same upsert as the app's review composer: reviewing a dreamer/eval
flag settles that row (its flag `source` is preserved, exactly as a
human review would), and a trace nobody flagged gets a fresh
`source='agent'` row. The one divergence: a row a HUMAN created is
409 — the API must not silently replace a person's verdict while the
row still displays as theirs.

## Headers

- `authorization` string, nullable

## Request body

- PublicReviewSubmit — POST /v1/review body — an agent's verdict on one trace (TRA-1052). Upsert by trace_id, same semantics as the app's review composer. `trace_id` and `trace_key` come verbatim from a GET /v1/review/queue row. `review_status` is restricted to the terminal states: submitting a review settles the row, and injecting fresh 'unreviewed' flags is the dream scan's job, not the API's.
  - `trace_id` string, required
  - `trace_key` string, required
  - `approved` boolean, required
  - `notes` string
  - `review_status` 'reviewed' | 'dismissed'

## Response `200`

Successful Response

- PublicReviewSubmitResponse — The saved review as served on /v1 — the label row minus internals (`team_id`, `pr_url`, raw `created_by`), matching the queue item shape.
  - `label_id` string, uuid, required
  - `trace_id` string, required
  - `review_status` 'unreviewed' | 'reviewed' | 'dismissed' | 'held', required
  - `approved` boolean, required
  - `notes` string, required
  - `source` 'human' | 'dreamer' | 'eval' | 'agent', required
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/trainloop/apis/trainloop-api.md) · [All operations](https://skmtc.dev/trainloop/apis/trainloop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trainloop/trainloop-api/revisions/aedb0e4b59f8/schema)
