curl --request GET \
--url https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics', 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.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-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"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metrics": [
{
"metric_output_id": "01JCQR8Z9PQSTNVWXY12345678",
"metric_id": "29BlkepvvX19ebbLDB0y6Q",
"value": 2.35,
"status": "COMPLETED"
},
{
"metric_output_id": "01JCQR9A1BRSUWVXYZ12345678",
"metric_id": "mymKvEg6ZA65srXbTX5wSM",
"value": "positive",
"status": "COMPLETED"
},
{
"metric_output_id": "01JCQR9B2CRTUVWXYZ12345678",
"metric_id": "fstokU4ev5UmT8sUBexiwV",
"value": "resolved",
"status": "COMPLETED"
}
]
}List conversation metrics
List the metrics computed for a specific conversation.
Re-scoring a metric on a conversation appends a new output rather than replacing
the previous one. By default this endpoint returns only the most recent output for
each metric, so a metric appears at most once. Pass include_superseded=true to
get the full history, including outputs that a later re-score has replaced.
curl --request GET \
--url https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics', 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.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-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"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/conversations/uploaded/{conversation_id}/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metrics": [
{
"metric_output_id": "01JCQR8Z9PQSTNVWXY12345678",
"metric_id": "29BlkepvvX19ebbLDB0y6Q",
"value": 2.35,
"status": "COMPLETED"
},
{
"metric_output_id": "01JCQR9A1BRSUWVXYZ12345678",
"metric_id": "mymKvEg6ZA65srXbTX5wSM",
"value": "positive",
"status": "COMPLETED"
},
{
"metric_output_id": "01JCQR9B2CRTUVWXYZ12345678",
"metric_id": "fstokU4ev5UmT8sUBexiwV",
"value": "resolved",
"status": "COMPLETED"
}
]
}Authorizations
API key for authentication.
Path Parameters
Unique conversation identifier
22 - 26Query Parameters
Filter expression syntax.
Values may be unquoted or double-quoted. Values containing spaces must be quoted.
Supported fields:
metric_name(string): Filter by metric name (e.g.,metric_name=latency)status(string): Filter by status (e.g.,status=COMPLETED)output_type(string): Filter by type (e.g.,output_type=float)
Examples:
filter=status=COMPLETEDfilter=metric_name=latency AND status=COMPLETEDfilter=output_type=float
Maximum number of metrics to return (1-1000)
1 <= x <= 1000Pagination token from previous response (for fetching next page)
Response detail level. FULL preserves the historical response including
structured result and runtime_metadata; BASIC omits those heavy fields
while retaining value, status, explanation, and bounded subvalues.
BASIC, FULL Include outputs that a later re-score of the same metric has superseded.
When false (default) each metric contributes only its most recent output.
When true every output is returned, so one metric may appear multiple times;
recency is determined by creation time, with the metric_output_id ULID breaking
ties, and the response order still follows order_by.
Field to order results by.
Supported fields:
metric_name(default): Sort by metric name alphabeticallycreate_time: Sort by creation timestart_time: Sort by computation start timeend_time: Sort by computation end timevalue: Sort by metric value (float types only)
Prefix with - for descending order (e.g., -create_time)
Was this page helpful?