curl --request GET \
--url http://localhost:8080/sequences/number-pool-call-metrics \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/sequences/number-pool-call-metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/sequences/number-pool-call-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_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/number-pool-call-metrics",
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 := "http://localhost:8080/sequences/number-pool-call-metrics"
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("http://localhost:8080/sequences/number-pool-call-metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/number-pool-call-metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"scope": "sequence_number_pool_calls",
"start_date": "<string>",
"end_date": "<string>",
"group_by": "caller_number",
"totals": {
"attempts": 4503599627370495,
"unique_contacts": 4503599627370495,
"answered": 4503599627370495,
"voicemail": 4503599627370495,
"no_answer": 4503599627370495,
"busy": 4503599627370495,
"failed": 4503599627370495,
"pending": 4503599627370495,
"unknown": 4503599627370495,
"answer_rate": 123,
"connected_seconds": 1,
"average_connected_seconds": 123,
"average_ring_seconds": 123
},
"rows": [
{
"attempts": 4503599627370495,
"unique_contacts": 4503599627370495,
"answered": 4503599627370495,
"voicemail": 4503599627370495,
"no_answer": 4503599627370495,
"busy": 4503599627370495,
"failed": 4503599627370495,
"pending": 4503599627370495,
"unknown": 4503599627370495,
"answer_rate": 123,
"connected_seconds": 1,
"average_connected_seconds": 123,
"average_ring_seconds": 123,
"key": "<string>"
}
],
"truncated": true
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Number pool call metrics
Compare caller numbers used by sequence number pools, with answer rates, voicemail, retries, and durations. Filter by date, pool, agent, or sequence.
curl --request GET \
--url http://localhost:8080/sequences/number-pool-call-metrics \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/sequences/number-pool-call-metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/sequences/number-pool-call-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_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/number-pool-call-metrics",
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 := "http://localhost:8080/sequences/number-pool-call-metrics"
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("http://localhost:8080/sequences/number-pool-call-metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/number-pool-call-metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"scope": "sequence_number_pool_calls",
"start_date": "<string>",
"end_date": "<string>",
"group_by": "caller_number",
"totals": {
"attempts": 4503599627370495,
"unique_contacts": 4503599627370495,
"answered": 4503599627370495,
"voicemail": 4503599627370495,
"no_answer": 4503599627370495,
"busy": 4503599627370495,
"failed": 4503599627370495,
"pending": 4503599627370495,
"unknown": 4503599627370495,
"answer_rate": 123,
"connected_seconds": 1,
"average_connected_seconds": 123,
"average_ring_seconds": 123
},
"rows": [
{
"attempts": 4503599627370495,
"unique_contacts": 4503599627370495,
"answered": 4503599627370495,
"voicemail": 4503599627370495,
"no_answer": 4503599627370495,
"busy": 4503599627370495,
"failed": 4503599627370495,
"pending": 4503599627370495,
"unknown": 4503599627370495,
"answer_rate": 123,
"connected_seconds": 1,
"average_connected_seconds": 123,
"average_ring_seconds": 123,
"key": "<string>"
}
],
"truncated": true
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}sequences:read. This is a read-only report of sequence calls that used a number pool at call time. Ordinary single-number or trunk calls and one-time calls are excluded, even if the same number or agent is used. No matching pool attempts returns zero totals and an empty rows array.
Supply start_date and end_date as ISO timestamps with timezones. The start is inclusive, the end is exclusive, and the range can be at most 31 days. Calls are selected by their start time. Optional pool_id, sequence_id, and agent_id filters apply together.
Use group_by=caller_number for per-number results, day for UTC daily trends, or attempt for the first, second, and third positions within a sequence phone step. totals always covers the whole filtered range. Up to 500 groups are returned; when truncated is true, narrow the filters rather than presenting the rows as a complete breakdown.
How metrics are counted
- Attempts: each recorded call counts once. Retries count separately. A setup attempt that never created a call record does not count.
- Unique contacts: each contact linked to an owned call session counts once within the total or group. Do not sum unique contacts across numbers, days, or attempt positions.
- Answered: the sequence classified the attempt as human answered. Detected voicemail is separate. Answer rate is answered attempts divided by all attempts, including pending calls, multiplied by 100. It is
nullwhen there are no attempts. - Busy: includes declined calls, matching the sequence outcome. Failed includes calls the sequence settled as failed, canceled, or missed.
- Pending: calls still initiating, ringing, or in progress without a settled outcome. Unknown: terminal calls whose pool outcome has not been recorded or recognized. Unknown does not mean no answer.
- Connected duration: time from answer to end for ended calls with valid timestamps, including voicemail. It excludes ringing and still-active calls. Averages are
nullwhen no eligible samples exist.
null key. Historical attempts remain available after number replacement, pool reassignment, pool deletion, or removing a person from the sequence while their sequence and call records are retained. These totals describe past calls; they do not put removed people back into the sending audience.
Companion apps
Ask Companion to build a number-pool performance app usingget_sequence_number_pool_call_metrics. Mini apps call the same operation as getSequenceNumberPoolCallMetrics. The report supplies live data; building an app does not change calling behavior or enable pools.
Spam reputation, carrier billing, and negotiated audio encryption are not part of this report.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Inclusive call start time, with timezone.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Exclusive call start time, with timezone. Maximum window: 31 days.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Group by recorded pool caller number, UTC day, or 1-based attempt position within a sequence step.
caller_number, day, attempt Pool used at call time, including a pool that has since been deleted.
^([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)$^([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)$^([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)$Response
Default Response
"sequence_number_pool_calls"Group by recorded pool caller number, UTC day, or 1-based attempt position within a sequence step.
caller_number, day, attempt Show child attributes
Show child attributes
Show child attributes
Show child attributes
At most 500 groups are returned. Totals cover the full filtered window; narrow filters if true.
Was this page helpful?