curl --request GET \
--url https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview \
--header 'Authorization: Bearer <token>' \
--header 'Team-SID: <api-key>'import requests
url = "https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview"
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'Team-SID': '<api-key>'}
};
fetch('https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview', 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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview",
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>",
"Team-SID: <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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "action",
"action": "<string>",
"item": "<unknown>",
"result": {
"period": {
"key": "all",
"days": 123,
"since": "<string>",
"until": "<string>"
},
"replies": {
"received": 123,
"sent": 123,
"sent_as_written": 123,
"as_written_share": 123,
"answered_by_person": 123,
"a_day": {
"days": 123,
"since": "<string>",
"counts": [
123
]
}
},
"calls_booked": 123,
"said_yes": 123,
"median_reply_seconds": 123,
"handed_to_you": 123,
"unsure": 123,
"credits": {
"spent": 123,
"per_thread_median": 123,
"per_thread_max": 123
},
"funnel": {
"replied": 123,
"engaged": 123,
"discovered": 123,
"heard_the_bridge": 123,
"got_the_offer": 123,
"said_yes": 123,
"booked": 123
},
"golden_set": {
"replies": 123,
"matched": 123,
"words_caught": 123,
"words_caught_by_word": {},
"edits_kept": 123,
"edits_waiting": 123,
"rows": 123
},
"knowledge": {
"replies": 123,
"read": 123,
"most_read": {
"sid": "<string>",
"kind": "file",
"title": "<string>",
"reads": 123
},
"documents": 123,
"answers": 123,
"answers_from_documents": 123,
"answers_manual": 123,
"reading": 123
},
"hints": {
"open": 123,
"missing_answer": 123,
"no_example": 123
},
"outcome": {
"replied_threads": 123,
"evidence": {
"their_link": 123,
"confirmed_time": 123,
"handoff_after_reply": 123,
"strict": 123,
"any": 123
},
"replies": {
"total": 123,
"judged": 123,
"we_stopped": 123,
"answered": 123,
"within_hour": 123
},
"baseline": {
"positive_low": 123,
"positive_high": 123,
"strict": 123,
"we_stopped": 123,
"within_hour": 123
}
},
"against": {
"agent": {
"replies": 123,
"strict": 123,
"contact": 123,
"ended_well": 123,
"answered": 123,
"within_hour": 123,
"median_reply_seconds": 123,
"silence": 123
},
"team": {
"replies": 123,
"strict": 123,
"contact": 123,
"ended_well": 123,
"answered": 123,
"within_hour": 123,
"median_reply_seconds": 123,
"silence": 123
}
},
"previous": {
"replies_received": 123,
"replies_sent": 123,
"sent_as_written": 123,
"calls_booked": 123,
"said_yes": 123,
"handed_to_you": 123,
"unsure": 123,
"credits_spent": 123
},
"now": {
"talking": {
"total": 123,
"leading": 123,
"awaiting_approval": 123,
"handed_off": 123,
"taken_over": 123,
"stalled": 123
},
"workflows": [
{
"workflow_sid": "<string>",
"workflow_name": "<string>",
"playtable_sid": "<string>",
"ai_agent_mode": "<string>",
"threads": 123,
"with_agent_now": 123,
"replies": 123,
"calls_booked": 123
}
]
}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_failed",
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"severity": "hard",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_failed",
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"severity": "hard",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}Get agent overview
One AI SDR’s overview (by sid) for a period (all, 30d, 7d): the replies it read and sent, calls booked, median reply time, hand-offs, unsure replies, credits spent, the funnel from reply to goal, the outcome (what the lead did after its reply, against the corpus baseline), the same scalars for the period before, and, now, its conversations by state and the workflows its threads name. For how the agent is doing, never for one thread (get_conversation) or one run (search_agent_runs).
Contract:
- MCP tool
get_agent_overview, registry packagemcp.unibox/agents, mountunibox.agent. - Operation
action, response envelopeaction. - Flags: read only.
curl --request GET \
--url https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview \
--header 'Authorization: Bearer <token>' \
--header 'Team-SID: <api-key>'import requests
url = "https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview"
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'Team-SID': '<api-key>'}
};
fetch('https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview', 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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview",
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>",
"Team-SID: <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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<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://beta.getsales.io/unibox/v1/api/agents/{sid}/overview")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://beta.getsales.io/unibox/v1/api/agents/{sid}/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "action",
"action": "<string>",
"item": "<unknown>",
"result": {
"period": {
"key": "all",
"days": 123,
"since": "<string>",
"until": "<string>"
},
"replies": {
"received": 123,
"sent": 123,
"sent_as_written": 123,
"as_written_share": 123,
"answered_by_person": 123,
"a_day": {
"days": 123,
"since": "<string>",
"counts": [
123
]
}
},
"calls_booked": 123,
"said_yes": 123,
"median_reply_seconds": 123,
"handed_to_you": 123,
"unsure": 123,
"credits": {
"spent": 123,
"per_thread_median": 123,
"per_thread_max": 123
},
"funnel": {
"replied": 123,
"engaged": 123,
"discovered": 123,
"heard_the_bridge": 123,
"got_the_offer": 123,
"said_yes": 123,
"booked": 123
},
"golden_set": {
"replies": 123,
"matched": 123,
"words_caught": 123,
"words_caught_by_word": {},
"edits_kept": 123,
"edits_waiting": 123,
"rows": 123
},
"knowledge": {
"replies": 123,
"read": 123,
"most_read": {
"sid": "<string>",
"kind": "file",
"title": "<string>",
"reads": 123
},
"documents": 123,
"answers": 123,
"answers_from_documents": 123,
"answers_manual": 123,
"reading": 123
},
"hints": {
"open": 123,
"missing_answer": 123,
"no_example": 123
},
"outcome": {
"replied_threads": 123,
"evidence": {
"their_link": 123,
"confirmed_time": 123,
"handoff_after_reply": 123,
"strict": 123,
"any": 123
},
"replies": {
"total": 123,
"judged": 123,
"we_stopped": 123,
"answered": 123,
"within_hour": 123
},
"baseline": {
"positive_low": 123,
"positive_high": 123,
"strict": 123,
"we_stopped": 123,
"within_hour": 123
}
},
"against": {
"agent": {
"replies": 123,
"strict": 123,
"contact": 123,
"ended_well": 123,
"answered": 123,
"within_hour": 123,
"median_reply_seconds": 123,
"silence": 123
},
"team": {
"replies": 123,
"strict": 123,
"contact": 123,
"ended_well": 123,
"answered": 123,
"within_hour": 123,
"median_reply_seconds": 123,
"silence": 123
}
},
"previous": {
"replies_received": 123,
"replies_sent": 123,
"sent_as_written": 123,
"calls_booked": 123,
"said_yes": 123,
"handed_to_you": 123,
"unsure": 123,
"credits_spent": 123
},
"now": {
"talking": {
"total": 123,
"leading": 123,
"awaiting_approval": 123,
"handed_off": 123,
"taken_over": 123,
"stalled": 123
},
"workflows": [
{
"workflow_sid": "<string>",
"workflow_name": "<string>",
"playtable_sid": "<string>",
"ai_agent_mode": "<string>",
"threads": 123,
"with_agent_now": 123,
"replies": 123,
"calls_booked": 123
}
]
}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_failed",
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"severity": "hard",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_failed",
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"severity": "hard",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"team_sid": "<string>",
"actor_type": "<string>"
}
}Authorizations
Access token issued by gs.service.id. Its access_identity claim carries team_sid, actor_sid and actor_type, and that team scope is authoritative.
Team scope for tokens that do not carry one. Ignored when the token already names a team.
Path Parameters
The agent whose overview is read (ub_ag_…).
18^ub_ag_Query Parameters
What to count over: all (since ever), 30d (the default) or 7d. The Now block is the same whatever the period.
all, 30d, 7d Response
action success envelope.