GET/api/v1/analytics/summary
Read consumption analytics over a range
The numbers of the app's analytics dashboard: views, unique viewers, playback time and downloads over range reporting days ending today (the org's reporting day — its time zone and start hour — not a UTC calendar day), the same over the range before it, one point per day, the ten most viewed assets, and the device and audience breakdowns. viewer_type filters to one audience (api — developer-API downloads). Reading it first materializes every reporting day that has ended into the rollup, as the app's dashboard does (a write of derived data only). Channel audience is not served. For an OAuth token, its person needs membership of the org (no platform-admin bypass) and an asset's name is null when they may not read the asset; a key reads the whole org. 404 when the org does not have analytics, and for an OAuth token whose person is not a member of the org.
Scopes: analytics:read
Parameters
rangequery · "7d" | "30d" | "90d" | "365d"How many reporting days, today included. Default
30d.viewer_typequery · "all" | "internal" | "consumer" | "embed" | "api"Filter to one audience. Default
all.
Response 200ConsumptionAnalytics
How the org's content was consumed over a range: the numbers of the app's analytics dashboard.
rangeobjectrequiredfromstring (date)requiredThe first reporting day of the range (YYYY-MM-DD).
tostring (date)requiredThe last reporting day of the range (YYYY-MM-DD), today included.
reporting_dayobjectrequiredThe org's reporting day: every day, range and bucket here is one of these, not a UTC calendar day.
timezonestringrequiredThe org's reporting-day time zone (IANA).
day_start_hourintegerrequiredThe hour (0–23, in that zone) a reporting day starts — a broadcaster's day may start at 06:00.
viewer_type"all" | "internal" | "consumer" | "embed" | "api"requiredThe audience the figures are filtered to (
all— none).by_viewer_typeignores it.summaryAnalyticsTotalsrequiredConsumption totals over a range.
total_viewsintegerrequiredViews: a surface that renders the asset was opened (once per session and asset).
unique_viewersintegerrequiredDistinct viewers over the whole range — exact, not a sum of daily uniques.
total_playback_msintegerrequiredMilliseconds of playback watched.
total_downloadsintegerrequiredDownloads: the bytes were taken.
previous_periodobjectrequiredThe same totals over the range of equal length ending the day before
range.from.total_viewsintegerrequiredViews: a surface that renders the asset was opened (once per session and asset).
unique_viewersintegerrequiredDistinct viewers over the whole range — exact, not a sum of daily uniques.
total_playback_msintegerrequiredMilliseconds of playback watched.
total_downloadsintegerrequiredDownloads: the bytes were taken.
fromstring (date)requiredtostring (date)required
seriesarray of objectrequiredOne point per reporting day of the range, oldest first, zero-filled.
daystring (date)requiredviewsintegerrequiredunique_viewersintegerrequiredDistinct viewers that day.
watched_msintegerrequireddownloadsintegerrequired
top_assetsarray of objectrequiredThe ten most viewed assets of the range (every version of an asset counts toward it), most viewed first.
assetobjectrequiredidstring (uuid)requiredThe asset's current version id (GET /api/v1/assets/{id}).
namestring or nullrequiredThe asset's name. Null — for an OAuth token — when its person may not read the asset: the figures are org figures every member sees on the dashboard; the name is not disclosed.
viewsintegerrequireddownloadsintegerrequired
by_devicearray of objectrequiredViews, downloads and playback sessions together, by device, largest first.
device_typestringrequireddesktop,mobile,tabletorunknown.countintegerrequired
by_viewer_typearray of objectrequiredViews, downloads and playback sessions together, by audience, largest first — over every audience, whatever
viewer_typeis.viewer_typestringrequiredinternal(a member),consumer,embed(a share link) orapi(a developer-API download).countintegerrequired
Other responses
- 401 unauthenticated — no key, or an unknown, revoked or expired one.
- 403 insufficient-scope — the key lacks a required scope.
- 404 not-found.
- 422 validation — a bad
rangeorviewer_type(errors[].pathnames it). - 429 rate-limited — the key's request budget is spent; wait Retry-After seconds.
- 500 internal.