curl --request POST \
--url https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"evaluation_trigger": "<string>",
"evaluation_trigger_prompt": "<string>",
"evaluation_trigger_custom_code": "<string>",
"description": "<string>",
"custom_code": "<string>",
"prompt": "<string>",
"metric_description_program": "<unknown>",
"metric_description_variables": "<unknown>",
"evaluation_trigger_program": "<unknown>",
"evaluation_trigger_variables": "<unknown>",
"skip_save": false
}
'import requests
url = "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/"
payload = {
"evaluation_trigger": "<string>",
"evaluation_trigger_prompt": "<string>",
"evaluation_trigger_custom_code": "<string>",
"description": "<string>",
"custom_code": "<string>",
"prompt": "<string>",
"metric_description_program": "<unknown>",
"metric_description_variables": "<unknown>",
"evaluation_trigger_program": "<unknown>",
"evaluation_trigger_variables": "<unknown>",
"skip_save": False
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
evaluation_trigger: '<string>',
evaluation_trigger_prompt: '<string>',
evaluation_trigger_custom_code: '<string>',
description: '<string>',
custom_code: '<string>',
prompt: '<string>',
metric_description_program: '<unknown>',
metric_description_variables: '<unknown>',
evaluation_trigger_program: '<unknown>',
evaluation_trigger_variables: '<unknown>',
skip_save: false
})
};
fetch('https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'evaluation_trigger' => '<string>',
'evaluation_trigger_prompt' => '<string>',
'evaluation_trigger_custom_code' => '<string>',
'description' => '<string>',
'custom_code' => '<string>',
'prompt' => '<string>',
'metric_description_program' => '<unknown>',
'metric_description_variables' => '<unknown>',
'evaluation_trigger_program' => '<unknown>',
'evaluation_trigger_variables' => '<unknown>',
'skip_save' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/"
payload := strings.NewReader("{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"metric_id": 123,
"agent_id": 123,
"project_id": 123,
"total_reviews": 123,
"completed_reviews": 123,
"failed_reviews": 123,
"reviews_list": [
123
],
"failed_reviews_list": [
123
],
"metric": {},
"output": [
{
"review_id": 123,
"expected_value": "<unknown>",
"actual_value": "<unknown>",
"explanation": "<string>",
"feedback": "<string>"
}
],
"computed_results": [
{}
]
}{
"field_name": [
"<string>"
]
}Run Metric Reviews V3
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.
curl --request POST \
--url https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"evaluation_trigger": "<string>",
"evaluation_trigger_prompt": "<string>",
"evaluation_trigger_custom_code": "<string>",
"description": "<string>",
"custom_code": "<string>",
"prompt": "<string>",
"metric_description_program": "<unknown>",
"metric_description_variables": "<unknown>",
"evaluation_trigger_program": "<unknown>",
"evaluation_trigger_variables": "<unknown>",
"skip_save": false
}
'import requests
url = "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/"
payload = {
"evaluation_trigger": "<string>",
"evaluation_trigger_prompt": "<string>",
"evaluation_trigger_custom_code": "<string>",
"description": "<string>",
"custom_code": "<string>",
"prompt": "<string>",
"metric_description_program": "<unknown>",
"metric_description_variables": "<unknown>",
"evaluation_trigger_program": "<unknown>",
"evaluation_trigger_variables": "<unknown>",
"skip_save": False
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
evaluation_trigger: '<string>',
evaluation_trigger_prompt: '<string>',
evaluation_trigger_custom_code: '<string>',
description: '<string>',
custom_code: '<string>',
prompt: '<string>',
metric_description_program: '<unknown>',
metric_description_variables: '<unknown>',
evaluation_trigger_program: '<unknown>',
evaluation_trigger_variables: '<unknown>',
skip_save: false
})
};
fetch('https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'evaluation_trigger' => '<string>',
'evaluation_trigger_prompt' => '<string>',
'evaluation_trigger_custom_code' => '<string>',
'description' => '<string>',
'custom_code' => '<string>',
'prompt' => '<string>',
'metric_description_program' => '<unknown>',
'metric_description_variables' => '<unknown>',
'evaluation_trigger_program' => '<unknown>',
'evaluation_trigger_variables' => '<unknown>',
'skip_save' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/"
payload := strings.NewReader("{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v3/metrics/{id}/run_reviews/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"evaluation_trigger\": \"<string>\",\n \"evaluation_trigger_prompt\": \"<string>\",\n \"evaluation_trigger_custom_code\": \"<string>\",\n \"description\": \"<string>\",\n \"custom_code\": \"<string>\",\n \"prompt\": \"<string>\",\n \"metric_description_program\": \"<unknown>\",\n \"metric_description_variables\": \"<unknown>\",\n \"evaluation_trigger_program\": \"<unknown>\",\n \"evaluation_trigger_variables\": \"<unknown>\",\n \"skip_save\": false\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"metric_id": 123,
"agent_id": 123,
"project_id": 123,
"total_reviews": 123,
"completed_reviews": 123,
"failed_reviews": 123,
"reviews_list": [
123
],
"failed_reviews_list": [
123
],
"metric": {},
"output": [
{
"review_id": 123,
"expected_value": "<unknown>",
"actual_value": "<unknown>",
"explanation": "<string>",
"feedback": "<string>"
}
],
"computed_results": [
{}
]
}{
"field_name": [
"<string>"
]
}Authorizations
API Key Authentication. It should be included in the header of each request.
Path Parameters
^\d+$Body
Override the judge provider while running unsaved Labs changes
openai- OpenAIgemini- Geminidspy-gepa-gemini-flash- Dspy Gepa Gemini Flashdeepseek-v4-flash- DeepSeek V4 Flash
openai, gemini, dspy-gepa-gemini-flash, deepseek-v4-flash Override evaluation trigger setting
Override evaluation trigger prompt
Override evaluation trigger implementation
llm_judge- LLM Judgecustom_code- Custom Code
llm_judge, custom_code Override custom-code evaluation trigger
Override metric description
Override metric type
basic- Basic (Deprecated in favor of LLM Judge)custom_prompt- Custom Prompt ( Deprecated in favor of LLM Judge)custom_code- Custom Codellm_judge- LLM Judge
basic, custom_prompt, custom_code, llm_judge Override custom code
Override evaluation prompt
Advanced metric description configuration
Variables for metric description
Advanced trigger configuration
Variables for evaluation trigger
If true, don't save evaluation results to database (used for internal previews)
Response
failed when the job could not produce its result; see error / errors.
completed, failed Ids of the reviews evaluated.
Ids of the reviews that could not be evaluated.
The metric, as the metrics API returns it.
The metric's verdict next to the expected value, one per evaluated review.
Show child attributes
Show child attributes
Only with skip_save: the same items as output.