---
title: "A render's status and artifact."
method: GET
path: "/v1/dashboards/{id}/renders/{renderId}"
tags: ["renders"]
---

# A render's status and artifact.

`GET /v1/dashboards/{id}/renders/{renderId}`

## Request

- Base URL: `http://localhost:8080`
- URL: `http://localhost:8080/v1/dashboards/{id}/renders/{renderId}`
- Auth: one of:
  - API key in cookie `dvt_session`
  - HTTP bearer

The render record. `url` links to the artifact and is present only when `status` is
`succeeded`: on SaaS/enterprise a **pre-signed, expiring** URL; in the Snowflake native app
a same-origin relative artifact route (not pre-signed, not expiring); `error` is present only when `failed`.

## Response `200`

The render.

- RenderEnvelope
  - `data` Render, required
    - `id` string, uuid, required
    - `dashboardId` string, uuid, required
    - `revision` integer, required: The dashboard revision the artifact captures (pinned at request time).
    - `format` 'png' | 'pdf', required
    - `width` integer, required
    - `height` integer, required
    - `page` integer: The 0-indexed page the artifact captures (default 0). Renders of different pages of the same revision are distinct artifacts.
    - `status` 'queued' | 'rendering' | 'succeeded' | 'failed', required
    - `error` string: Failure detail; present only when status is `failed`.
    - `url` string, uri-reference: Present only when status is `succeeded`. On SaaS/enterprise (R2), a pre-signed, expiring artifact URL. In the Snowflake native app (DVT-1364, render_app_stage), an app-authenticated artifact route (`GET …/renders/{renderId}/artifact`) returned as a same-origin relative path (not an absolute URL), not pre-signed and not expiring — only a signed-in human session can fetch it, not the calling MCP session; use `dvt_dashboard_render_inline` there for raw bytes.
    - `createdAt` string, date-time, required
    - `completedAt` string, date-time
  - `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.
- `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)
