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
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: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
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.