Analytics Aggregates API returns empty data for custom 15-minute intervals

We are attempting to build a custom interval report using the Analytics Conversations Aggregates query. The goal is to pull interaction counts broken down into 15-minute buckets for a specific queue. The Terraform state is clean, but the API response is consistently returning zero rows when we specify a custom interval in the request body.

We have verified that the same query works perfectly with the default hourly interval. When we switch to 15 minutes, the response status is 200, but the data array is empty. We are using the Python SDK to make the request. Here is the payload we are sending:

{
 "dateFrom": "2023-10-01T00:00:00.000Z",
 "dateTo": "2023-10-01T23:59:59.999Z",
 "interval": "15 minutes",
 "groupings": ["queueId"],
 "metrics": ["conversationCount"]
}

The environment details are as follows:

  • Genesys Cloud API version: v2
  • SDK: PureCloud Platform Client v145.0.0
  • Timezone: Europe/Berlin
  • Queue ID: Valid and active

We have tried adjusting the dateFrom and dateTo to ensure they align with 15-minute boundaries, but the result remains the same. The documentation states that custom intervals are supported for aggregates, yet the behavior suggests otherwise. Has anyone encountered this issue with sub-hourly intervals in the aggregates endpoint? The hourly bucket works fine, which makes us think the syntax for the interval string might be incorrect, but 15 minutes seems standard.

The docs for POST /api/v2/analytics/conversations/aggregate state that the interval string must strictly follow ISO 8601 duration format.

“Specify the interval for the query. Valid values are 1 minute, 5 minutes, 15 minutes, 30 minutes, 1 hour, 6 hours, 1 day.”

If you are sending “15 minutes” as a plain string in the JSON, the API might be rejecting it silently or defaulting to a range that has no data. In the .NET SDK, you usually pass this as a string in the Query object, but the casing and spacing matter.

Try this exact payload structure in C#. Note the lowercase ‘m’ for minutes in the duration string.

var query = new ConversationAggregateQuery 
{ 
 View = "agent",
 Interval = "PT15M", // ISO 8601 format for 15 minutes
 DateFrom = "2023-10-01T00:00:00.000Z",
 DateTo = "2023-10-01T01:00:00.000Z",
 Entities = new List<ConversationAggregateEntity>
 {
 new ConversationAggregateEntity { Id = "your-queue-id" }
 },
 GroupBy = new List<string> { "interval", "wrapUpCode" }
};

var result = await analyticsClient.PostAnalyticsConversationsAggregateAsync(query);

Using PT15M instead of “15 minutes” often fixes the empty result set issue because the backend parser is strict. If you still get zeros, check if the DateFrom and DateTo actually contain data for that specific queue. Sometimes the query runs successfully but returns empty because the time window is too narrow or the queue has no interactions.

Also, make sure you aren’t hitting the rate limit. The analytics API is heavy. If you are polling this in a loop, add a small delay.

await Task.Delay(200); // Respect rate limits

If the interval string is correct and the data exists, check the errors array in the response. It usually tells you if the interval is invalid.