Skip to content

list_dashboard_versions

List a dashboard's archived body snapshots, newest first. Parameters, return shape, the empty state that carries no JSON, and scope.

Lists a dashboard's saved body snapshots, newest first. Each entry carries a version_id you can pass to restore_dashboard_version or get_dashboard_version.

Snapshots are created automatically: each republish of an existing slug archives the prior body first, so the first publish of a slug has no versions.

Behaviour hints for clients: read-only, not open-world.

Parameters

ParameterTypeRequiredNotes
slugstringyesCanonical slug of the dashboard whose versions to list.
workspacestringnoWorkspace slug.

There is no pagination and no limit. One call returns up to 50 versions, which is exactly the 20 automatic plus 30 named caps added together, so the set is always complete. See Version retention.

Returns

3 saved versions for "revenue-overview" (newest first):
1. "Before redesign" - 8b3f... - 2026-07-29T12:04:11Z - 47210 bytes - text/html
2. 2c91... - 2026-07-28T09:11:00Z - 46980 bytes - text/html
3. 11ad... - 2026-07-27T18:02:44Z - unknown - unknown

Pass a version_id to restore_dashboard_version to roll back. Up to 20 automatic snapshots plus your named versions (up to 30) are kept per dashboard; naming a version (update_dashboard_version) exempts it from the autosave prune.

BEGIN_JSON
{"slug":"revenue-overview","dashboard_id":"...","count":3,"versions":[{"version_id":"...","created_at":"...","size":47210,"content_type":"text/html","label":"Before redesign"}]}
END_JSON

A missing size or content type renders as unknown. The quoted prefix is the label, omitted when a version is unnamed.

The empty state carries no JSON block

A dashboard with no snapshots returns text only, with no BEGIN_JSON and no structuredContent:

No saved versions for "<slug>". Versions are archived automatically when you republish an existing dashboard; the first publish creates none.

A parser that assumes the JSON block is always present will throw here rather than read an empty list.

Errors

The shared slug rules, plus:

ConditionText
The dashboard lookup faileddashboard lookup failed: <err>
No such dashboarddashboard not found
The version read failedversion list failed: <err>
A workspace was named but not routedworkspace target not resolved: this request names a workspace but was not routed to one (the caller must resolve the workspace and wire workspace-scoped deps)

That last one is a fail-closed guard, not something an ordinary call reaches. It means the request said "workspace" and the scope did not follow, and refusing is the only safe answer.

Scope

Workspace-capable. Every member sees the whole history no matter which member published each snapshot: the lookup switches to a membership-gated read, because the personal read cannot see a co-member's dashboard at all and would otherwise report the dashboard as brand new.

Check it worked

Republish an existing slug, then list again. The count should have gone up by one and the newest entry should be the body you just replaced, not the one you just published.

Last updated 2026-08-04