Create a dashboard
Create a new user-owned dashboard. Body: { name, scope?, widgets[] }. Every widget is validated against the metric registry: metricId must exist (422 with the offending id) and viz must be one of that metric’s allowedViz (422; an empty viz defaults to the metric’s defaultViz). span is clamped to the 2..20 grid and a widget without an id is assigned one. The board is owned by the acting user; a stock board can never be created via the API.
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.
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 created 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).