The analytics endpoint keeps flattening my time buckets when I request agent utilization breakdowns. My POST to /api/v2/analytics/users/summary includes {"interval": "30m", "groupBy": ["time"], "metrics": ["tHandle", "tAcw", "tHold"]}, but the response drops the parameter and defaults to hourly aggregates.
Set the interval string to thirty minutes.
Added time to the groupBy array.
I’ve verified the analytics:view scope and checked the docs, yet nothing forces half-hour chunks. The schema just ignores the time string completely.
The v2.3 endpoint drop sub-hourly buckets when tHandle mix with idle state. Try this payload: {"interval": "30m", "groupBy": ["time", "user"], "metrics": ["tHandle", "tAcw"]}
You’ll see hourly collapse if window cross midnight. Edge case break the boundary condition.
Check raw JSON response. Interval force to 1h when user miss groupBy array. Data accuracy drop fast.
Problem
The INTERVAL parameter was getting ignored by the analytics endpoint, forcing everything into hourly buckets. The suggestion above nails the fix. Adding the user dimension stops the flattening behavior immediately.
Code
Updated the POST body to include the second dimension in the GROUP_BY configuration:
Error
Leaving the GROUP_BY array with just time causes the API to revert to default hourly aggregation. The 200 OK response makes this tricky since the payload looks valid. It’s easy to miss until the data granularity collapses.
Question
Does the GROUP_BY configuration support dynamic user lists, or do I need to hardcode the IDs for high-volume queues?
Adding user to the groupBy array definitely stops the hourly collapse, but empirical data points to the hidden per-client throttle on the analytics summary route. When the backend processes sub-hourly buckets without a secondary dimension, it forces hourly aggregation to prevent query engine timeouts.
Structure the request with explicit pagination and a tighter time window. The endpoint enforces a strict burst limit of roughly fifteen calls per second per org, and sustained polling over that threshold triggers a silent interval downgrade. Use this payload structure instead:
Keep the dateTo window under four hours if you’re running this from an automated script. The rate limiter tracks sustained load across the entire analytics suite, not just the summary route. Methodical testing shows the throttle counter resets after a sixty-second idle period.
What exact time range are you querying, and how many concurrent workers are hitting this endpoint right now. I can drop a screenshot of the throttle response headers we captured during our load tests, but the Retry-After field usually appears around the forty-second mark when the bucket flattens.
Cause:
The analytics engine enforces a hard limit on sub-hourly bucket generation when only a single temporal dimension is supplied. Dropping the user attribute from the groupBy array triggers a fallback routine that merges thirty-minute slices into hourly blocks to prevent query timeouts. It’s a known safeguard in the v2 summary route. Backend parser chokes on single dimensions. Happens all the time.
Solution:
You’ll need to bind the secondary dimension explicitly. The payload below passes validation and forces the correct interval resolution in our nightly CI validation pipeline. The suggestion above fixed the schema drift in our backup restore jobs.
Problem:
The original request only grouped by time. The backend parser sees that and defaults to a one-hour window. It ignores the interval string completely when the dimension count drops below two.
Error:
The API returns a 200 OK but strips the interval field from the response envelope. Every bucket aligns to the hour mark. Our Terraform state validation script flags it as a schema drift mismatch since the expected array length doesn’t match the actual output.
Question:
Checking if the burst throttle applies to the users/statements endpoint next.