curl --request GET \
--url https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph \
--header 'X-API-KEY: <api-key>'import requests
url = "https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"volume": {
"total": {
"count": 203,
"previous": 239,
"delta_pct": -15.06,
"campaign_count": 51,
"api_count": 152
},
"callback_count": {
"count": 12,
"previous": 10,
"delta_pct": 20
},
"registered": {
"count": 2,
"previous": 0,
"delta_pct": null
},
"ongoing": {
"count": 1,
"previous": 0,
"delta_pct": null
},
"retry": {
"count": 0,
"previous": 0,
"delta_pct": null
},
"not_dialed": {
"count": 3,
"previous": 5,
"delta_pct": -40
},
"connected": {
"count": 179,
"previous": 198,
"delta_pct": -9.6
},
"failed": {
"count": 19,
"previous": 39,
"delta_pct": -51.28
},
"cancelled": {
"count": 2,
"previous": 2,
"delta_pct": 0
},
"connection_rate": {
"count": 0.8818,
"previous": 0.8285,
"delta_pct": 6.43,
"campaign_time_exhausted": 4,
"retry_exhausted": 12
},
"voicemail": {
"count": 6,
"previous": 9,
"delta_pct": -33.33
},
"aht_seconds": {
"count": 40.7,
"previous": 41.2,
"delta_pct": -1.21,
"duration_distribution": {
"0_10": 20,
"10_30": 40,
"30_60": 80,
"60_plus": 39
}
},
"total_minutes": {
"count": 121.4,
"previous": 140.9,
"delta_pct": -13.84
},
"unique_numbers_used": {
"count": 8,
"previous": 8,
"delta_pct": 0
},
"chat_total": {
"count": 2,
"previous": 1,
"delta_pct": 100
},
"total_interactions": {
"count": 205,
"previous": 240,
"delta_pct": -14.58
},
"by_bucket": [
{
"bucket": "2026-10-14",
"total": 40,
"completed": 33,
"failed": 5,
"cancelled": 0,
"registered": 1,
"ongoing": 1,
"retry": 0
}
]
}
}{
"message": "invalid channel(s): sms"
}{
"message": "Failed to fetch volume graph!"
}Get Volume Analytics
Get headline call metrics with the change against the previous period, plus call volume over time, filtered by date, agent, version, campaign or channel.
curl --request GET \
--url https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph \
--header 'X-API-KEY: <api-key>'import requests
url = "https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://prod-api.ringg.ai/ca/api/v0/analytics/v4/volume-graph', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"volume": {
"total": {
"count": 203,
"previous": 239,
"delta_pct": -15.06,
"campaign_count": 51,
"api_count": 152
},
"callback_count": {
"count": 12,
"previous": 10,
"delta_pct": 20
},
"registered": {
"count": 2,
"previous": 0,
"delta_pct": null
},
"ongoing": {
"count": 1,
"previous": 0,
"delta_pct": null
},
"retry": {
"count": 0,
"previous": 0,
"delta_pct": null
},
"not_dialed": {
"count": 3,
"previous": 5,
"delta_pct": -40
},
"connected": {
"count": 179,
"previous": 198,
"delta_pct": -9.6
},
"failed": {
"count": 19,
"previous": 39,
"delta_pct": -51.28
},
"cancelled": {
"count": 2,
"previous": 2,
"delta_pct": 0
},
"connection_rate": {
"count": 0.8818,
"previous": 0.8285,
"delta_pct": 6.43,
"campaign_time_exhausted": 4,
"retry_exhausted": 12
},
"voicemail": {
"count": 6,
"previous": 9,
"delta_pct": -33.33
},
"aht_seconds": {
"count": 40.7,
"previous": 41.2,
"delta_pct": -1.21,
"duration_distribution": {
"0_10": 20,
"10_30": 40,
"30_60": 80,
"60_plus": 39
}
},
"total_minutes": {
"count": 121.4,
"previous": 140.9,
"delta_pct": -13.84
},
"unique_numbers_used": {
"count": 8,
"previous": 8,
"delta_pct": 0
},
"chat_total": {
"count": 2,
"previous": 1,
"delta_pct": 100
},
"total_interactions": {
"count": 205,
"previous": 240,
"delta_pct": -14.58
},
"by_bucket": [
{
"bucket": "2026-10-14",
"total": 40,
"completed": 33,
"failed": 5,
"cancelled": 0,
"registered": 1,
"ongoing": 1,
"retry": 0
}
]
}
}{
"message": "invalid channel(s): sms"
}{
"message": "Failed to fetch volume graph!"
}count, previous (the period of the same length just before) and delta_pct.
Notes
sum(by_bucket[].total)equalstotal.count, and in each buckettotal = completed + failed + cancelled + registered + ongoing + retry.total.campaign_countandtotal.api_countsplit the current total by where calls came from. A callback counts toward its parent call’s campaign.callback_countalways reports callback calls, whateverinclude_callbackis set to. It overlapstotalonly wheninclude_callback=true.connection_rate.campaign_time_exhaustedandconnection_rate.retry_exhaustedcount calls stopped by the campaign’s end time or retry limit.aht_seconds.duration_distributioncounts completed calls in four buckets: under 10 seconds, 10 to 30, 30 to 60, and 60 or more.unique_numbers_usedis the phone numbers your workspace owns, so it ignores the date range and filters.- With a call
channelfilter, chats are left out andchat_total.countis0.
Errors
400: a filter is invalid, such as an unknownchannel, a malformed ID, orsub_workspace_idsent from a workspace that isn’t a primary workspace.401:X-API-KEYis missing or invalid.
Authorizations
Query Parameters
Start of the reporting window. Accepts YYYY-MM-DD or ISO-8601. Omit both dates for all time.
"2026-10-01"
End of the reporting window (inclusive). Accepts YYYY-MM-DD or ISO-8601.
"2026-10-15"
Filter by one or more agent IDs (comma-separated).
"00000000-0000-4000-8000-0000000000a1"
Filter by one or more agent version IDs (comma-separated).
"00000000-0000-4000-8000-0000000000d1"
Filter by one or more campaign (bulk list) IDs (comma-separated). Callback calls inherit the campaign of their parent call.
"00000000-0000-4000-8000-0000000000c1"
true returns only voicemail calls, false excludes them. Omit to include all calls.
false
Filter by call channel (comma-separated): inbound, outbound, webcall. Unknown values return 400.
"outbound"
Include callback-feature calls (call_category = CALLBACK) in the metrics. Defaults to false.
false
Primary workspaces only: limit the combined analytics to these Ringg Spaces. Repeat the parameter for multiple IDs. The primary workspace's own ID is accepted; any other workspace sending this parameter gets 400.
["00000000-0000-4000-8000-000000000101"]
IANA timezone used to bucket the time series (for example Asia/Kolkata). Bucket labels are returned in this timezone. Omitted or invalid values fall back to UTC.
"Asia/Kolkata"
Response
Volume analytics retrieved successfully.
Show child attributes
Show child attributes
Was this page helpful?