Skip to content

Reference / Publishing

update_dashboard

Rename a dashboard or edit its metadata without republishing it. Parameters, the rename pipeline, errors and scope rules.

Changes a dashboard's metadata, renames it, or both, without republishing it. A rename leaves the old URL working as a 301 redirect to the new canonical one. To replace the body, use publish_dashboard instead.

When you combine new_slug with metadata fields, both apply atomically.

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

Parameters

ParameterTypeRequiredNotes
slugstringyesThe dashboard's current canonical slug.
new_slugstringnoRename target. Must differ from slug and not collide with another slug or alias of yours.
namestringnoDisplay name. Omit to preserve. Empty string is rejected.
tagsarraynoOmit to preserve, [] to clear.
chartstringnoOmit to preserve. Empty string is rejected.
workspacestringnoWorkspace slug.

At least one of new_slug, name, tags or chart must be provided.

The display name follows the URL by default

Passing new_slug without name auto-sets the name to the title-cased form of the new slug, so quarterly-revenue becomes Quarterly Revenue. Pass name explicitly to keep a custom label through a rename.

Returns

A rename:

Updated workspace dashboard.
Renamed: marketing-dashboard -> quarterly-revenue
Name: Quarterly Revenue
Chart: bar
Tags: marketing, q2
URL: https://acme.dashies.ai/quarterly-revenue

A metadata-only edit reports the current state, and carries Slug where the rename carries Renamed:

Updated workspace dashboard.
Slug: quarterly-revenue
Name: Quarterly Revenue
URL: https://acme.dashies.ai/quarterly-revenue

Chart and Tags belong to the RENAME shape, where they appear only when set. The metadata shape is exactly the block above it and never carries either, whatever the dashboard has. The trailing URL line is appended by the tool rather than built by the update itself, so it is the last line of both.

There is no OLD-URL line. A rename leaves the previous slug as an alias that 301s, which URLs, slugs and reserved names covers, but the receipt does not restate it.

Errors

Beyond the shared path and metadata rules:

ConditionText
new_slug not a stringnew_slug must be a string
new_slug fails slug validationnew_slug invalid: <slug error>
new_slug equals slugnew_slug must differ from slug
Nothing to changeat least one of new_slug, name, tags, chart must be provided
visibility passed at allvisibility is no longer accepted: public dashboards have been removed, so every dashboard is visible to its owner or, for a workspace dashboard, to that workspace's members. Omit the argument.
The slug names no dashboard, on a metadata-only editdashboard not found for slug "<slug>"

A metadata-only edit of a slug that does not exist is a not-found rather than a silent create. A RENAME of a missing slug is refused by the database in the same words, and that sentence is one of the permanent patterns, so it arrives inside the rename rejected: <msg> form that Rename failures tell you whether to retry covers.

Rename failures tell you whether to retry

A rename is three steps: reserve the new slug, copy the bytes, then promote atomically. Each failure names where it stopped and whether retrying is safe.

TextWhat happened, and what to do
rename rejected: <msg>A permanent refusal such as a collision or a validation failure. Do not retry with the same arguments.
rename reserve failed (no DB or R2 changes yet - safe to retry): <msg>Nothing was touched. Retry.
r2 copy failed (new_slug "<new>" remains reserved by this dashboard; retry to complete the rename, or pick a different new_slug): <err>The name is claimed by this dashboard. Retry to finish, or choose another target to abandon it.
db rename failed (reservation + R2 already in place; old URL still works - safe to retry): <msg>The old URL is still serving. Retry.
metadata update failed: <msg>The metadata-only path failed. Nothing renamed.

Retrying with the same arguments is safe by design: the reservation is idempotent, and a call that succeeded but whose response was lost is detected and returned as success on retry.

A rename invalidates a list cursor

This call bumps the row's updated_at, and list_dashboards paginates on that column. If you are walking pages and rename mid-walk, discard the cursor and restart from a fresh first page, or you will skip the row you just changed.

Scope

The renamed URL is <workspace>.dashies.ai/<new_slug> and the old one 301-redirects.

Check it worked

Load the old URL. It should 301 to the new one rather than 404. Then run list_dashboards and confirm the entry shows the new slug and the name you expected, since a rename without an explicit name rewrites the display name too.