curl --request POST \
--url https://api.example.com/api/public/tools/get_team_metrics \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"fromUtc": null,
"toUtc": null,
"flowPlanIds": null,
"userIds": null,
"includeTotals": true,
"includeActions": true,
"includeEngagement": true,
"includeOpportunities": true,
"includeEmailChart": false,
"includeLinkedinChart": false
}
'import requests
url = "https://api.example.com/api/public/tools/get_team_metrics"
payload = {
"fromUtc": None,
"toUtc": None,
"flowPlanIds": None,
"userIds": None,
"includeTotals": True,
"includeActions": True,
"includeEngagement": True,
"includeOpportunities": True,
"includeEmailChart": False,
"includeLinkedinChart": False
}
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({
fromUtc: null,
toUtc: null,
flowPlanIds: null,
userIds: null,
includeTotals: true,
includeActions: true,
includeEngagement: true,
includeOpportunities: true,
includeEmailChart: false,
includeLinkedinChart: false
})
};
fetch('https://api.example.com/api/public/tools/get_team_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.example.com/api/public/tools/get_team_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([
'fromUtc' => null,
'toUtc' => null,
'flowPlanIds' => null,
'userIds' => null,
'includeTotals' => true,
'includeActions' => true,
'includeEngagement' => true,
'includeOpportunities' => true,
'includeEmailChart' => false,
'includeLinkedinChart' => false
]),
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.example.com/api/public/tools/get_team_metrics"
payload := strings.NewReader("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\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.example.com/api/public/tools/get_team_metrics")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/get_team_metrics")
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 \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"effectiveFilters": {
"fromUtc": "2023-11-07T05:31:56Z",
"toUtc": "2023-11-07T05:31:56Z",
"fromUtcInMs": 123,
"toUtcInMs": 123,
"flowPlanIds": [
"<string>"
],
"userIds": [
"<string>"
]
},
"totals": {
"actionsCount": 123,
"engagementsCount": 123,
"opportunitiesCount": 123
},
"actions": {
"automatedOutreachActionsCounts": {
"email": 123,
"viewedLinProfiles": 123,
"linConnectionRequests": 123,
"linMessages": 123,
"linInMail": 123,
"total": 123
},
"manualOutreachActionsCounts": {
"approvalTasksLogged": 123,
"approvalTasksTotal": 123,
"callTasksLogged": 123,
"callTasksTotal": 123,
"manualTasksLogged": 123,
"manualTasksTotal": 123,
"total": 123
},
"flowAgentActionsMetrics": {
"total": 123,
"qualified": 123,
"disqualified": 123
},
"total": 123
},
"engagement": {
"emailMetrics": {
"replies": 123,
"click": 123
},
"linMetrics": {
"sentConnectionRequests": 123,
"acceptedConnections": 123,
"messagesSent": 123,
"inMailSent": 123,
"replies": 123,
"inMailReplies": 123
},
"emailSentimentMetrics": {
"positive": 123,
"neutral": 123,
"negative": 123
},
"linSentimentMetrics": {
"positive": 123,
"neutral": 123,
"negative": 123
}
},
"opportunities": {
"positiveReplies": 123,
"meetingsBooked": 123
},
"emailChart": [
{
"origin": {},
"startOfSegmentDate": "2023-11-07T05:31:56Z",
"endOfSegmentDate": "2023-11-07T05:31:56Z"
}
],
"linkedinChart": [
"<unknown>"
],
"warnings": [
"<string>"
],
"nextSteps": [
"<string>"
]
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Get Team Metrics
Returns FirstTouch team metrics using the same core filters as the metrics endpoints: UTC date range, flow plan/source ids, and team member user ids.
Detailed usage guidance
- Use this when the customer asks for team performance, actions sent, manual task counts, email or LinkedIn engagement, replies, sentiment, opportunities, meetings booked, or email/LinkedIn chart trends.
- By default it returns totals, actions, engagement, and opportunity metrics; request emailChart or linkedinChart only when the customer asks for trend/chart/bucket data.
- flowPlanIds map to the API source_ids filter.
- Team owners can omit userIds to include all team users; non-owners are scoped by the service to their own user.
- This does not export CSV rows or return individual opportunities.
curl --request POST \
--url https://api.example.com/api/public/tools/get_team_metrics \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"fromUtc": null,
"toUtc": null,
"flowPlanIds": null,
"userIds": null,
"includeTotals": true,
"includeActions": true,
"includeEngagement": true,
"includeOpportunities": true,
"includeEmailChart": false,
"includeLinkedinChart": false
}
'import requests
url = "https://api.example.com/api/public/tools/get_team_metrics"
payload = {
"fromUtc": None,
"toUtc": None,
"flowPlanIds": None,
"userIds": None,
"includeTotals": True,
"includeActions": True,
"includeEngagement": True,
"includeOpportunities": True,
"includeEmailChart": False,
"includeLinkedinChart": False
}
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({
fromUtc: null,
toUtc: null,
flowPlanIds: null,
userIds: null,
includeTotals: true,
includeActions: true,
includeEngagement: true,
includeOpportunities: true,
includeEmailChart: false,
includeLinkedinChart: false
})
};
fetch('https://api.example.com/api/public/tools/get_team_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.example.com/api/public/tools/get_team_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([
'fromUtc' => null,
'toUtc' => null,
'flowPlanIds' => null,
'userIds' => null,
'includeTotals' => true,
'includeActions' => true,
'includeEngagement' => true,
'includeOpportunities' => true,
'includeEmailChart' => false,
'includeLinkedinChart' => false
]),
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.example.com/api/public/tools/get_team_metrics"
payload := strings.NewReader("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\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.example.com/api/public/tools/get_team_metrics")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/get_team_metrics")
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 \"fromUtc\": null,\n \"toUtc\": null,\n \"flowPlanIds\": null,\n \"userIds\": null,\n \"includeTotals\": true,\n \"includeActions\": true,\n \"includeEngagement\": true,\n \"includeOpportunities\": true,\n \"includeEmailChart\": false,\n \"includeLinkedinChart\": false\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"effectiveFilters": {
"fromUtc": "2023-11-07T05:31:56Z",
"toUtc": "2023-11-07T05:31:56Z",
"fromUtcInMs": 123,
"toUtcInMs": 123,
"flowPlanIds": [
"<string>"
],
"userIds": [
"<string>"
]
},
"totals": {
"actionsCount": 123,
"engagementsCount": 123,
"opportunitiesCount": 123
},
"actions": {
"automatedOutreachActionsCounts": {
"email": 123,
"viewedLinProfiles": 123,
"linConnectionRequests": 123,
"linMessages": 123,
"linInMail": 123,
"total": 123
},
"manualOutreachActionsCounts": {
"approvalTasksLogged": 123,
"approvalTasksTotal": 123,
"callTasksLogged": 123,
"callTasksTotal": 123,
"manualTasksLogged": 123,
"manualTasksTotal": 123,
"total": 123
},
"flowAgentActionsMetrics": {
"total": 123,
"qualified": 123,
"disqualified": 123
},
"total": 123
},
"engagement": {
"emailMetrics": {
"replies": 123,
"click": 123
},
"linMetrics": {
"sentConnectionRequests": 123,
"acceptedConnections": 123,
"messagesSent": 123,
"inMailSent": 123,
"replies": 123,
"inMailReplies": 123
},
"emailSentimentMetrics": {
"positive": 123,
"neutral": 123,
"negative": 123
},
"linSentimentMetrics": {
"positive": 123,
"neutral": 123,
"negative": 123
}
},
"opportunities": {
"positiveReplies": 123,
"meetingsBooked": 123
},
"emailChart": [
{
"origin": {},
"startOfSegmentDate": "2023-11-07T05:31:56Z",
"endOfSegmentDate": "2023-11-07T05:31:56Z"
}
],
"linkedinChart": [
"<unknown>"
],
"warnings": [
"<string>"
],
"nextSteps": [
"<string>"
]
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
UTC lower bound. The metrics service treats this as the start of the UTC day.
UTC upper bound. The metrics service treats this as the end of the UTC day.
Flow plan ids to filter by. These map to MetricsFiltersDto.source_ids and are expanded to enrollments by the metrics service.
Team member user ids to filter by. Team owners can omit for all team users; non-owners are scoped by the service to their own user.
Include total actions, engagements, and opportunities. Defaults to true.
Include automated outreach, manual task, and Flow Agent action counts. Defaults to true.
Include email/LinkedIn engagement counts and reply sentiment. Defaults to true.
Include opportunity totals such as positive replies and meetings booked. Defaults to true.
Include email trend/chart buckets. Defaults to false; enable only when the customer asks for chart, trend, or by-day/by-month data. If chart data is requested without a full date range, missing bounds default to a recent 30-day window.
Include LinkedIn trend/chart buckets. Defaults to false; enable only when the customer asks for chart, trend, or by-day/by-month data. If chart data is requested without a full date range, missing bounds default to a recent 30-day window.
Response
Tool result.
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
Show child attributes
Show child attributes

