---
title: "Update run review"
method: PUT
path: "/api/v1/runs/{id}/reviews"
tags: ["Reviews"]
---

# Update run review

`PUT /api/v1/runs/{id}/reviews`

Create or replace review metadata for a run.

## Path parameters

- `id` string, required — Run id.

## Request body

- RunReviewRequest — Create or replace review metadata for a run. Attribution fields (`reviewedBy`, `closedBy`, and their emails) are read-only and populated from the authenticated user or API key creator.
  - `verdict` 'correct' | 'incorrect', nullable — Reviewer verdict. Omit or send null for feedback without a ranking (nit). Defaults are applied client-side only; any verdict/status combination is accepted.
  - `status` 'open' | 'closed' | 'wont_fix' — Review lifecycle. Defaults from verdict (`correct` → `closed`, otherwise `open`). Use `closed` or `wont_fix` to close an open review.
  - `note` string, nullable — Reviewer note.
  - `correctedOutput` unknown
  - `corrections` object[] — Field and file corrections. When present, replaces the entire correction set for this review. Omit to leave existing corrections unchanged.
    - `id` string
    - `kind` 'field' | 'file', required
    - `path` string, required
    - `label` string, nullable
    - `originalValue` unknown
    - `correctedValue` unknown
    - `note` string, nullable
    - `correctedArtifactPath` string, nullable

## Response `200`

Updated run review metadata.

- RunReviewDetail
  - `review` RunReview, required
    - `id` string, required
    - `verdict` 'correct' | 'incorrect', nullable, required
    - `status` 'open' | 'closed' | 'wont_fix', required
    - `note` string, required
    - `correctedOutput` unknown
    - `reviewedBy` string, nullable, required — User id of the last reviewer. Read-only; set from the authenticated user or API key creator.
    - `reviewedByEmail` string, nullable, required — Email of the last reviewer. Read-only; set from the authenticated user or API key creator.
    - `reviewedAt` string, required
    - `closedBy` string, nullable, required — User id recorded when the review was closed. Read-only; set when status becomes closed or wont_fix.
    - `closedByEmail` string, nullable, required — Email recorded when the review was closed. Read-only; set when status becomes closed or wont_fix.
    - `closedAt` string, nullable, required
    - `closedNote` string, nullable, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `corrections` RunReviewCorrection[], required
      - `id` string, required
      - `kind` 'field' | 'file', required
      - `path` string, required — JSON Pointer for field corrections, or canonical artifact path for file reviews.
      - `label` string, nullable, required
      - `originalValue` unknown
      - `correctedValue` unknown
      - `note` string, required
      - `correctedArtifactPath` string, nullable
      - `createdAt` string, required
      - `updatedAt` string, required

## Other responses

- `400` — Validation error. Request shape did not match the spec.
- `401` — Missing or invalid API key
- `403` — API key lacks required scope
- `404` — Resource not found
- `413` — Payload too large. Upload exceeded the per-request size cap.
- `429` — Rate limit exceeded
- `500` — Internal server error

---

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