Skip to main content
Create a dashboard — the page a set of reports is shown on — with its reports already added and arranged, or empty. It comes back with its id and a link to it; reuse that id rather than looking the dashboard up again, which can miss a creation this recent. Pass reports to add reports as the dashboard is created, so a board is one call rather than two; a report’s visualization_types adds only its chart or only its pivot table — list_reports names what each report can render in its available_visualizations. Pass layout_rows to place them: name each tile by its report_id, the tiles having no visualization_id until this call creates them. Omit both for an empty dashboard, then use update_dashboard later. Read the outcome on every tile_changes row before reporting success. The dashboard is created either way: a report that could not be added leaves the page emptier than asked, not the call failed. Removing a tile is still a job for the Qobra web app. layout is the page as it was created, read back from the dashboard: where each new tile landed. Available only where the Qobra write tools beta is enabled. Every write to the live environment is recorded in the audit trail as the Qobra MCP agent; writes to a sandbox are not audited.

Parameters

Body

string
required
Display name of the dashboard, as people will read it in Qobra — ‘Q3 board review’, ‘EMEA performance’.
string
Optional free-text note about what the dashboard is for.
object[]
Reports to add to the new dashboard, each as every tile it can render unless its visualization_types narrows it. Omit to create the dashboard empty.
string[][]
The dashboard’s rows, top to bottom; each row lists one or more tiles left to right. An entry is a visualization_id from get_dashboard, or a report_id — the report form is how you arrange tiles this same call is adding, since they have no visualization_id until they exist, and it places every tile of that report. A row holds at most three charts or two pivot tables and is split when it overflows; a tile you leave out keeps its place, appended on a row of its own. Omit to leave the arrangement alone; pass an empty list to reset it, every tile on a row of its own.
string
Id of the sandbox to create the dashboard in — the id list_sandboxes returns. Omit it to create the dashboard in the live environment. Only a sandbox id is accepted here — never a sandbox name, and never the live environment’s own id.

Example

Create a dashboard with the charts of two reports, side by side on one row, and the pivot table of a third report on a row below:
A report_id entry in layout_rows places every tile that report adds. A row holds at most three charts or two pivot tables, and Qobra splits a row that overflows. Read layout in the response to see where each tile landed.

Response

Body

object
The dashboard as it now exists — the same row list_dashboards returns, so the id can be reused straight away.
object[]
What became of each report you passed, one row per tile: a report added as both a chart and a pivot table gets a row for each, and one that adds nothing gets a single row, with visualization_type null. Read outcome on each before reporting success, since a call can succeed having added nothing you asked for. Empty when no reports were passed.
object[]
The dashboard’s rows as they now stand, top to bottom, each tile left to right — read back from the dashboard, so it shows where every tile actually sits. A tile this call added lands on a row of its own at the end. Empty when the dashboard has no tile yet. Rows passed in layout_rows are applied after the reports are added and come back as the store took them: a row holds at most three charts or two pivot tables and is split when it overflows, and a tile you left out keeps its place on a row of its own.
object[]
One row per layout entry you passed, saying what became of it. Empty when no layout_rows were passed.