---
title: "Get Dashboard Data"
method: GET
path: "/api/v1/public/dashboards/{dashboard_id}/data"
tags: ["Dashboards"]
---

# Get Dashboard Data

`GET /api/v1/public/dashboards/{dashboard_id}/data`

## Request

- Base URL: `https://app.traceroot.ai`
- URL: `https://app.traceroot.ai/api/v1/public/dashboards/{dashboard_id}/data`
- Auth: HTTP bearer

Answer one dashboard's query widgets, up to the per-request cap, for a window.

## Path parameters

- `dashboard_id` string, required

## Query parameters

- `range` '30m' | '1h' | '3h' | '6h' | '1d' | '7d' | '14d' | '30d' | '60d' | '90d', nullable: A preset window ending now, by the site picker's id. Give this or explicit start_time/end_time; neither means the site's 24-hour default.
- `start_time` string, date-time, nullable
- `end_time` string, date-time, nullable
- `project_id` string, nullable: Target project for the request. Required when authenticating with a user session token (a user credential is only meaningful scoped to a project); for an API key it is optional and, if given, must match the key's project.

## Response `200`

Successful Response

- DashboardDataResponse: A dashboard's query widgets, up to the per-request cap, answered for one window. Widgets keep the dashboard's order. ``window`` is the window they were all answered for — the one to name alongside any figure taken from here. ``layout`` is the dashboard's grid placement, as ``get_dashboard`` returns it.
  - `dashboard` DashboardSummary, required: The dashboard fields shared by the list and detail reads. ``creator`` is the created-by user's display name (or email), resolved by the internal route; it is None when the creating account was deleted.
    - `create_time` string, date-time, required
    - `creator` string, nullable, required
    - `description` string, nullable, required
    - `id` string, required
    - `is_default` boolean, required
    - `name` string, required
    - `update_time` string, date-time, required
  - `failed` integer, required
  - `layout` DashboardLayoutItem[], nullable
    - `h` integer, required
    - `i` string, required
    - `w` integer, required
    - `x` integer, required
    - `y` integer, required
  - `queried` integer, required
  - `skipped` integer, required
  - `widgets` DashboardWidgetData[], required
    - `columns` string[], nullable
    - `error` string, nullable
    - `id` string, required
    - `meta` object, nullable
    - `rows` array[], nullable
      - unknown[]
        - unknown
    - `spec` unknown
    - `status` 'ok' | 'skipped' | 'error', required
    - `title` string, required
    - `truncated` boolean
    - `type` string, required
  - `window` QueryWindow, required: The window a query was actually answered for. ``range`` is the preset id the caller gave (or the default's, when they gave nothing) and None for explicit bounds. ``clamped`` is True when the plan's retention pulled ``start_time`` forward — the honest reason a caller's window and the answered one differ.
    - `clamped` boolean, required
    - `end_time` string, date-time, required
    - `range` '30m' | '1h' | '3h' | '6h' | '1d' | '7d' | '14d' | '30d' | '60d' | '90d', nullable, required
    - `start_time` string, date-time, required

## Other responses

- `401`: Authentication failed
- `404`: Dashboard not found
- `422`: Validation Error
- `503`: Authentication service unavailable

---

[API](https://skmtc.dev/traceroot/apis/traceroot-public-api.md) - [All operations](https://skmtc.dev/traceroot/apis/traceroot-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/traceroot/apis/traceroot-public-api/revisions/ce6aef96c0d6?raw)
