Batch-get metric outputs by ULID
curl --request POST \
--url https://api.coval.dev/v1/metrics/outputs:batchGet \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"metric_output_ids": [
"<string>"
]
}
'import requests
url = "https://api.coval.dev/v1/metrics/outputs:batchGet"
payload = { "metric_output_ids": ["<string>"] }
headers = {
"X-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-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({metric_output_ids: ['<string>']})
};
fetch('https://api.coval.dev/v1/metrics/outputs:batchGet', 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/metrics/outputs:batchGet",
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([
'metric_output_ids' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/metrics/outputs:batchGet"
payload := strings.NewReader("{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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.coval.dev/v1/metrics/outputs:batchGet")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/metrics/outputs:batchGet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"metric_outputs": [
{
"metric_output_id": "01JCQR8Z9PQSTNVWXY12345678",
"metric_id": "abc123xyz789",
"status": "COMPLETED",
"metric_version_ulid": "01JCQR8Z9PQSTNVWXY12345678",
"value": 0.85,
"explanation": "The agent never confirmed the caller's address before ending the call.",
"subvalues_by_timestamp": [
{
"start_offset": 0,
"end_offset": 2.5,
"output_type": "float",
"float_value": 0.85,
"string_value": "",
"role": "assistant",
"message_index": 3
}
],
"result": {},
"runtime_metadata": {}
}
]
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error"
}
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}Metrics
Batch-get metric outputs by ULID
Resolve up to 100 metric-output ULIDs to their full metric-output resources. Use this to
read the results of POST /v1/metrics/{metric_id}/test — which returns a metric_output_ulid
— without having to know the parent simulation. Org-scoped and best-effort: ULIDs that do not
exist or belong to another organization are omitted from the response rather than erroring, so
the returned list may be shorter than the request (and empty if none match). Returns the same
SimpleMetricOutput shape as GET /v1/simulations/{simulation_id}/metrics/{metric_output_id}.
POST
/
metrics
/
outputs:batchGet
Batch-get metric outputs by ULID
curl --request POST \
--url https://api.coval.dev/v1/metrics/outputs:batchGet \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"metric_output_ids": [
"<string>"
]
}
'import requests
url = "https://api.coval.dev/v1/metrics/outputs:batchGet"
payload = { "metric_output_ids": ["<string>"] }
headers = {
"X-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-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({metric_output_ids: ['<string>']})
};
fetch('https://api.coval.dev/v1/metrics/outputs:batchGet', 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/metrics/outputs:batchGet",
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([
'metric_output_ids' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/metrics/outputs:batchGet"
payload := strings.NewReader("{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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.coval.dev/v1/metrics/outputs:batchGet")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/metrics/outputs:batchGet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metric_output_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"metric_outputs": [
{
"metric_output_id": "01JCQR8Z9PQSTNVWXY12345678",
"metric_id": "abc123xyz789",
"status": "COMPLETED",
"metric_version_ulid": "01JCQR8Z9PQSTNVWXY12345678",
"value": 0.85,
"explanation": "The agent never confirmed the caller's address before ending the call.",
"subvalues_by_timestamp": [
{
"start_offset": 0,
"end_offset": 2.5,
"output_type": "float",
"float_value": 0.85,
"string_value": "",
"role": "assistant",
"message_index": 3
}
],
"result": {},
"runtime_metadata": {}
}
]
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error"
}
}{
"error": {
"message": "<string>",
"details": [
{
"field": "<string>",
"description": "<string>"
}
]
}
}Authorizations
API key for authentication
Body
application/json
Metric-output ULIDs (26-char) to resolve; 1–100 per call.
Required string length:
26Pattern:
^[a-zA-Z0-9]{26}$Response
The resolved metric outputs
A set of resolved metric outputs.
Show child attributes
Show child attributes
Was this page helpful?
⌘I