Skip to content

Widget reference

FieldTypeDefaultDescription
namestringrequiredDisplay name.
descriptionstring | nullnullSubtitle.
global_time_rangeobject{type: "relative", value: "1h"}Default time window for all widgets.
auto_refresh_secondsint | nullnullPolling cadence. Set to skip.
widgetsDashboardWidget[]embedded on detailWidgets in this dashboard.
created_byuuidrequiredUser who created.
{ "type": "relative", "value": "1h" }
{ "type": "relative", "value": "24h" }
{ "type": "relative", "value": "7d" }
{ "type": "absolute", "from": "2026-05-03T14:00:00Z", "to": "2026-05-03T15:00:00Z" }
FieldTypeDefaultDescription
titlestringrequiredDisplay title at the top of the widget.
widget_typeenumrequiredSee widget types table.
data_sourceenumnoneSee data sources table.
query_configobject{}Source-specific query (see below).
visualization_configobject{}Display options (units, colors, limits).
layoutobject{x: 0, y: 0, w: 6, h: 4}Position on the 12-col grid.
time_range_overrideobject | nullnullIf set, overrides dashboard’s global range.
widget_typeDescription
timeseriesLine/area chart over time.
statSingle big number.
tableTabular results (group-by, top-N).
log_streamLive log feed.
monitor_statusGrid showing current status of selected monitors.
textMarkdown content. No data_source needed.
data_sourceUse
metricsMetric queries.
logsLog queries.
tracesTrace queries.
uptimeMonitor status + uptime %.
rumRUM session and vitals data.
noneFor text widgets.
{
"metric_name": "http.request.duration_ms",
"aggregation": "p99", // avg | max | min | sum | p50 | p95 | p99 | rate
"group_by": "endpoint", // optional tag key
"filters": { "env": "prod" }, // optional tag filters
"resolution": "1m" // optional bucket width
}
{
"metric_name": "http.requests.total",
"aggregation": "sum",
"filters": { "status_class": "5xx" }
}

Renders as a big number — sum of 5xx counts in the time window.

{
"level": "error,warn",
"source": "billing-api",
"search": "stripe",
"limit": 50
}

Shape matches LogQueryParams.

{
"monitor_ids": ["<job-id-1>", "<job-id-2>"]
}

Renders a grid of status badges.

{
"metric_name": "http.requests.total",
"group_by": "endpoint",
"aggregations": ["sum", "avg"]
}

Returns a table grouped by endpoint with sum and avg.

{}

Visualization config holds the markdown:

{ "markdown": "## Service health\n\n[Runbook](https://...)" }

Free-form per widget type. Common keys:

KeyUsed byDescription
y_unittimeseries, statms, bytes, percent, count.
colortimeseriesSeries color override.
limitlog_stream, tableMax rows.
markdowntextBody markdown.
MethodPathPurpose
GET/dashboardList all.
POST/dashboardCreate.
GET/dashboard/{id}Detail with widgets.
PUT/dashboard/{id}Update meta (name, description, global range).
DELETE/dashboard/{id}Delete.
PUT/dashboard/{id}/layoutBatch update widget positions.
POST/dashboard/{id}/widgetAdd widget.
PUT/dashboard/{id}/widget/{widget_id}Update widget.
DELETE/dashboard/{id}/widget/{widget_id}Delete widget.