---
title: "Per-dashboard content \"tray\" (usage, pages, revisions, elements, viewers, schedules)."
method: GET
path: "/v1/orgs/{orgId}/analytics/content/dashboards/{dashboardId}"
tags: ["dashboards"]
---

# Per-dashboard content "tray" (usage, pages, revisions, elements, viewers, schedules).

`GET /v1/orgs/{orgId}/analytics/content/dashboards/{dashboardId}`

## Request

- Base URL: `http://localhost:8080`
- URL: `http://localhost:8080/v1/orgs/{orgId}/analytics/content/dashboards/{dashboardId}`
- Auth: one of:
  - API key in cookie `dvt_session`
  - HTTP bearer

A per-dashboard drill-down (DVT-1499) backing the command-center
Content page's row-expansion tray: usage KPIs and trend, page-grain
popularity, a revision timeline, element performance, top viewers,
and export-schedule health. Admin or owner only (audit:read). The
`data` object shape is frozen — field names are a client contract.
Lazily fetched per dashboard (e.g. on Content-tab row expansion)
rather than inlined onto `GET .../analytics/content`, since these
queries aren't bounded to that endpoint's top-50 leaderboard — same
pattern as `GET .../analytics/content/{dashboardId}/effort`. Only
the `days` filter applies here — connectionId/actorType have no
bearing on a single already-identified dashboard.

`revisions[].method` is exact (DVT-1522): `dashboard_revisions.actor_type`
alone determines human/agent/system, so no correlation with
`audit_logs` is needed.

## Query parameters

- `days` integer

## Response `200`

Per-dashboard content tray.

