curl --request POST \
--url https://api.traceloop.com/v2/metrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from_timestamp_sec": 1772905218,
"to_timestamp_sec": 1772905218,
"cursor": 1772905218000,
"environments": [
"prd",
"stg",
"dev"
],
"filters": [
{
"field": "labels.agent_name",
"operator": "equals",
"value": "Travel Planner Agent",
"values": [
"Travel Planner Agent",
"Calendar Planner Agent"
]
}
],
"limit": 50,
"metric_name": "answer relevancy",
"metric_source": "llm_as_a_judge",
"sort_by": "timestamp",
"sort_order": "ASC"
}
'import requests
url = "https://api.traceloop.com/v2/metrics"
payload = {
"from_timestamp_sec": 1772905218,
"to_timestamp_sec": 1772905218,
"cursor": 1772905218000,
"environments": ["prd", "stg", "dev"],
"filters": [
{
"field": "labels.agent_name",
"operator": "equals",
"value": "Travel Planner Agent",
"values": ["Travel Planner Agent", "Calendar Planner Agent"]
}
],
"limit": 50,
"metric_name": "answer relevancy",
"metric_source": "llm_as_a_judge",
"sort_by": "timestamp",
"sort_order": "ASC"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
from_timestamp_sec: 1772905218,
to_timestamp_sec: 1772905218,
cursor: 1772905218000,
environments: ['prd', 'stg', 'dev'],
filters: [
{
field: 'labels.agent_name',
operator: 'equals',
value: 'Travel Planner Agent',
values: ['Travel Planner Agent', 'Calendar Planner Agent']
}
],
limit: 50,
metric_name: 'answer relevancy',
metric_source: 'llm_as_a_judge',
sort_by: 'timestamp',
sort_order: 'ASC'
})
};
fetch('https://api.traceloop.com/v2/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.traceloop.com/v2/metrics",
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([
'from_timestamp_sec' => 1772905218,
'to_timestamp_sec' => 1772905218,
'cursor' => 1772905218000,
'environments' => [
'prd',
'stg',
'dev'
],
'filters' => [
[
'field' => 'labels.agent_name',
'operator' => 'equals',
'value' => 'Travel Planner Agent',
'values' => [
'Travel Planner Agent',
'Calendar Planner Agent'
]
]
],
'limit' => 50,
'metric_name' => 'answer relevancy',
'metric_source' => 'llm_as_a_judge',
'sort_by' => 'timestamp',
'sort_order' => 'ASC'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.traceloop.com/v2/metrics"
payload := strings.NewReader("{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.traceloop.com/v2/metrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.traceloop.com/v2/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}"
response = http.request(request)
puts response.read_body{
"metrics": {
"data": [
{
"metric_name": "answer relevancy",
"organization_id": "<string>",
"points": [
{
"bool_value": true,
"enum_value": "<string>",
"numeric_value": 123,
"event_time": 123,
"labels": {
"agent_name": "Travel Planner Agent",
"entity_type": "span",
"env_project_id": "1111",
"environment": "dev",
"evaluator_name": "",
"insert_time": "1772616490000",
"metric_source": "word_count",
"metric_type": "numeric",
"model": "gpt-4o-2024-08-06",
"org_id": "12345",
"run_id": "54321",
"service_name": "travel-agent-demo",
"span_id": "e118a1985c9cff23",
"trace_id": "2c98a42d1225cb786f3395d97ca3014d",
"unit": "words",
"vendor": "openai"
}
}
]
}
],
"next_cursor": "<string>",
"total_points": 123,
"total_results": 123
}
}{
"error": "error message"
}{
"error": "error message"
}{
"error": "error message"
}Get metrics with filtering and grouping
Retrieves metrics data with support for filtering, sorting, and pagination. Metrics are grouped by metric name with individual data points. Supports filtering by direct column fields (bool_value, trace_id, etc.), label fields (labels.agent_name, labels.trace_id), and attribute fields (attributes.*).
curl --request POST \
--url https://api.traceloop.com/v2/metrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from_timestamp_sec": 1772905218,
"to_timestamp_sec": 1772905218,
"cursor": 1772905218000,
"environments": [
"prd",
"stg",
"dev"
],
"filters": [
{
"field": "labels.agent_name",
"operator": "equals",
"value": "Travel Planner Agent",
"values": [
"Travel Planner Agent",
"Calendar Planner Agent"
]
}
],
"limit": 50,
"metric_name": "answer relevancy",
"metric_source": "llm_as_a_judge",
"sort_by": "timestamp",
"sort_order": "ASC"
}
'import requests
url = "https://api.traceloop.com/v2/metrics"
payload = {
"from_timestamp_sec": 1772905218,
"to_timestamp_sec": 1772905218,
"cursor": 1772905218000,
"environments": ["prd", "stg", "dev"],
"filters": [
{
"field": "labels.agent_name",
"operator": "equals",
"value": "Travel Planner Agent",
"values": ["Travel Planner Agent", "Calendar Planner Agent"]
}
],
"limit": 50,
"metric_name": "answer relevancy",
"metric_source": "llm_as_a_judge",
"sort_by": "timestamp",
"sort_order": "ASC"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
from_timestamp_sec: 1772905218,
to_timestamp_sec: 1772905218,
cursor: 1772905218000,
environments: ['prd', 'stg', 'dev'],
filters: [
{
field: 'labels.agent_name',
operator: 'equals',
value: 'Travel Planner Agent',
values: ['Travel Planner Agent', 'Calendar Planner Agent']
}
],
limit: 50,
metric_name: 'answer relevancy',
metric_source: 'llm_as_a_judge',
sort_by: 'timestamp',
sort_order: 'ASC'
})
};
fetch('https://api.traceloop.com/v2/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.traceloop.com/v2/metrics",
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([
'from_timestamp_sec' => 1772905218,
'to_timestamp_sec' => 1772905218,
'cursor' => 1772905218000,
'environments' => [
'prd',
'stg',
'dev'
],
'filters' => [
[
'field' => 'labels.agent_name',
'operator' => 'equals',
'value' => 'Travel Planner Agent',
'values' => [
'Travel Planner Agent',
'Calendar Planner Agent'
]
]
],
'limit' => 50,
'metric_name' => 'answer relevancy',
'metric_source' => 'llm_as_a_judge',
'sort_by' => 'timestamp',
'sort_order' => 'ASC'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.traceloop.com/v2/metrics"
payload := strings.NewReader("{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.traceloop.com/v2/metrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.traceloop.com/v2/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from_timestamp_sec\": 1772905218,\n \"to_timestamp_sec\": 1772905218,\n \"cursor\": 1772905218000,\n \"environments\": [\n \"prd\",\n \"stg\",\n \"dev\"\n ],\n \"filters\": [\n {\n \"field\": \"labels.agent_name\",\n \"operator\": \"equals\",\n \"value\": \"Travel Planner Agent\",\n \"values\": [\n \"Travel Planner Agent\",\n \"Calendar Planner Agent\"\n ]\n }\n ],\n \"limit\": 50,\n \"metric_name\": \"answer relevancy\",\n \"metric_source\": \"llm_as_a_judge\",\n \"sort_by\": \"timestamp\",\n \"sort_order\": \"ASC\"\n}"
response = http.request(request)
puts response.read_body{
"metrics": {
"data": [
{
"metric_name": "answer relevancy",
"organization_id": "<string>",
"points": [
{
"bool_value": true,
"enum_value": "<string>",
"numeric_value": 123,
"event_time": 123,
"labels": {
"agent_name": "Travel Planner Agent",
"entity_type": "span",
"env_project_id": "1111",
"environment": "dev",
"evaluator_name": "",
"insert_time": "1772616490000",
"metric_source": "word_count",
"metric_type": "numeric",
"model": "gpt-4o-2024-08-06",
"org_id": "12345",
"run_id": "54321",
"service_name": "travel-agent-demo",
"span_id": "e118a1985c9cff23",
"trace_id": "2c98a42d1225cb786f3395d97ca3014d",
"unit": "words",
"vendor": "openai"
}
}
]
}
],
"next_cursor": "<string>",
"total_points": 123,
"total_results": 123
}
}{
"error": "error message"
}{
"error": "error message"
}{
"error": "error message"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Metrics query parameters including filters, environments, and pagination
Start time in Unix seconds timestamp.
1772905218
End time in Unix seconds timestamp.
1772905218
Pagination cursor for fetching the next page of results. The cursor is returned in the response to the previous request.
1772905218000
List of environments to filter by
["prd", "stg", "dev"]
Show child attributes
Show child attributes
Maximum number of metrics to return per page.
50
AND, OR Metric name to filter by. The metric_name is a metric attribute that is set on the metric object.
"answer relevancy"
Metric source to filter by. The metric_source is a metric attribute that is set on the metric object.
"llm_as_a_judge"
Field to sort by.
"timestamp"
Sort order.
"ASC"
Response
Grouped metrics with data points
Show child attributes
Show child attributes
Was this page helpful?

