Dashboard service overview
The Dashboard service API manages Coralogix dashboards: it lets you create, retrieve, update, delete, and organize dashboards, pin them to favorites, and look up a catalog of every dashboard the caller can see. A dashboard is a JSON payload describing aLayout of Sections, each containing Rows of Widgets, parameterized by Variables and annotated with Annotations. The same payload is consumed by Create and Replace operations and returned by Get.
This overview describes:
- The 10 endpoints exposed by the Dashboards service (CRUD + pinning + slug lookup + folder assignment + catalog).
- The structure of the dashboard payload (
Dashboardmessage and its components). - The widget, variable, filter, annotation, and action types that compose a dashboard.
Authentication and permissions
To use the Dashboard service API you need to create a personal or team API key. It’s recommended to use permission presets, as they are automatically updated with all relevant permissions. Alternatively, you can manually add the following individual permissions.| Presets | Permission | Description |
|---|---|---|
| Dashboards | team-dashboards:Read | Grants access to read team-dashboards |
team-dashboards:Update | Required to create, update, or delete team-dashboards |
Common error response codes
| Status Code | Description |
|---|---|
400 Bad Request | Response code 400 |
401 Unauthorized | Response code 401 |
500 Internal Server Error | Response code 500 |
Endpoints
Dashboards (CRUD, pinning, slug, folder assignment)
| Method | Path | Summary |
|---|---|---|
POST | /dashboards/dashboards/v1 | Create a new dashboard |
PUT | /dashboards/dashboards/v1 | Replace a dashboard |
GET | /dashboards/dashboards/v1/{dashboard_id} | Get a dashboard |
DELETE | /dashboards/dashboards/v1/{dashboard_id} | Delete a dashboard |
GET | /dashboards/dashboards/v1/slugs/{slug} | Get a dashboard by URL slug |
PUT | /dashboards/dashboards/v1/{dashboard_id}/default | Replace the default dashboard |
POST | /dashboards/dashboards/v1/{dashboard_id}/folder | Assign a dashboard to a folder |
PUT | /dashboards/pinned/v1/{dashboard_id} | Add dashboard to favorites |
DELETE | /dashboards/pinned/v1/{dashboard_id} | Remove dashboard from favorites |
Dashboard catalog
| Method | Path | Summary |
|---|---|---|
GET | /dashboards/dashboards/v1/catalog | Get dashboard catalog |
Dashboard payload
TheDashboard message is the unit accepted by Create / Replace and returned by Get. Required fields: name and layout. All other fields are optional.
| Field | Type | Notes |
|---|---|---|
id | string | A unique identifier of the dashboard. |
name | string | Required. Display name. |
description | string | Optional summary of the dashboard’s purpose. |
slug_name | string | Optional alias used by GET /slugs/{slug}. |
layout | Layout | Required. Sections, rows, and widgets — see Layout. |
variables_v2 | [VariableV2] | Dashboard parameterization — see Variables (V2). The legacy variables field is deprecated. |
variables | [Variable] | Deprecated. Use variables_v2. See Variables (V1, deprecated). |
filters | [Filter] | Dashboard-wide filters — see Filters. |
annotations | [Annotation] | Dashboard-wide event annotations — see Annotations. |
actions | [DashboardAction] | Public actions available within the dashboard — see Actions. |
folder_id or folder_path | string / FolderPath | Mutually exclusive. Either reference an existing folder by id, or supply a FolderPath (list of segments) to place the dashboard. |
time_frame | oneof | absolute_time_frame ({from, to} timestamps) or relative_time_frame (a duration relative to “now”). See Time frame. |
auto_refresh | oneof | One of: off, one_minute, two_minutes, five_minutes, fifteen_minutes. See the Auto-refresh tutorial on the user-guide side. |
Layout
ALayout is an ordered list of Sections. Each Section contains an ordered list of Rows, and each Row contains an ordered list of Widgets. The hierarchy is fixed at three levels: Layout → Section → Row → Widget.
For the user-facing concept and UI walkthrough, see the Sections tutorial.
Section
| Field | Type | Notes |
|---|---|---|
id | UUID | Section’s unique identifier. |
rows | [Row] | Rows in the section. |
options | SectionOptions | A oneof over internal (system-managed) or custom. |
CustomSectionOptions carries: name, description, collapsed (boolean), color (a SectionPredefinedColor enum: cyan / green / blue / purple / magenta / pink / orange), and optionally a repetitive_var (a variable name that turns the section into a repeating block — one rendered copy per selected value of that variable).
Row
| Field | Type | Notes |
|---|---|---|
id | UUID | Row’s unique identifier. |
appearance.height | int32 | Height multiplier — 1 = one unit of base height, 2 = two units, and so on. |
widgets | [Widget] | Widgets to render side-by-side in this row. |
Widgets
AWidget carries either a definition (an inline widget configuration) or a reference (a WidgetReference pointing at a widget defined on another dashboard). The two are mutually exclusive — the backend rejects payloads that set both or neither.
| Field | Type | Notes |
|---|---|---|
id | UUID | Widget’s unique identifier. |
title | string | Display name. |
description | string | Optional caption. |
definition | Widget.Definition | A oneof over the 9 widget types listed below. |
reference | WidgetReference | Alternative to definition (see Cross-dashboard widget reuse). |
Cross-dashboard widget reuse
AWidgetReference re-renders a widget defined on a different dashboard:
| Field | Type | Notes |
|---|---|---|
dashboard_id | string | ID of the dashboard that owns the source widget. |
widget_id | UUID | ID of the widget within that dashboard. |
Widget catalog
Each widget’sdefinition is a oneof over the variants below. Every chart accepts a query over one of four data sources — Logs (Lucene), Spans (Lucene), Metrics (PromQL), or DataPrime — except Markdown, which carries no query. For the full field set per widget (color schemes, legend, axis bounds, units, etc.), see the corresponding schema in openapi_v5.yaml.
| Widget | Purpose |
|---|---|
LineChart | Time-series lines; supports multi-query overlays via query_definitions. |
BarChart | Vertical bars; single-query. |
HorizontalBarChart | Horizontal-orientation bars; mirrors BarChart with axis-handling differences. |
PieChart | Pie or donut chart; single-query. |
Gauge | Single-value gauge with min/max range and threshold bands. |
Hexagon | Single-value hex cell, typically used in a hex grid. |
DataTable | Tabular renderer with developer-defined columns; for the dynamic-table variant use Dynamic widget. |
Markdown | Static prose panel; no query. |
Dynamic widget | Query-driven widget that picks its renderer at runtime via interpretation + visualization — see Build a dynamic table widget. The legacy query field is deprecated; populate query_definitions only. |
Variables (V1, deprecated)
TheDashboard.variables field uses the V1 variable model (proto package variables). It is deprecated; new dashboards should populate variables_v2 instead (see Variables (V2)).
For user-facing variable concepts and UI walkthroughs, see Create and manage variables.
A V1 Variable has name, optional display_name / description, a display_type (VariableDisplayType enum), and a Definition. The Definition.value is a oneof over:
Constant— (deprecated within V1) a single fixed value.MultiSelect— a value selected from a list, sourced from one of: a logs path (LogsPathSource), a metric label (MetricLabelSource), a constant list (ConstantListSource), a span field (SpanFieldSource), or an arbitrary query (QuerySource). Supportsselection(single or multi-value), anOrderDirection, andVariableSelectionOptions.
MultiSelect.selected field within V1 is also marked deprecated — current dashboards encode the user’s selection through VariableSelectionOptions and the consuming UI.
Variables (V2)
Variables let a dashboard accept user-supplied or query-derived values that are substituted into widget queries at view time. The dashboard payload carries the V2 variable model (proto packagecom.coralogixapis.dashboards.v1.ast.variables_v2); the older V1 model (Variable / Variable.Definition / VariableDefinitionConstant / VariableDefinitionMultiSelect) is still present in the spec for backward compatibility — see Variables (V1, deprecated).
A VariableV2 carries: a unique id (UUID), name, optional display_name and description, a display_type (VariableDisplayTypeV2 enum — values in the collapsible below), a source that produces candidate values, a value selection, and a display_full_row toggle.
Source (VariableSourceV2)
A oneof over three variants:
QuerySource— values come from a Coralogix query against logs, spans, metrics, or DataPrime. Carries arefresh_strategy,value_display_options(label/value regex), and anall_option.StaticSource— values are an inline list (with anall_option).TextboxSource— value is free-form text entered in the dashboard UI.
QuerySource has four sub-variants matching its data source: LogsQuery, SpansQuery, MetricsQuery, DataprimeQuery (openapi schema names: VariableSourceV2QuerySourceLogsQuery, …SpansQuery, …MetricsQuery, …DataprimeQuery).
Value (VariableValueV2)
A oneof over six variants (proto names):
SingleStringValueSingleNumericValueMultiStringValue— wraps either anAllValue, aListValue, or aSelectedAllValueLuceneQueryValueRegexValueIntervalValue
VariableV2, VariableSourceV2.*, VariableValueV2.*, and VariableDisplayTypeV2 schemas in openapi_v5.yaml. For user-facing variable usage, see Create and manage variables.
Filters
AFilter constrains the data that widgets render. Each filter has:
| Field | Type | Notes |
|---|---|---|
id | UUID | Filter’s unique identifier. |
display_name | string | Optional UI label. |
enabled | boolean | Whether the filter currently applies. |
collapsed | boolean | UI hint — whether the filter chip renders collapsed or expanded. |
source | Filter.Source | A oneof over LogsFilter, SpansFilter, or MetricsFilter. |
scope | Filter.WidgetScope | Which widgets the filter targets. |
Filter.WidgetScope is a oneof over:
AllWidgets— the filter applies to every widget on the dashboard.SpecificWidgets— the filter applies only to the listedwidget_ids.
Source variant carries source-appropriate fields (e.g., LogsFilter carries field, operator, and observation_field). For the full per-source field list, see the Filter.LogsFilter, Filter.SpansFilter, and Filter.MetricsFilter schemas in openapi_v5.yaml.
Annotations
Annotations mark significant events on dashboard widgets — for example, deploys, incidents, or business milestones — so they appear as overlays on charts that match their scope. An annotation is sourced from a Coralogix query, manual input, or a recurring event, and can be scoped to all widgets on the dashboard or a specific set. For user-facing concept and creation walkthrough, see Create annotations. AnAnnotation message has:
id— unique identifiername— display namedescription— optional descriptionenabled— boolean togglesource— where the events come from (see below)scope— which widgets the annotation overlayscolor— anAnnotationColorenum value
Source (Annotation.Source)
A oneof over six source types:
MetricsSource— events from a PromQL query (promql_query). Carries aStrategy(currentlyStartTimeMetric— uses the first data point’s value as the annotation timestamp), amessage_template, label list,AnnotationOrientation, and anIntervalResolution.LogsSource— events from a Lucene logs query (lucene_query). The strategy is aoneofoverInstant(single timestamp field),Range(start + end timestamp fields), andDuration(start timestamp + duration field). Supportslabel_fieldsandDataModeType.SpansSource— same shape asLogsSourcebut over spans.DataprimeSource— events from a DataPrime query (query) with the same Instant/Range/Duration strategy variants.ManualSource— manually configured events with anInstant(singlevalue+Unit) orRange(start_value/end_value+Unit) strategy. Optionalcustom_unit,message_template, andAnnotationOrientation.EventRecurrenceSource— events from a recurring schedule. Currently onlyWeeklyRecurrence(with selectabledays_of_weekfrom aWeekdayenum) is supported, paired with anInstant(start hour) orDuration(start hour + length) strategy.
Scope — Annotation.WidgetScope (v5 only)
Annotation.WidgetScope is a oneof over:
AllWidgets— annotation overlays every widget on the dashboard.SpecificWidgets— annotation overlays only the listedwidget_ids.
v3, v4) do not scope annotations to specific widgets — that surface is v5-only. (A separate top-level WidgetScope family exists in v3 and v4 for Filter scoping; it’s unrelated to annotations.)
Events (AnnotationEvent)
When the dashboard renders an annotation, each emitted event is either:
Instant— a point in time withtimestamp,labels, andpayload.Range— a span withstart,end,labels, andpayload.
Related types
AnnotationColor(enum) — color the annotation renders with.AnnotationOrientation(enum) — vertical / horizontal placement for metrics-sourced annotations.
Widget-side: filtering an annotation’s series
AnnotationSeriesVisibility is not part of the Annotation message — it’s defined alongside the widget-level SeriesVisibility schema. It’s an entry inside a widget’s SeriesVisibility.annotation_series list, with annotation_id, a SeriesVisibilityMode (HIDE_ALL / SHOW_ONLY), and a series_names list. Use it on the widget side to control which series of an already-defined annotation render on that widget.
For the full message structure, see the Annotation and Annotation.Source.* schema families in openapi_v5.yaml.
Time frame
The dashboard’s time frame is aoneof:
absolute_time_frame— aTimeFramewithfromandtoprotobufTimestamps. Fixed start and end times.relative_time_frame— agoogle.protobuf.Durationinterpreted as an offset from “now.”
Actions
The dashboard payload carriesactions as a list of DashboardAction — publicly available actions a viewer can trigger from a dashboard or one of its widgets.
| Field | Type | Notes |
|---|---|---|
id | string | A unique identifier of the action. |
name | string | Display name. |
should_open_in_new_window | boolean | Whether the action opens in a new tab/window. |
widget_id | string (optional) | Scopes the action to a specific widget. Null = dashboard-wide. |
query_id | string (optional) | Scopes the action to a specific query within a widget. Null = widget-wide or dashboard-wide. |
definition | ActionDefinition | A oneof over CustomAction (a URL template with {{variable_name}} placeholders) or GoToDashboardTemplateAction (dashboard_id of the target dashboard). |
data_source | ActionDataSourceType (optional) | One of LOGS, SPANS, METRICS, DATAPRIME. |
Custom URL template supports variable substitution: any {{variable_name}} in the URL is replaced with the matching variable’s resolved value when the user clicks the action.
Note: A separate, olderActionmessage exists in the spec but is marked deprecated. The proto file describes it as “Unused dormant model that was part of plans of the product team, however it is now on hold. Recommended to not use this model or rely on it in any way.” Always useDashboardActionfor theDashboard.actionsfield.
Constants
This service references a number of enum types across query, display, variable, and identity schemas. For the full value list of each enum, see#/components/schemas/<EnumName> in openapi_v5.yaml. Notable enums:
- Query and data source:
ActionDataSourceType,DataModeType,LogSeverityLevel,PromQLQueryType,SpanRelationType,MetricField,MetricAggregationType,DimensionField,DimensionAggregationType,MetadataField,DatasetScope,MetricsQueryEditorMode,Aggregation,AggregationType,SortByType,OrderDirection. - Display and layout:
VariableDisplayType,RefreshStrategy,SelectionType,TooltipType,StackedLine,RowStyle,BarValueDisplay,LabelSource,ScaleType,LegendColumn,LegendPlacement,LegendBy,Unit,ThresholdBy,ThresholdType,SectionPredefinedColor. - Identity:
TokenOriginType.