/v1/analytics/computer/usageUsage AnalyticsReturns your organization's Perplexity usage analytics as a bucketed time series for a single dataset. Requires an organization analytics API key, generated by an org admin from Settings → Organization → Computer in the Perplexity web app. Only complete UTC grid buckets are returned: start_time snaps down to its bucket, and the in-progress bucket is never included. Datasets differ in what they count: credits for credit_usage, queries for query_volume, distinct active members for daily_active_users, and thread counts for the rest. Buckets of daily_active_users are not additive — a member active on several days is counted once per day, so summing them is not the window's active-member count.
Parameters
datasetstringqueryrequiredThe dataset to query. query_volume and daily_active_users are daily organization-level datasets: they reject bucket_width=1h and user_email.
start_timeintegerqueryrequiredWindow start in unix seconds (UTC), inclusive. Snapped down to the bucket grid, so the first bucket can include usage from before this time.
end_timeintegerqueryWindow end in unix seconds (UTC), exclusive. Defaults to now; future values are capped at now. The window may span at most 90 days.
bucket_widthstringqueryBucket size. Buckets align to the UTC grid. Not accepted as 1h for query_volume or daily_active_users, which are stored at day grain.
limitintegerqueryBuckets per page. 1d: default 7, max 31. 1h: default 24, max 168.
pagestringqueryOpaque pagination cursor from a previous response's next_page. Valid only with the same query parameters it was issued for.
user_emailstring · emailqueryRestrict results to a single member of your organization. Emails that don't match a current member return a generic 400. Not available for query_volume or daily_active_users, which are aggregated per organization; use the v2 endpoint for per-member query volume.
Responses
categoriesarray of stringrequiredCategory breakdown labels the requested dataset surfaces, in canonical render order. Each label is a key in every bucket's `by_categories`.
Show child attributes
dataarray of objectrequiredEvery bucket in the page's window, in chronological order. Buckets without data carry count 0 and an empty breakdown.
Show child attributes
Show array items
by_categoriesobjectrequiredCategory breakdowns for this bucket, keyed by the labels declared in the response's top-level `categories` list. An empty list means the bucket has no data for that breakdown.
countintegerrequiredBucket total. For credit_usage this may exceed the sum of any single breakdown — usage without a category attribution counts toward the total but not the breakdown.
end_timeintegerrequiredBucket end in unix seconds (UTC), exclusive.
start_timeintegerrequiredBucket start in unix seconds (UTC), inclusive.
has_morebooleanrequiredWhether more buckets exist beyond this page. False also when the window's remaining buckets are past the current data frontier.
next_pagenull | stringCursor for the next page; pass as the page parameter with otherwise identical query parameters.
{
"categories": [
"Model",
"Credit Source"
],
"data": [
{
"by_categories": {
"Credit Source": [
{
"category": "paid",
"count": 250
},
{
"category": "promo",
"count": 80
}
],
"Model": [
{
"category": "claude-opus-4-8",
"count": 210
},
{
"category": "claude-sonnet-4-6",
"count": 120
}
]
},
"count": 350,
"end_time": 1746144000,
"start_time": 1746057600
}
],
"has_more": false,
"next_page": null
}errorobjectrequiredShow child attributes
codeintegerrequiredmessagestringrequiredtypestringrequired{
"error": {
"code": 400,
"message": "start_time must be before end_time.",
"type": "invalid_request"
}
}errorobjectrequiredShow child attributes
codeintegerrequiredmessagestringrequiredtypestringrequired{
"error": {
"code": 0,
"message": "string",
"type": "string"
}
}errorobjectrequiredShow child attributes
codeintegerrequiredmessagestringrequiredtypestringrequired{
"error": {
"code": 0,
"message": "string",
"type": "string"
}
}errorobjectrequiredShow child attributes
codeintegerrequiredmessagestringrequiredtypestringrequired{
"error": {
"code": 0,
"message": "string",
"type": "string"
}
}