Analytics API - Conversation Query

Right, three coffees into debugging this and… it’s the interval granularity. Or is it? The API’s being weird.

We’re on Zoom Contact Center, pulling conversation metrics via the Analytics API - specifically, trying to get total handle times per agent, grouped by hour. The Architect flow is pretty standard - IVR, queue, then dispatch to agents. Data actions are pushing call data into a custom object, nothing fancy.

The query is structured like this:

from genesyscloud.client import Client
import pandas as pd

gc = Client.instance()
analytics_api = gc.analytics

query = {
 "interval": "hour",
 "metrics": [
 "oTotalHandleTime"
 ],
 "dimensions": [
 "agentId"
 ],
 "time_unit": "seconds",
 "time_start": "2024-01-26T00:00:00Z",
 "time_end": "2024-01-26T01:00:00Z"
}

response = analytics_api.get_conversations_details(query=query)
df = pd.DataFrame(response.data)
print(df)

Running that with genesyscloud==3.0.12 and pandas==2.1.3. Expecting one row per agent, per hour, with the total handle time. Instead, it’s returning records for every minute within that hour. Like it’s ignoring the "interval": "hour" setting. The time_unit: "seconds" part doesn’t seem to influence it.

Is this a bug in the SDK? Or am I missing something obvious about how the API interprets granularity? Tried switching to "interval": "day" and it correctly aggregates to daily totals. The documentation isn’t exactly clear on this point. Just says “Valid values are: minute, hour, day”.

Also, the documentation mentions a granularity parameter, but that’s deprecated. Shouldn’t be needing that.

The raw API call - bypassing the SDK - also shows the same behavior.

curl -X POST https://api.zoom.us/api/v2/analytics/conversations/details/aggregated \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
 "interval": "hour",
 "metrics": ["oTotalHandleTime"],
 "dimensions": ["agentId"],
 "time_unit": "seconds",
 "time_start": "2024-01-26T00:00:00Z",
 "time_end": "2024-01-26T01:00:00Z"
}'

It just keeps spitting out minute-level data. Feels like the API just isn’t respecting the interval setting.