Response format
Every successful response has the same outer shape:total: implicitCOUNT(*)for the row. Always present.<aggregationKey>: one key per requested aggregation. The key is<type><Column>in camelCase (e.g.sumPotentialCostSavings,p99CacheLookupLatencyMs,sumCacheReadInputTokens).<groupByKey>: one key pergroupByentry. The key is the lowerCamelCase form of the underlying column. Two special mappings:userEmailandvirtualaccountboth map tocreatedBySubjectSlugin the response.teammaps toteam(the value is a single unnested scalar, not an array). All othergroupBykeys preserve their lowerCamelCase name.
startTimestamp: present only for timeseries responses. Bucket start as an ISO 8601 timestamp string (e.g."2026-04-29T12:00:00.000Z"). Distribution responses omit it.endTimestamp: present only for timeseries responses. Bucket end as an ISO 8601 timestamp string, equal to the next bucket’sstartTimestamp(e.g."2026-04-29T13:00:00.000Z"). Distribution responses omit it.
Virtual-model rows surface under the
virtualModelName key in the response (not virtualModel), because the response key is the lowerCamelCase of the underlying database column.Distribution response example
Timeseries response example
If
groupBy is empty or omitted, the response collapses to a single row (or one row per timeseries bucket) summarising every cache-eligible request inside the window. Note that the server always pins WHERE "CacheLookupStatus" IS NOT NULL, so non-cache rows are filtered out automatically.Error responses
A malformed query returns400 Bad Request:
- Operator not allowed on this field, for example,
STRING_CONTAINSoncacheType(it supports onlyIN/NOT_IN). - Missing required
value(or wrong shape, e.g. scalar where array is expected forIN/BETWEEN). - Unknown field name for the datasource.
- Invalid
intervalformat (compound expressions, unrecognised unit, non-positive integer). - Missing required
intervalfor a timeseries query.
401 Unauthorized: missing or invalid bearer token.403 Forbidden: caller does not have permission for the requested scope.500 Internal Server Error: unexpected server error while executing the query.