---
title: "Delete a stored render (native app)."
method: DELETE
path: "/v1/dashboards/{id}/renders/{renderId}"
tags: ["renders"]
---

# Delete a stored render (native app).

`DELETE /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

Native app only (DVT-4925): **404 unless the render app-stage is configured**
(`editionCapabilities.renderDelete`). Behavior depends on the caller.

**Self-delete** (any caller with `dashboard:read` but without `render:delete`): hard-deletes
the caller's OWN `user`, `email` or `email_scheduled` render (row and stored object, one
transaction, audited). Another user's render, a thumbnail, or a render under a different
dashboard all read as **404**; a caller whose credential lacks `dashboard:read` gets **403**.

**Admin delete** (`render:delete`, admin or owner): deletes any render in the organization,
including renders under a soft-deleted dashboard and renders requested by departed users.
Non-thumbnail renders are hard-deleted. A version **thumbnail is only soft-deleted**
(`deletedAt` set, object kept, no longer served; reversible with `restoreRender`).

**409** while the render is still queued or rendering.

## Response `204`

The render was deleted (or

## Other responses

- `401`: Missing, invalid, or expired session.
- `403`: The caller's role does not permit this action.
- `404`: Resource does not exist.
- `409`: The request conflicts with the current state of the resource.
- `429`: Per-actor API rate limit exceeded (SEC-2). All authenticated `/v1` routes apply a per-actor fixed-window default tier; selected compute-heavy routes (connection tests, column describe, data export) apply an additional tighter tier. Auth endpoints apply a per-IP tier. Problem type: `https://docs.dvt.dev/errors/rate-limited`. Wait for the `Retry-After` response header value (seconds) before retrying.
- `500`: An unexpected internal error occurred (e.g. the object delete or the audit write failed). A 500 can follow a stored-object removal whose row delete did not commit: the object is gone but the row remains, and the event is recorded as `dashboard.render.delete.commit_failed`. Retrying converges (the object delete is idempotent).

---

[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)
