Get run evaluation
curl --request GET \
--url https://api.goyappr.com/agent-eval/runs/{id}/evaluation \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.goyappr.com/agent-eval/runs/{id}/evaluation"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.goyappr.com/agent-eval/runs/{id}/evaluation', 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.goyappr.com/agent-eval/runs/{id}/evaluation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.goyappr.com/agent-eval/runs/{id}/evaluation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.goyappr.com/agent-eval/runs/{id}/evaluation")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goyappr.com/agent-eval/runs/{id}/evaluation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"score": 50,
"pass_fail": true,
"results": [
{
"assertion": {
"type": "must_say",
"kind": "must_say",
"weight": 1,
"description": "<string>",
"pattern": "<string>",
"phrase": "<string>",
"match_type": "substring",
"case_sensitive": false,
"tool_name": "<string>",
"args_match": {},
"node_id": "<string>",
"rubric": "<string>"
},
"passed": true,
"weight": 123,
"reason": "<string>"
}
]
}Runs
Get Run Evaluation
Returns just the assertion roll-up. Equivalent to runs/:id but trimmed to the evaluation field — useful for CI checks where you don’t need the transcript. Always returns 200 (404 only when the run id is unknown); score, pass_fail, and evaluation are null until the run reaches a terminal status. Gate CI on GET /agent-eval/runs/{id} reaching a terminal status AND queue_status === "done" rather than on this endpoint’s HTTP code.
GET
/
agent-eval
/
runs
/
{id}
/
evaluation
Get run evaluation
curl --request GET \
--url https://api.goyappr.com/agent-eval/runs/{id}/evaluation \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.goyappr.com/agent-eval/runs/{id}/evaluation"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.goyappr.com/agent-eval/runs/{id}/evaluation', 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.goyappr.com/agent-eval/runs/{id}/evaluation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.goyappr.com/agent-eval/runs/{id}/evaluation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.goyappr.com/agent-eval/runs/{id}/evaluation")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goyappr.com/agent-eval/runs/{id}/evaluation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"score": 50,
"pass_fail": true,
"results": [
{
"assertion": {
"type": "must_say",
"kind": "must_say",
"weight": 1,
"description": "<string>",
"pattern": "<string>",
"phrase": "<string>",
"match_type": "substring",
"case_sensitive": false,
"tool_name": "<string>",
"args_match": {},
"node_id": "<string>",
"rubric": "<string>"
},
"passed": true,
"weight": 123,
"reason": "<string>"
}
]
}Returns just the assertion roll-up — equivalent to
GET /agent-eval/runs/:id but trimmed to the evaluation field. Useful for CI checks where you only care about the score.
The scoring fields aren’t final until the worker finishes both the conversation AND the assertion pass. Poll the parent GET /agent-eval/runs/:id until queue_status === "done", then call this endpoint. If you hit this endpoint while queue_status is still pending or claimed, score / pass_fail / results will be null.
Response shape
{
"score": 87.5,
"pass_fail": true,
"results": [
{
"assertion": { "type": "must_say", "pattern": "Tuesday at 3pm", "weight": 1 },
"passed": true,
"weight": 1,
"reason": "matched at turn 7"
},
{
"assertion": { "type": "must_call_tool", "tool_name": "bookAppointment", "weight": 2 },
"passed": true,
"weight": 2,
"reason": "fired at turn 8"
}
]
}
Authorizations
Your Yappr API key (e.g. ypr_live_...). Generate one in the dashboard under Settings → API Keys.
Path Parameters
Response
Evaluation result. Fields are null until the run is terminal.