List dial metrics
Returns dials-per-second (DPS) metrics for your account’s outbound dials made with the Call Control Dial command and TeXML, as time buckets with dial counts, accepted and rejected dials, average and peak DPS, and the DPS limit in force.
The result has one record per region per bucket, ordered by start_time and then region, newest first unless sort=start_time. Regions are never summed: the DPS limit is enforced per region, so a cross-region total cannot be compared with it.
Only buckets that saw dials are returned. Treat a missing bucket as zero dials.
Only complete 5-second windows are counted, and a window is counted about 15 seconds after it closes. The newest granularity=second record is therefore your live DPS, about 20 seconds old. Request the last minute or two with sort=-start_time; the first record of each region is that region’s live rate (page[limit]=1 would hide every region but one). If no recent record exists, the live rate is zero.
Results are cursor paginated. Follow meta.next, or pass meta.cursors.after as page[after], until meta.next is absent. No total count is returned.
This endpoint is in development and can change before general availability.
curl --request GET \
--url https://api.telnyx.com/v2/dial_metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telnyx.com/v2/dial_metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telnyx.com/v2/dial_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.telnyx.com/v2/dial_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 := "https://api.telnyx.com/v2/dial_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("https://api.telnyx.com/v2/dial_metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telnyx.com/v2/dial_metrics")
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{
"data": [
{
"record_type": "dial_metric",
"region": "us",
"start_time": "2026-09-29T13:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"dials": {
"total": 85600,
"accepted": 85240,
"rejected": {
"dps_limit": 360,
"hourly_limit": 0,
"daily_limit": 0
}
},
"average_dps": 23.7778,
"peak_dps": 104,
"dps_limit": 100
},
{
"record_type": "dial_metric",
"region": "eu",
"start_time": "2026-09-29T13:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"dials": {
"total": 1200,
"accepted": 1200,
"rejected": {
"dps_limit": 0,
"hourly_limit": 0,
"daily_limit": 0
}
},
"average_dps": 0.3333,
"peak_dps": 4,
"dps_limit": null
}
],
"meta": {
"granularity": "hour",
"sort": "-start_time",
"start_time": "2026-09-29T12:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"cursors": {
"after": "MTc5MDY4NjgwMDpldQ"
},
"next": "/v2/dial_metrics?end_time=2026-09-29T14%3A00%3A00.000Z&granularity=hour&page%5Bafter%5D=MTc5MDY4NjgwMDpldQ&page%5Blimit%5D=2&sort=-start_time&start_time=2026-09-29T12%3A00%3A00.000Z"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Bucket size. second returns 5-second buckets (the finest resolution) and is kept for the last 48 hours. minute and hour are kept for the last 30 days.
second, minute, hour Inclusive start of the range, ISO 8601 (for example 2026-09-29T12:00:00.000Z). Buckets that start at or after this time are returned. Must not be older than the retention window of the chosen granularity.
Exclusive end of the range, ISO 8601. Must be after start_time. Buckets that start before this time are returned.
Sort order of the buckets by start_time. -start_time (default) returns the newest first, start_time the oldest first. region follows the same direction for buckets with the same start_time. To read the live rate, use granularity=second and sort=-start_time, then take the first record of each region.
-start_time, start_time Opaque cursor from meta.cursors.after of the previous page. Do not parse or construct it. A cursor that matches no records returns an empty page whose meta.cursors.after and meta.cursors.before both echo the given cursor.
Maximum number of buckets per page. Values outside the range are clamped to 1-10,000.
1 <= x <= 10000Was this page helpful?
curl --request GET \
--url https://api.telnyx.com/v2/dial_metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telnyx.com/v2/dial_metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telnyx.com/v2/dial_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.telnyx.com/v2/dial_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 := "https://api.telnyx.com/v2/dial_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("https://api.telnyx.com/v2/dial_metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telnyx.com/v2/dial_metrics")
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{
"data": [
{
"record_type": "dial_metric",
"region": "us",
"start_time": "2026-09-29T13:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"dials": {
"total": 85600,
"accepted": 85240,
"rejected": {
"dps_limit": 360,
"hourly_limit": 0,
"daily_limit": 0
}
},
"average_dps": 23.7778,
"peak_dps": 104,
"dps_limit": 100
},
{
"record_type": "dial_metric",
"region": "eu",
"start_time": "2026-09-29T13:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"dials": {
"total": 1200,
"accepted": 1200,
"rejected": {
"dps_limit": 0,
"hourly_limit": 0,
"daily_limit": 0
}
},
"average_dps": 0.3333,
"peak_dps": 4,
"dps_limit": null
}
],
"meta": {
"granularity": "hour",
"sort": "-start_time",
"start_time": "2026-09-29T12:00:00.000Z",
"end_time": "2026-09-29T14:00:00.000Z",
"cursors": {
"after": "MTc5MDY4NjgwMDpldQ"
},
"next": "/v2/dial_metrics?end_time=2026-09-29T14%3A00%3A00.000Z&granularity=hour&page%5Bafter%5D=MTc5MDY4NjgwMDpldQ&page%5Blimit%5D=2&sort=-start_time&start_time=2026-09-29T12%3A00%3A00.000Z"
}
}