- object
  - `data` ContentDashboardTray, required: Per-dashboard content "tray" drill-down (DVT-1499) backing the command-center Content page's row-expansion detail panel. All field names are a frozen client contract.
    - `certification` Certification: A dashboard's derived certification standing (DVT-5223), computed at read time — dashboards carry no tier column. `tier` is the EFFECTIVE tier (highest-ranked live grant, else draft). `state` and the certified* fields describe the highest-ranked ACTIVE grant, which may be stale or expired; the effective* fields describe the grant that determined `tier`. For headless render actors only `tier` and `state` are returned.
      - `tier` 'draft' | 'published' | 'certified' | 'canonical', required
      - `state` 'live' | 'stale' | 'expired': State of the highest-ranked active grant; absent when there is none.
      - `certifiedTier` 'published' | 'certified' | 'canonical'
      - `domain` string
      - `certifiedBy` string
      - `certifiedAt` string, date-time
      - `certifiedRevisionId` string, uuid
      - `certifiedVersion` integer
      - `editsSince` integer: Revisions written since the certified one.
      - `grantedVia` string
      - `expiresAt` string, date-time
      - `queryRole` string
      - `effectiveDomain` string
      - `effectiveGrantedBy` string
      - `effectiveGrantedAt` string, date-time
      - `effectiveExpiresAt` string, date-time
    - `dashboardId` string, required: Dashboard UUID.
    - `title` string, required: Dashboard title, or empty string when untitled.
    - `folder` string, required: Folder name, or empty string when unfoldered.
    - `windowDays` integer, required: The requested window in calendar days (echo of the clamped `days` param), applied to every section except `kpis.favorites`/`kpis.openComments` (all-time) and `revisions` (all-time, capped to the latest 20).
    - `generatedAt` string, date-time, required: RFC3339 UTC timestamp when this result was assembled.
    - `kpis` object, required: Headline window numbers.
      - `views` integer, required: dashboard_views count in the window.
      - `uniqueViewers` integer, required: Distinct viewing actors in the window.
      - `edits` integer, required: audit_logs create/update events in the window.
      - `favorites` integer, required: user_favorites count, all time (no window concept).
      - `openComments` integer, required: dashboard_comments top-level threads with resolved_at IS NULL, all time (live rows only).
    - `previous` object, required: The immediately-prior equal-length window, for trend deltas. Favorites/openComments are point-in-time and have no "previous" concept.
      - `views` integer, required: dashboard_views count in the prior window.
      - `edits` integer, required: audit_logs create/update events in the prior window.
    - `viewsDaily` object[], required: Zero-filled per-day view series across the window, oldest first. Bounded to 90 days server-side regardless of `days`, to keep the payload bounded.
      - `date` string, required: Calendar date, YYYY-MM-DD (UTC).
      - `views` integer, required: dashboard_views count that day.
    - `pagePopularity` object[], required: Up to 20 pages by window view count, descending. `pageId` is dashboard_views.page_id (a UUID matching dashboard_pages.id, NOT a slug); "" (with title "Whole dashboard") for legacy views with no page anchor.
      - `pageId` string, required: Page UUID, or "" for whole-dashboard/legacy views.
      - `title` string: Page title; omitted when unresolved.
      - `views` integer, required: dashboard_views count for this page in the window.
    - `revisions` object[], required: Up to 20 dashboard_revisions rows, all time, newest first. `method` is exact, straight off dashboard_revisions.actor_type (DVT-1522) — see the endpoint description.
      - `at` string, date-time, required: The revision's created_at timestamp.
      - `actorName` string, required: Author display_name, else email, else 'agent'/'system'.
      - `method` 'human' | 'agent' | 'system', required: DVT-1522: 'human' (actor_type='user'), 'agent' (any other non-system actor_type), or 'system'. Exact — derived directly from dashboard_revisions.actor_type, which is NOT NULL and restricted to these three values, so no empty/unclassified case exists.
    - `elements` object[], required: This dashboard's query elements, adapted from the `OrgAnalyticsPerformance` element leaderboard pre-filtered to this one dashboard.
      - `elementId` string, required: Element UUID.
      - `name` string, required: Element name, or 'unnamed query' when untitled.
      - `page` string, required: The element's page title.
      - `runs` integer, required: query_executions rows for this element in the window.
      - `p95Ms` number, required: P95 duration in ms across those runs (0 when no data).
      - `errRate` number, required: Of runs, the error share (0..1); 0 when runs is 0.
    - `viewers` object[], required: Up to 10 viewers by window view count, descending.
      - `userId` string, required: Viewer's user UUID.
      - `name` string, required: Viewer's display_name, else email, else 'unknown'.
      - `views` integer, required: dashboard_views count in the window.
    - `schedules` object[], required: This dashboard's export_schedules with recent run health.
      - `scheduleId` string, required: Export schedule UUID.
      - `cadence` string, required: The schedule's cron expression.
      - `target` string, required: Human-readable recipient-count + destination-label summary.
      - `lastRuns` string[], required: Up to 14 recent runs, chronological oldest-first. 'pending'/'rendering'/'delivering'/'skipped' runs are excluded (neither a success nor a failure signal).
  - `meta` Meta, required: Response metadata.
    - `requestId` string, required: Correlates with the X-Request-Id header.
    - `total` integer: Item count, present on collection responses.
    - `nextCursor` string, nullable: Opaque keyset-pagination cursor, present on paginated responses (e.g. GET /v1/dashboards) when more rows exist beyond this page. Pass it back as the `cursor` query param to fetch the next page; absent or null on the last page.
    - `roleResolveDegraded` boolean: Snowflake mode only (DVT-2260), on GET /v1/dashboards: present and true when the caller's live Snowflake role resolution failed or was unavailable — role-shared dashboards may be missing from this page. Omitted (not merely false) whenever resolution succeeded or the role-share arm does not apply (off snowflake mode, an org admin/owner, or off the ingress listener).

## Other responses

- `401`: Missing, invalid, or expired session.
- `403`: The caller's role does not permit this action.
- `404`: Resource does not exist.

---

[API](https://skmtc.dev/dvt/apis/dvt-rest-api.md) · [All operations](https://skmtc.dev/dvt/apis/dvt-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dvt/apis/dvt-rest-api/revisions/00016f504165?raw)
