---
title: "Update a dashboard"
method: POST
path: "/api/dashboards/update"
tags: ["Dashboards"]
---

# Update a dashboard

`POST /api/dashboards/update`

## Request

- Base URL: `https://pluto-api.trainy.ai`
- URL: `https://pluto-api.trainy.ai/api/dashboards/update`
- Auth: HTTP bearer

Updates a dashboard's name, config, and/or default flag. Only the creator or an org admin/owner may modify a dashboard. A provided config REPLACES the stored one.

## Request body

- UpdateDashboardRequest
  - `viewId` string, required: Dashboard view ID
  - `name` string: New dashboard name
  - `config` object: Replacement dashboard config (full replace, not a merge)
  - `isDefault` boolean: Make this the project's default dashboard (admins/owners only)
  - `expectedUpdatedAt` string, date-time: Optimistic-concurrency guard. When set, the update is rejected with 409 if the dashboard changed after this timestamp.

## Response `200`

Dashboard updated successfully

- UpdateDashboardResponse
  - `id` string, required
  - `name` string, required
  - `projectName` string, required
  - `isDefault` boolean, required
  - `currentVersion` integer, required
  - `sectionCount` number, required
  - `widgetCount` number, required
  - `updatedAt` string, required
  - `url` string, required

## Other responses

- `400`: Invalid request body or dashboard config
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Dashboard not found
- `409`: Name conflict, or the dashboard changed since expectedUpdatedAt
- `422`: Stored config failed validation

---

[API](https://skmtc.dev/trainy/apis/mlop-api.md) - [All operations](https://skmtc.dev/trainy/apis/mlop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/trainy/apis/mlop-api/revisions/5d2c0b0baecb?raw)
