---
title: "Run metric reviews"
method: POST
path: "/test_framework/v3/metrics/{id}/run_reviews/"
tags: ["test_framework"]
---

# Run metric reviews

`POST /test_framework/v3/metrics/{id}/run_reviews/`

## Request

- Base URL: `https://api.cekura.ai`
- URL: `https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/`
- Auth: one of:
  - API key in header `X-CEKURA-API-KEY`
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer

Re-evaluate every review of the metric, optionally with overridden settings, and return each verdict next to its expected value. With `skip_save` the reviews are left unchanged. Each review is billed as a metric evaluation. Usually takes under a minute.

## Path parameters

- `id` string, required

## Request body

- RunReviewsRequest
  - `llm_provider` 'openai' | 'gemini' | 'dspy-gepa-gemini-flash' | 'deepseek-v4-flash': Override the judge provider while running unsaved Labs changes * `openai` - OpenAI * `gemini` - Gemini * `dspy-gepa-gemini-flash` - Dspy Gepa Gemini Flash * `deepseek-v4-flash` - DeepSeek V4 Flash
  - `evaluation_trigger` string: Override evaluation trigger setting
  - `evaluation_trigger_prompt` string: Override evaluation trigger prompt
  - `trigger_type` 'llm_judge' | 'custom_code': Override evaluation trigger implementation * `llm_judge` - LLM Judge * `custom_code` - Custom Code
  - `evaluation_trigger_custom_code` string: Override custom-code evaluation trigger
  - `description` string: Override metric description
  - `type` 'basic' | 'custom_prompt' | 'custom_code' | 'llm_judge': Override metric type * `basic` - Basic (Deprecated in favor of LLM Judge) * `custom_prompt` - Custom Prompt ( Deprecated in favor of LLM Judge) * `custom_code` - Custom Code * `llm_judge` - LLM Judge
  - `custom_code` string: Override custom code
  - `prompt` string: Override evaluation prompt
  - `metric_description_program` unknown
  - `metric_description_variables` unknown
  - `evaluation_trigger_program` unknown
  - `evaluation_trigger_variables` unknown
  - `skip_save` boolean: If true, don't save evaluation results to database (used for internal previews)

## Response `200`

- object
  - `status` 'completed' | 'failed': `failed` when the job could not produce its result; see `error` / `errors`.
  - `metric_id` integer
  - `agent_id` integer, nullable
  - `project_id` integer, nullable
  - `total_reviews` integer
  - `completed_reviews` integer
  - `failed_reviews` integer
  - `reviews_list` integer[]: Ids of the reviews evaluated.
  - `failed_reviews_list` integer[]: Ids of the reviews that could not be evaluated.
  - `metric` object: The metric, as the metrics API returns it.
  - `output` object[]: The metric's verdict next to the expected value, one per evaluated review.
    - `review_id` integer
    - `expected_value` unknown
    - `actual_value` unknown
    - `explanation` string, nullable
    - `feedback` string, nullable
  - `computed_results` object[]: Only with `skip_save`: the same items as `output`.

## Other responses

- `400`
- `403`: No access to the agent, project, metric or result the job runs on.
- `504`: The job did not finish within 15 minutes. It may still complete in the background.

## Changes

- **2026-11-03** `a6fb6a739212`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cekura/apis/cekura-api/changes/test_framework/v3/metrics/:id/run_reviews/post.md)

---

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