Read service analytics
curl --request GET \
--url https://towbar.example.com/v1/api/apps/{appId}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://towbar.example.com/v1/api/apps/{appId}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://towbar.example.com/v1/api/apps/{appId}/analytics', 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://towbar.example.com/v1/api/apps/{appId}/analytics",
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://towbar.example.com/v1/api/apps/{appId}/analytics"
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://towbar.example.com/v1/api/apps/{appId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://towbar.example.com/v1/api/apps/{appId}/analytics")
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{
"filters": [
{
"field": "path",
"operator": "startsWith",
"value": "<string>"
}
],
"enabled": true,
"config": {
"enabled": true,
"pageviews": true,
"visitorIdentity": true,
"retentionDays": 7,
"excludePaths": [
"<string>"
]
},
"agentStatus": "<string>",
"lastReceivedAt": "<string>",
"droppedSamples": 123,
"droppedEvents": 123,
"geolocationBuiltAt": "<string>",
"collectionReady": true,
"collectionErrors": 123,
"start": "<string>",
"end": "<string>",
"kind": "request",
"total": 123,
"bytes": 123,
"errors": 123,
"meanMs": 123,
"p50Ms": 123,
"p95Ms": 123,
"visitors": 123,
"sessions": 123,
"histogram": [
123
],
"trend": [
{
"at": "<string>",
"count": 123,
"errors": 123
}
],
"deployments": [
{
"id": "<string>",
"at": "<string>",
"state": "<string>",
"type": "deployment"
}
],
"comparison": {
"start": "<string>",
"end": "<string>",
"total": 123,
"errors": 123,
"meanMs": 123,
"visitors": 123,
"sessions": 123,
"trend": [
{
"at": "<string>",
"count": 123,
"errors": 123
}
]
},
"dimensions": {},
"localization": {
"dateFormat": "day-short-month-year",
"timeFormat": "24-hour",
"timeZone": "<string>",
"timestamps": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}Read service analytics
Read service analytics through the Towbar REST API.
GET
/
apps
/
{appId}
/
analytics
Read service analytics
curl --request GET \
--url https://towbar.example.com/v1/api/apps/{appId}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://towbar.example.com/v1/api/apps/{appId}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://towbar.example.com/v1/api/apps/{appId}/analytics', 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://towbar.example.com/v1/api/apps/{appId}/analytics",
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://towbar.example.com/v1/api/apps/{appId}/analytics"
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://towbar.example.com/v1/api/apps/{appId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://towbar.example.com/v1/api/apps/{appId}/analytics")
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{
"filters": [
{
"field": "path",
"operator": "startsWith",
"value": "<string>"
}
],
"enabled": true,
"config": {
"enabled": true,
"pageviews": true,
"visitorIdentity": true,
"retentionDays": 7,
"excludePaths": [
"<string>"
]
},
"agentStatus": "<string>",
"lastReceivedAt": "<string>",
"droppedSamples": 123,
"droppedEvents": 123,
"geolocationBuiltAt": "<string>",
"collectionReady": true,
"collectionErrors": 123,
"start": "<string>",
"end": "<string>",
"kind": "request",
"total": 123,
"bytes": 123,
"errors": 123,
"meanMs": 123,
"p50Ms": 123,
"p95Ms": 123,
"visitors": 123,
"sessions": 123,
"histogram": [
123
],
"trend": [
{
"at": "<string>",
"count": 123,
"errors": 123
}
],
"deployments": [
{
"id": "<string>",
"at": "<string>",
"state": "<string>",
"type": "deployment"
}
],
"comparison": {
"start": "<string>",
"end": "<string>",
"total": 123,
"errors": 123,
"meanMs": 123,
"visitors": 123,
"sessions": 123,
"trend": [
{
"at": "<string>",
"count": 123,
"errors": 123
}
]
},
"dimensions": {},
"localization": {
"dateFormat": "day-short-month-year",
"timeFormat": "24-hour",
"timeZone": "<string>",
"timestamps": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>"
}
}Required permissions: scout.read. Personal keys are capped by their owner’s current team role.
See request conventions and automation workflows. MCP clients use the task-oriented tool catalogue.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Query Parameters
Required range:
1 <= x <= 90Available options:
request, pageview JSON array of AND conditions, for example [{"field":"path","operator":"startsWith","value":"/docs"}]. Supports path with equals or startsWith; at most 8 conditions.
Maximum string length:
8192Response
Request or pageview trends, dimensions, latency histogram, and optional browser identity estimates within retention.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Allowed value:
"request"Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Last modified on September 27, 2026
