Update a dashboard (full-document replace)
Replace a dashboard’s name, scope, and widgets. This is a FULL-DOCUMENT replace — ALWAYS send the COMPLETE widgets[] array, not a delta. There is no per-widget endpoint: adding, moving, resizing, or removing a widget all mean sending the whole new widget list here. The server stores the array verbatim after the same registry validation as createDashboard (unknown metricId / illegal viz → 422; span clamped 2..20). Stock boards are read-only → 409 (customizing one creates a copy). 404 if the dashboard is absent/cross-org.
Authorizations
Flowyte secret API key (Authorization: Bearer flowyte_sk_live_…). Scope-gated; is scoped to your organization — a key can never reach another tenant. The listed scopes in each operation's apiKey requirement are the scopes that key must hold. The tokenUrl is nominal: keys are minted in the dashboard.
Path Parameters
The dashboard id (from listDashboards / createDashboard).
Body
The create/update body. On update this is a FULL-DOCUMENT replace: ALWAYS send the COMPLETE widgets[] array (the server stores it verbatim after validation), never a delta. name is required; scope is optional (defaults to {}). Each widget's metricId must exist and viz must be in that metric's allowedViz (else 422).
Response
The updated dashboard.
A saved dashboard document. widgets is the complete ordered widget list (replaced whole on every write). scope holds dashboard-level default filters applied beneath each widget's own scope. isStock marks a product-shipped board that is read-only via the API (updateDashboard/deleteDashboard return 409).