---
title: "Update Dashboard"
method: PUT
path: "/api/v2/dashboards/{id}"
tags: ["Dashboards"]
---

# Update Dashboard

`PUT /api/v2/dashboards/{id}`

Updates an existing dashboard.

**Concurrency:** This endpoint does not support optimistic
concurrency control. Concurrent PUT requests for the same
dashboard may silently overwrite each other, which can leave
orphan tile-to-container references on layout-shape edits.
Clients should serialize edits to a given dashboard.

## Path parameters

- `id` string, required

## Request body

- UpdateDashboardRequest
  - `name` string, required — Dashboard name.
  - `tiles` TileInput[], required — Full list of tiles for the dashboard. Existing tiles are matched by ID; tiles with an ID that does not match an existing tile will be assigned a new generated ID.
    - `name` string, required — Display name for the tile
    - `x` integer, required — Horizontal position in the grid (0-based)
    - `y` integer, required — Vertical position in the grid (0-based)
    - `w` integer, required — Width in grid units
    - `h` integer, required — Height in grid units
    - `config` union — Tile chart configuration. displayType is the primary discriminant and determines which variant group applies. For displayTypes that support both builder and Raw SQL modes (line, stacked_bar, table, number, pie, bar), configType is the secondary discriminant: omit it for the builder variant or set it to "sql" for the Raw SQL variant. The heatmap, search, event_patterns, and markdown displayTypes only have a builder variant.
      - union — Line chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - LineBuilderChartConfig — Builder configuration for a line time-series chart.
          - `displayType` 'line', required — Display type discriminator. Must be "line" for line charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — One or more aggregated values to plot. When asRatio is true, exactly two select items are required.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `groupBy` string — Field expression to group results by (creates separate lines per group value).
          - `asRatio` boolean — Plot select[0] / select[1] as a ratio. Requires exactly two select items.
          - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
          - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
          - `fitYAxisToData` boolean — Set the y-axis lower bound to the minimum of the displayed data instead of zero, making small fluctuations between series easier to see.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `compareToPreviousPeriod` boolean — Overlay the equivalent previous time period for comparison.
          - `seriesLimit` integer — Maximum number of series rendered (top-N by value). Omit to use the default render cap, set 0 for unlimited, or a positive N to keep the top N series.
          - `formulas` Formula[] — Derived series computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
            - `expression` string, required — Arithmetic expression over the select items by position, e.g. "A / (A + B) * 100" for a success-rate percentage.
            - `alias` string — Display label for the formula series in chart legends and column headers. Falls back to the raw expression text when unset.
            - `numberFormat` NumberFormat
              - …
          - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula series are returned; the raw operand series are hidden.
        - LineRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'line', required — Display as a line time-series chart.
          - `compareToPreviousPeriod` boolean — Overlay the equivalent previous time period for comparison.
          - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
          - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
          - `fitYAxisToData` boolean — Set the y-axis lower bound to the minimum of the displayed data instead of zero, making small fluctuations between series easier to see.
      - union — Stacked-bar chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - BarBuilderChartConfig — Builder configuration for a stacked-bar time-series chart.
          - `displayType` 'stacked_bar', required — Display type discriminator. Must be "stacked_bar" for stacked-bar charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — One or more aggregated values to plot. When asRatio is true, exactly two select items are required.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `groupBy` string — Field expression to group results by (creates separate bars segments per group value).
          - `asRatio` boolean — Plot select[0] / select[1] as a ratio. Requires exactly two select items.
          - `alignDateRangeToGranularity` boolean — Align the date range boundaries to the query granularity interval.
          - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `seriesLimit` integer — Maximum number of series rendered (top-N by value). Omit to use the default render cap, set 0 for unlimited, or a positive N to keep the top N series.
          - `formulas` Formula[] — Derived series computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
            - `expression` string, required — Arithmetic expression over the select items by position, e.g. "A / (A + B) * 100" for a success-rate percentage.
            - `alias` string — Display label for the formula series in chart legends and column headers. Falls back to the raw expression text when unset.
            - `numberFormat` NumberFormat
              - …
          - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula series are returned; the raw operand series are hidden.
        - BarRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'stacked_bar', required — Display as a stacked-bar time-series chart.
          - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
          - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
      - union — Table chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - TableBuilderChartConfig — Builder configuration for a table aggregation chart.
          - `displayType` 'table', required — Display type discriminator. Must be "table" for table charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — One or more aggregated values to display as table columns. When asRatio is true, exactly two select items are required.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `groupBy` string — Field expression to group results by (one row per group value).
          - `having` string — Post-aggregation SQL HAVING condition.
          - `orderBy` string — SQL ORDER BY expression for sorting table rows.
          - `asRatio` boolean — Display select[0] / select[1] as a ratio. Requires exactly two select items.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `groupByColumnsOnLeft` boolean — When true, render Group By columns to the left of series columns in the table. Defaults to false (Group By columns on the right).
          - `onClick` union — Link-out configuration applied when a user clicks a row of a table tile. Only table tiles (builder or raw SQL) currently support onClick. When target.mode is "id", the referenced source (type=search) or dashboard (type=dashboard) must already exist for the team.
            - OnClickSearch — Link-out that navigates to the HyperDX search view.
              - …
            - OnClickDashboard — Link-out that navigates to a HyperDX dashboard.
              - …
            - OnClickExternal — Link-out that navigates to an arbitrary external URL (e.g. a Grafana or Langfuse dashboard). The rendered URL must be an absolute http(s) URL.
              - …
          - `formulas` Formula[] — Derived columns computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
            - `expression` string, required — Arithmetic expression over the select items by position, e.g. "A / (A + B) * 100" for a success-rate percentage.
            - `alias` string — Display label for the formula series in chart legends and column headers. Falls back to the raw expression text when unset.
            - `numberFormat` NumberFormat
              - …
          - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula columns are returned; the raw operand columns are hidden.
        - TableRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'table', required — Display as a table chart.
          - `onClick` union — Link-out configuration applied when a user clicks a row of a table tile. Only table tiles (builder or raw SQL) currently support onClick. When target.mode is "id", the referenced source (type=search) or dashboard (type=dashboard) must already exist for the team.
            - OnClickSearch — Link-out that navigates to the HyperDX search view.
              - …
            - OnClickDashboard — Link-out that navigates to a HyperDX dashboard.
              - …
            - OnClickExternal — Link-out that navigates to an arbitrary external URL (e.g. a Grafana or Langfuse dashboard). The rendered URL must be an absolute http(s) URL.
              - …
      - union — Single big-number chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - NumberBuilderChartConfig — Builder configuration for a single big-number chart.
          - `displayType` 'number', required — Display type discriminator. Must be "number" for single big-number charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — Exactly one aggregated value to display as a single number — unless "formulas" is set, in which case the select items are the formula's operands and the (single) formula value is displayed instead.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `formulas` Formula[] — A single derived value computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Number tiles display the formula value and always hide the operand series.
            - `expression` string, required — Arithmetic expression over the select items by position, e.g. "A / (A + B) * 100" for a success-rate percentage.
            - `alias` string — Display label for the formula series in chart legends and column headers. Falls back to the raw expression text when unset.
            - `numberFormat` NumberFormat
              - …
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `color` 'chart-blue' | 'chart-orange' | 'chart-red' | 'chart-cyan' | 'chart-green' | 'chart-pink' | 'chart-purple' | 'chart-light-blue' | 'chart-brown' | 'chart-gray' | 'chart-success' | 'chart-warning' | 'chart-error' — Palette token used to color a number tile. Tokens reflow across light and dark themes, so raw hex values are not accepted.
          - `colorRules` NumberTileColorCondition[] — Ordered conditional color rules evaluated against the displayed value (last match wins). Falls back to color, then the default text color when no rule matches.
            - union — A single conditional color rule for a number tile. Rules are evaluated in order and the last matching rule wins. When no rule matches, the static color applies, then the default text color. The number-tile editor surfaces numeric and equality operators only.
              - …
          - `backgroundChart` BackgroundChart — Optional background trend sparkline drawn behind a number tile's value, derived from a time-bucketed version of the tile's query. Builder number tiles only (raw SQL number tiles have no time dimension to bucket).
            - `type` 'line' | 'area', required — Sparkline shape.
            - `color` 'chart-blue' | 'chart-orange' | 'chart-red' | 'chart-cyan' | 'chart-green' | 'chart-pink' | 'chart-purple' | 'chart-light-blue' | 'chart-brown' | 'chart-gray' | 'chart-success' | 'chart-warning' | 'chart-error' — Palette token used to color a number tile. Tokens reflow across light and dark themes, so raw hex values are not accepted.
        - NumberRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'number', required — Display as a single big-number chart.
          - `color` 'chart-blue' | 'chart-orange' | 'chart-red' | 'chart-cyan' | 'chart-green' | 'chart-pink' | 'chart-purple' | 'chart-light-blue' | 'chart-brown' | 'chart-gray' | 'chart-success' | 'chart-warning' | 'chart-error' — Palette token used to color a number tile. Tokens reflow across light and dark themes, so raw hex values are not accepted.
      - union — Pie chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - PieBuilderChartConfig — Builder configuration for a pie chart tile. Each slice represents one group value.
          - `displayType` 'pie', required — Display type discriminator. Must be "pie" for pie charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — Exactly one aggregated value used to size each pie slice.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `groupBy` string — Field expression to group results by (one slice per group value).
          - `orderBy` string — Optional custom SQL ORDER BY expression (raw SQL). Overrides the default value-descending ordering and, when combined with "limit", controls which slices are kept.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `limit` integer — Maximum number of slices (SQL LIMIT). Without a custom "orderBy" the query keeps the groups with the largest aggregated values; with an "orderBy" it keeps the first slices in that order. Omit or set 0 to fetch all groups.
        - PieRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'pie', required — Display as a pie chart.
      - union — Categorical bar chart (one bar per group value; not a time series). Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
        - CategoricalBarBuilderChartConfig — Builder configuration for a categorical bar chart tile. Each bar represents one group value. Distinct from stacked_bar, which is a time-series chart.
          - `displayType` 'bar', required — Display type discriminator. Must be "bar" for categorical bar charts.
          - `sourceId` string, required — ID of the data source to query.
          - `select` SelectItem[], required — Exactly one aggregated value used to size each bar.
            - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
            - `valueExpression` string — Expression for the column or value to aggregate. Must be omitted when aggFn is "count"; required for all other aggFn values.
            - `alias` string — Display alias for this select item in chart legends.
            - `level` 0.5 | 0.9 | 0.95 | 0.99 — Percentile level; only valid when aggFn is "quantile".
            - `where` string — SQL or Lucene filter condition applied before aggregation.
            - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
            - `metricName` string — Name of the metric to aggregate; only applicable when the source is a metrics source.
            - `metricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
            - `periodAggFn` 'delta' — Optional period aggregation function for Gauge metrics (e.g., compute the delta over the period).
            - `numberFormat` NumberFormat
              - …
          - `groupBy` string — Field expression to group results by (one bar per group value).
          - `orderBy` string — Optional custom SQL ORDER BY expression (raw SQL). Overrides the default value-descending ordering and, when combined with "limit", controls which bars are kept.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `limit` integer — Maximum number of bars (SQL LIMIT). Without a custom "orderBy" the query keeps the groups with the largest aggregated values; with an "orderBy" it keeps the first bars in that order. Omit or set 0 to fetch all groups.
        - CategoricalBarRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
          - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
          - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
          - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
          - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `displayType` 'bar', required — Display as a categorical bar chart.
      - HeatmapChartConfig — Builder configuration for a heatmap tile. Heatmap is builder-only (no Raw SQL variant) and currently supports trace sources. The row-level filter lives at the chart-config level (where / whereLanguage), matching the HeatmapSeriesEditor in the UI.
        - `displayType` 'heatmap', required — Display type discriminator. Must be "heatmap" for heatmap tiles.
        - `sourceId` string, required — ID of the data source to query.
        - `select` HeatmapSelectItem[], required — Exactly one heatmap select item.
          - `valueExpression` string, required — SQL expression for the value being bucketed on the y-axis. Must be non-empty.
          - `countExpression` string — SQL expression for the count contributing to each bucket. Defaults to "count()" in the editor when omitted.
          - `heatmapScaleType` 'log' | 'linear' — Scale type used to bucket values on the y-axis.
        - `where` string — Row-level filter (syntax depends on whereLanguage).
        - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
        - `numberFormat` NumberFormat
          - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
          - `mantissa` integer — Number of decimal places.
          - `thousandSeparated` boolean — Whether to use thousand separators.
          - `average` boolean — Whether to show as average.
          - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
          - `factor` number — Multiplication factor.
          - `currencySymbol` string — Currency symbol for currency format.
          - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
          - `unit` string — Custom unit label.
      - SearchChartConfig — Configuration for a raw-event search / log viewer tile.
        - `displayType` 'search', required — Display type discriminator. Must be "search" for search/log viewer tiles.
        - `sourceId` string, required — ID of the data source to query.
        - `select` string, required — Comma-separated list of expressions to display.
        - `where` string — Filter condition for the search (syntax depends on whereLanguage).
        - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
      - EventPatternsChartConfig — Configuration for an event pattern mining tile. Clusters log or trace events by recurring message shapes.
        - `displayType` 'event_patterns', required — Display type discriminator. Must be "event_patterns" for pattern mining tiles.
        - `sourceId` string, required — ID of the data source to mine patterns from.
        - `select` string — Column or expression to mine patterns from. Leave empty to use the source default (Body for logs, SpanName for traces).
        - `where` string — Filter condition for the pattern mining query (syntax depends on whereLanguage).
        - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
      - MarkdownChartConfig — Configuration for a freeform Markdown text tile.
        - `displayType` 'markdown', required — Display type discriminator. Must be "markdown" for markdown text tiles.
        - `markdown` string — Markdown content to render inside the tile.
    - `containerId` string — References a DashboardContainer by id. Tiles without containerId render in the default ungrouped area.
    - `tabId` string — References a tab inside the tile's container by id. Requires containerId to be set, and the container to declare a matching tab.
    - `id` string — Optional tile ID. Omit to generate a new ID.
    - `asRatio` boolean — Display two series as a ratio (series[0] / series[1]). Only applicable when providing "series". Deprecated in favor of "config.asRatio".
    - `series` DashboardChartSeries[] — Data series to display in this tile (all must be the same type). Deprecated; use "config" instead.
      - union
        - TimeChartSeries
          - `type` 'time', required — Series type discriminator. Must be "time" for time-series charts.
          - `sourceId` string, required — ID of the data source to query
          - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
          - `level` number — Percentile level for quantile aggregations (e.g., 0.95 for p95)
          - `field` string — Column or expression to aggregate (required for most aggregation functions except count)
          - `alias` string — Display name for the series in the chart
          - `where` string, required — Filter query for the data (syntax depends on whereLanguage)
          - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
          - `groupBy` string[], required — Fields to group results by (creates separate series for each group)
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `metricDataType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
          - `metricName` string — Metric name for metrics data sources
          - `displayType` 'stacked_bar' | 'line' — Visual representation type for the time series.
        - TableChartSeries
          - `type` 'table', required — Series type discriminator. Must be "table" for table charts.
          - `sourceId` string, required — ID of the data source to query
          - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
          - `level` number — Percentile level for quantile aggregations (e.g., 0.95 for p95)
          - `field` string — Column or expression to aggregate (required for most aggregation functions except count)
          - `alias` string — Display name for the series
          - `where` string, required — Filter query for the data (syntax depends on whereLanguage)
          - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
          - `groupBy` string[], required — Fields to group results by (creates separate rows for each group)
          - `sortOrder` 'desc' | 'asc' — Sort order for table rows.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `metricDataType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
          - `metricName` string — Metric name for metrics data sources
        - NumberChartSeries
          - `type` 'number', required — Series type discriminator. Must be "number" for single-value number charts.
          - `sourceId` string, required — ID of the data source to query
          - `aggFn` 'avg' | 'count' | 'count_distinct' | 'last_value' | 'max' | 'min' | 'quantile' | 'sum' | 'any' | 'none', required — Aggregation function to apply to the field or metric value.
          - `level` number — Percentile level for quantile aggregations (e.g., 0.95 for p95)
          - `field` string — Column or expression to aggregate (required for most aggregation functions except count)
          - `alias` string — Display name for the series in the chart
          - `where` string, required — Filter query for the data (syntax depends on whereLanguage)
          - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
          - `metricDataType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric data type, only for metrics data sources.
          - `metricName` string — Metric name for metrics data sources.
        - SearchChartSeries
          - `type` 'search', required — Series type discriminator. Must be "search" for search/log viewer charts.
          - `sourceId` string, required — ID of the data source to query
          - `fields` string[], required — List of field names to display in the search results table
          - `where` string, required — Filter query for the data (syntax depends on whereLanguage)
          - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
        - MarkdownChartSeries
          - `type` 'markdown', required — Series type discriminator. Must be "markdown" for markdown text widgets.
          - `content` string, required — Markdown content to render inside the widget.
  - `tags` string[] — Tags for organizing and filtering dashboards.
  - `filters` Filter[] — Dropdown filters added to the dashboard. Each one broadcasts its selected value as a condition, acts as a variable which can be referenced in tile queries, or both.
    - `type` 'QUERY_EXPRESSION', required — Filter type. Must be "QUERY_EXPRESSION".
    - `name` string, required — Display name for the dashboard filter key
    - `expression` string, required — SQL expression used when querying values for this filter, and when applying this dashboard filter to tiles.
    - `sourceId` string, required — Source ID this dashboard filter key applies to
    - `sourceMetricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric type when source is metrics
    - `where` string — Optional WHERE condition to scope which rows this filter key reads values from
    - `whereLanguage` 'sql' | 'lucene' — Language of the where condition
    - `appliesToSourceIds` string[] — Optional list of source IDs this filter applies to. Omit or provide an empty array to apply the filter to ALL tiles regardless of source. A non-empty array restricts the filter to only tiles whose source ID is in the list; tiles using other sources are not affected by the selected filter value(s). Scopes the broadcast condition only, so a non-empty array is rejected when isBroadcastEnabled is false, and is omitted from responses for such a filter.
    - `isBroadcastEnabled` boolean — Whether the selected value is applied as a filter condition on every builder tile this filter applies to (see appliesToSourceIds), and every raw sql tile using the $__filters macro. Omitting the field means enabled.
    - `isVariableEnabled` boolean — Whether the selected value is exposed to tile queries as a dashboard variable named by variableName. Tiles may reference it as `$variableName` or using the (preferred) `$__filter($<variableName>)` and `$__conditionalAll(<condition>, $<variableName>)` macros.
    - `variableName` string — Token tiles reference this filter's selected value by, as `$variableName`. Must start with a letter and may contain only letters, numbers, and underscores. Defaults to the display name with whitespace replaced by underscores and remaining illegal characters removed, so a variable-enabled filter whose name derives nothing usable must send this field explicitly. Variable names must be unique across a dashboard's variable-enabled filters. Names the variable only, so the field is rejected when isVariableEnabled is not true, and is omitted from responses for such a filter.
    - `id` string, required — Unique dashboard filter key ID
  - `savedQuery` string, nullable — Optional default dashboard query to persist on the dashboard.
  - `savedQueryLanguage` 'sql' | 'lucene' — Query language for the where clause.
  - `savedFilterValues` SavedFilterValue[] — Optional default dashboard filter values to persist on the dashboard.
    - union — A single saved dashboard filter selection. Either a rendered SQL condition, or a selection addressed by the name of the dashboard variable it belongs to.
      - SqlSavedFilterValue
        - `type` 'sql' — Filter type.
        - `condition` string, required — SQL filter condition. For example use expressions in the form "column IN ('value')".
      - VariableSavedFilterValue
        - `type` 'variable', required — Filter type.
        - `name` string, required — The variableName of the dashboard variable this selection belongs to. Only allowed for variable-enabled filters.
        - `values` string[], required — Selected values
  - `containers` DashboardContainer[] — Optional grouping containers. Each tile may join a container via tile.containerId, and a tab inside it via tile.tabId.
    - `id` string, required — Unique identifier for the container within the dashboard.
    - `title` string, required — Display title for the container.
    - `collapsed` boolean, required — Persisted default collapse state. Per-viewer state lives in the URL.
    - `collapsible` boolean — Whether the user can collapse the group.
    - `bordered` boolean — Whether to show a visual border around the group.
    - `tabs` DashboardContainerTab[] — Optional tabs. 2+ entries renders a tab bar; 0-1 entries renders a plain group header. Tiles join a tab via tabId.
      - `id` string, required — Unique identifier for the tab within its container.
      - `title` string, required — Display title for the tab.

## Response `200`

Successfully updated dashboard

- DashboardResponseEnvelope
  - `data` DashboardResponse — Dashboard with tiles and configuration
    - `id` string — Dashboard ID
    - `name` string — Dashboard name
    - `tiles` TileOutput[] — List of tiles/charts in the dashboard
      - `name` string, required — Display name for the tile
      - `x` integer, required — Horizontal position in the grid (0-based)
      - `y` integer, required — Vertical position in the grid (0-based)
      - `w` integer, required — Width in grid units
      - `h` integer, required — Height in grid units
      - `config` union — Tile chart configuration. displayType is the primary discriminant and determines which variant group applies. For displayTypes that support both builder and Raw SQL modes (line, stacked_bar, table, number, pie, bar), configType is the secondary discriminant: omit it for the builder variant or set it to "sql" for the Raw SQL variant. The heatmap, search, event_patterns, and markdown displayTypes only have a builder variant.
        - union — Line chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - LineBuilderChartConfig — Builder configuration for a line time-series chart.
            - `displayType` 'line', required — Display type discriminator. Must be "line" for line charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — One or more aggregated values to plot. When asRatio is true, exactly two select items are required.
              - …
            - `groupBy` string — Field expression to group results by (creates separate lines per group value).
            - `asRatio` boolean — Plot select[0] / select[1] as a ratio. Requires exactly two select items.
            - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
            - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
            - `fitYAxisToData` boolean — Set the y-axis lower bound to the minimum of the displayed data instead of zero, making small fluctuations between series easier to see.
            - `numberFormat` NumberFormat
              - …
            - `compareToPreviousPeriod` boolean — Overlay the equivalent previous time period for comparison.
            - `seriesLimit` integer — Maximum number of series rendered (top-N by value). Omit to use the default render cap, set 0 for unlimited, or a positive N to keep the top N series.
            - `formulas` Formula[] — Derived series computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
              - …
            - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula series are returned; the raw operand series are hidden.
          - LineRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'line', required — Display as a line time-series chart.
            - `compareToPreviousPeriod` boolean — Overlay the equivalent previous time period for comparison.
            - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
            - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
            - `fitYAxisToData` boolean — Set the y-axis lower bound to the minimum of the displayed data instead of zero, making small fluctuations between series easier to see.
        - union — Stacked-bar chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - BarBuilderChartConfig — Builder configuration for a stacked-bar time-series chart.
            - `displayType` 'stacked_bar', required — Display type discriminator. Must be "stacked_bar" for stacked-bar charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — One or more aggregated values to plot. When asRatio is true, exactly two select items are required.
              - …
            - `groupBy` string — Field expression to group results by (creates separate bars segments per group value).
            - `asRatio` boolean — Plot select[0] / select[1] as a ratio. Requires exactly two select items.
            - `alignDateRangeToGranularity` boolean — Align the date range boundaries to the query granularity interval.
            - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
            - `numberFormat` NumberFormat
              - …
            - `seriesLimit` integer — Maximum number of series rendered (top-N by value). Omit to use the default render cap, set 0 for unlimited, or a positive N to keep the top N series.
            - `formulas` Formula[] — Derived series computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
              - …
            - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula series are returned; the raw operand series are hidden.
          - BarRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'stacked_bar', required — Display as a stacked-bar time-series chart.
            - `fillNulls` boolean — Fill missing time buckets with zero instead of leaving gaps.
            - `alignDateRangeToGranularity` boolean — Expand date range boundaries to the query granularity interval.
        - union — Table chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - TableBuilderChartConfig — Builder configuration for a table aggregation chart.
            - `displayType` 'table', required — Display type discriminator. Must be "table" for table charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — One or more aggregated values to display as table columns. When asRatio is true, exactly two select items are required.
              - …
            - `groupBy` string — Field expression to group results by (one row per group value).
            - `having` string — Post-aggregation SQL HAVING condition.
            - `orderBy` string — SQL ORDER BY expression for sorting table rows.
            - `asRatio` boolean — Display select[0] / select[1] as a ratio. Requires exactly two select items.
            - `numberFormat` NumberFormat
              - …
            - `groupByColumnsOnLeft` boolean — When true, render Group By columns to the left of series columns in the table. Defaults to false (Group By columns on the right).
            - `onClick` union — Link-out configuration applied when a user clicks a row of a table tile. Only table tiles (builder or raw SQL) currently support onClick. When target.mode is "id", the referenced source (type=search) or dashboard (type=dashboard) must already exist for the team.
              - …
            - `formulas` Formula[] — Derived columns computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Cannot be combined with asRatio.
              - …
            - `showOperandSeries` boolean — Only meaningful with formulas. When false, only the formula columns are returned; the raw operand columns are hidden.
          - TableRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'table', required — Display as a table chart.
            - `onClick` union — Link-out configuration applied when a user clicks a row of a table tile. Only table tiles (builder or raw SQL) currently support onClick. When target.mode is "id", the referenced source (type=search) or dashboard (type=dashboard) must already exist for the team.
              - …
        - union — Single big-number chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - NumberBuilderChartConfig — Builder configuration for a single big-number chart.
            - `displayType` 'number', required — Display type discriminator. Must be "number" for single big-number charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — Exactly one aggregated value to display as a single number — unless "formulas" is set, in which case the select items are the formula's operands and the (single) formula value is displayed instead.
              - …
            - `formulas` Formula[] — A single derived value computed from the select items via letter-ref arithmetic ("A" = select[0], "B" = select[1], ...). Metric, log, and trace sources only. Number tiles display the formula value and always hide the operand series.
              - …
            - `numberFormat` NumberFormat
              - …
            - `color` 'chart-blue' | 'chart-orange' | 'chart-red' | 'chart-cyan' | 'chart-green' | 'chart-pink' | 'chart-purple' | 'chart-light-blue' | 'chart-brown' | 'chart-gray' | 'chart-success' | 'chart-warning' | 'chart-error' — Palette token used to color a number tile. Tokens reflow across light and dark themes, so raw hex values are not accepted.
            - `colorRules` NumberTileColorCondition[] — Ordered conditional color rules evaluated against the displayed value (last match wins). Falls back to color, then the default text color when no rule matches.
              - …
            - `backgroundChart` BackgroundChart — Optional background trend sparkline drawn behind a number tile's value, derived from a time-bucketed version of the tile's query. Builder number tiles only (raw SQL number tiles have no time dimension to bucket).
              - …
          - NumberRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'number', required — Display as a single big-number chart.
            - `color` 'chart-blue' | 'chart-orange' | 'chart-red' | 'chart-cyan' | 'chart-green' | 'chart-pink' | 'chart-purple' | 'chart-light-blue' | 'chart-brown' | 'chart-gray' | 'chart-success' | 'chart-warning' | 'chart-error' — Palette token used to color a number tile. Tokens reflow across light and dark themes, so raw hex values are not accepted.
        - union — Pie chart. Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - PieBuilderChartConfig — Builder configuration for a pie chart tile. Each slice represents one group value.
            - `displayType` 'pie', required — Display type discriminator. Must be "pie" for pie charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — Exactly one aggregated value used to size each pie slice.
              - …
            - `groupBy` string — Field expression to group results by (one slice per group value).
            - `orderBy` string — Optional custom SQL ORDER BY expression (raw SQL). Overrides the default value-descending ordering and, when combined with "limit", controls which slices are kept.
            - `numberFormat` NumberFormat
              - …
            - `limit` integer — Maximum number of slices (SQL LIMIT). Without a custom "orderBy" the query keeps the groups with the largest aggregated values; with an "orderBy" it keeps the first slices in that order. Omit or set 0 to fetch all groups.
          - PieRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'pie', required — Display as a pie chart.
        - union — Categorical bar chart (one bar per group value; not a time series). Omit configType for the builder variant (requires sourceId and select). Set configType to "sql" for the Raw SQL variant (requires connectionId and sqlTemplate).
          - CategoricalBarBuilderChartConfig — Builder configuration for a categorical bar chart tile. Each bar represents one group value. Distinct from stacked_bar, which is a time-series chart.
            - `displayType` 'bar', required — Display type discriminator. Must be "bar" for categorical bar charts.
            - `sourceId` string, required — ID of the data source to query.
            - `select` SelectItem[], required — Exactly one aggregated value used to size each bar.
              - …
            - `groupBy` string — Field expression to group results by (one bar per group value).
            - `orderBy` string — Optional custom SQL ORDER BY expression (raw SQL). Overrides the default value-descending ordering and, when combined with "limit", controls which bars are kept.
            - `numberFormat` NumberFormat
              - …
            - `limit` integer — Maximum number of bars (SQL LIMIT). Without a custom "orderBy" the query keeps the groups with the largest aggregated values; with an "orderBy" it keeps the first bars in that order. Omit or set 0 to fetch all groups.
          - CategoricalBarRawSqlChartConfig — Shared fields for Raw SQL chart configs. Set configType to "sql" and provide connectionId + sqlTemplate instead of sourceId + select.
            - `configType` 'sql', required — Must be "sql" to use the Raw SQL chart config variant.
            - `connectionId` string, required — ID of the ClickHouse connection to execute the query against.
            - `sqlTemplate` string, required — SQL query template to execute. Supports HyperDX template variables.
            - `sourceId` string — Optional ID of the data source associated with this Raw SQL chart. Used for applying dashboard filters.
            - `numberFormat` NumberFormat
              - …
            - `displayType` 'bar', required — Display as a categorical bar chart.
        - HeatmapChartConfig — Builder configuration for a heatmap tile. Heatmap is builder-only (no Raw SQL variant) and currently supports trace sources. The row-level filter lives at the chart-config level (where / whereLanguage), matching the HeatmapSeriesEditor in the UI.
          - `displayType` 'heatmap', required — Display type discriminator. Must be "heatmap" for heatmap tiles.
          - `sourceId` string, required — ID of the data source to query.
          - `select` HeatmapSelectItem[], required — Exactly one heatmap select item.
            - `valueExpression` string, required — SQL expression for the value being bucketed on the y-axis. Must be non-empty.
            - `countExpression` string — SQL expression for the count contributing to each bucket. Defaults to "count()" in the editor when omitted.
            - `heatmapScaleType` 'log' | 'linear' — Scale type used to bucket values on the y-axis.
          - `where` string — Row-level filter (syntax depends on whereLanguage).
          - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
          - `numberFormat` NumberFormat
            - `output` 'currency' | 'percent' | 'byte' | 'time' | 'number' | 'data_rate' | 'throughput' | 'duration' — Output format type (currency, percent, byte, time, number, data_rate, throughput, duration).
            - `mantissa` integer — Number of decimal places.
            - `thousandSeparated` boolean — Whether to use thousand separators.
            - `average` boolean — Whether to show as average.
            - `decimalBytes` boolean — Use decimal bytes (1000) vs binary bytes (1024).
            - `factor` number — Multiplication factor.
            - `currencySymbol` string — Currency symbol for currency format.
            - `numericUnit` 'bytes_iec' | 'bytes_si' | 'bits_iec' | 'bits_si' | 'kibibytes' | 'kilobytes' | 'mebibytes' | 'megabytes' | 'gibibytes' | 'gigabytes' | 'tebibytes' | 'terabytes' | 'pebibytes' | 'petabytes' | 'packets_sec' | 'bytes_sec_iec' | 'bytes_sec_si' | 'bits_sec_iec' | 'bits_sec_si' | 'kibibytes_sec' | 'kibibits_sec' | 'kilobytes_sec' | 'kilobits_sec' | 'mebibytes_sec' | 'mebibits_sec' | 'megabytes_sec' | 'megabits_sec' | 'gibibytes_sec' | 'gibibits_sec' | 'gigabytes_sec' | 'gigabits_sec' | 'tebibytes_sec' | 'tebibits_sec' | 'terabytes_sec' | 'terabits_sec' | 'pebibytes_sec' | 'pebibits_sec' | 'petabytes_sec' | 'petabits_sec' | 'cps' | 'ops' | 'rps' | 'reads_sec' | 'wps' | 'iops' | 'cpm' | 'opm' | 'rpm_reads' | 'wpm' — Numeric unit for data, data rate, or throughput formats.
            - `unit` string — Custom unit label.
        - SearchChartConfig — Configuration for a raw-event search / log viewer tile.
          - `displayType` 'search', required — Display type discriminator. Must be "search" for search/log viewer tiles.
          - `sourceId` string, required — ID of the data source to query.
          - `select` string, required — Comma-separated list of expressions to display.
          - `where` string — Filter condition for the search (syntax depends on whereLanguage).
          - `whereLanguage` 'sql' | 'lucene', required — Query language for the where clause.
        - EventPatternsChartConfig — Configuration for an event pattern mining tile. Clusters log or trace events by recurring message shapes.
          - `displayType` 'event_patterns', required — Display type discriminator. Must be "event_patterns" for pattern mining tiles.
          - `sourceId` string, required — ID of the data source to mine patterns from.
          - `select` string — Column or expression to mine patterns from. Leave empty to use the source default (Body for logs, SpanName for traces).
          - `where` string — Filter condition for the pattern mining query (syntax depends on whereLanguage).
          - `whereLanguage` 'sql' | 'lucene' — Query language for the where clause.
        - MarkdownChartConfig — Configuration for a freeform Markdown text tile.
          - `displayType` 'markdown', required — Display type discriminator. Must be "markdown" for markdown text tiles.
          - `markdown` string — Markdown content to render inside the tile.
      - `containerId` string — References a DashboardContainer by id. Tiles without containerId render in the default ungrouped area.
      - `tabId` string — References a tab inside the tile's container by id. Requires containerId to be set, and the container to declare a matching tab.
      - `id` string, required — Unique tile ID assigned by the server.
    - `tags` string[] — Tags for organizing and filtering dashboards
    - `filters` Filter[] — Dropdown filters added to the dashboard. Each one broadcasts its selected value as a condition, acts as a variable which can be referenced in tile queries, or both.
      - `type` 'QUERY_EXPRESSION', required — Filter type. Must be "QUERY_EXPRESSION".
      - `name` string, required — Display name for the dashboard filter key
      - `expression` string, required — SQL expression used when querying values for this filter, and when applying this dashboard filter to tiles.
      - `sourceId` string, required — Source ID this dashboard filter key applies to
      - `sourceMetricType` 'sum' | 'gauge' | 'histogram' | 'summary' | 'exponential histogram' — Metric type when source is metrics
      - `where` string — Optional WHERE condition to scope which rows this filter key reads values from
      - `whereLanguage` 'sql' | 'lucene' — Language of the where condition
      - `appliesToSourceIds` string[] — Optional list of source IDs this filter applies to. Omit or provide an empty array to apply the filter to ALL tiles regardless of source. A non-empty array restricts the filter to only tiles whose source ID is in the list; tiles using other sources are not affected by the selected filter value(s). Scopes the broadcast condition only, so a non-empty array is rejected when isBroadcastEnabled is false, and is omitted from responses for such a filter.
      - `isBroadcastEnabled` boolean — Whether the selected value is applied as a filter condition on every builder tile this filter applies to (see appliesToSourceIds), and every raw sql tile using the $__filters macro. Omitting the field means enabled.
      - `isVariableEnabled` boolean — Whether the selected value is exposed to tile queries as a dashboard variable named by variableName. Tiles may reference it as `$variableName` or using the (preferred) `$__filter($<variableName>)` and `$__conditionalAll(<condition>, $<variableName>)` macros.
      - `variableName` string — Token tiles reference this filter's selected value by, as `$variableName`. Must start with a letter and may contain only letters, numbers, and underscores. Defaults to the display name with whitespace replaced by underscores and remaining illegal characters removed, so a variable-enabled filter whose name derives nothing usable must send this field explicitly. Variable names must be unique across a dashboard's variable-enabled filters. Names the variable only, so the field is rejected when isVariableEnabled is not true, and is omitted from responses for such a filter.
      - `id` string, required — Unique dashboard filter key ID
    - `savedQuery` string, nullable — Optional default dashboard query restored when loading the dashboard.
    - `savedQueryLanguage` 'sql' | 'lucene' — Query language for the where clause.
    - `savedFilterValues` SavedFilterValue[] — Optional default dashboard filter values restored when loading the dashboard.
      - union — A single saved dashboard filter selection. Either a rendered SQL condition, or a selection addressed by the name of the dashboard variable it belongs to.
        - SqlSavedFilterValue
          - `type` 'sql' — Filter type.
          - `condition` string, required — SQL filter condition. For example use expressions in the form "column IN ('value')".
        - VariableSavedFilterValue
          - `type` 'variable', required — Filter type.
          - `name` string, required — The variableName of the dashboard variable this selection belongs to. Only allowed for variable-enabled filters.
          - `values` string[], required — Selected values
    - `containers` DashboardContainer[] — Optional grouping containers. Each tile may join a container via tile.containerId, and a tab inside it via tile.tabId.
      - `id` string, required — Unique identifier for the container within the dashboard.
      - `title` string, required — Display title for the container.
      - `collapsed` boolean, required — Persisted default collapse state. Per-viewer state lives in the URL.
      - `collapsible` boolean — Whether the user can collapse the group.
      - `bordered` boolean — Whether to show a visual border around the group.
      - `tabs` DashboardContainerTab[] — Optional tabs. 2+ entries renders a tab bar; 0-1 entries renders a plain group header. Tiles join a tab via tabId.
        - `id` string, required — Unique identifier for the tab within its container.
        - `title` string, required — Display title for the tab.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `404` — Dashboard not found
- `500` — Server error or validation failure

## Changes

- **2026-08-26** `3399efdca551` — 4 breaking, 3 warning, 1 info
  - the `savedFilterValues/items/` request property type/format changed from `object`/`` to ``/``
  - added `#/components/schemas/SqlSavedFilterValue, #/components/schemas/VariableSavedFilterValue` to the `data/allOf[#/components/schemas/Dashboard]/savedFilterValues/items/` response property `oneOf` list for the response status `200`
  - the `data/allOf[#/components/schemas/Dashboard]/savedFilterValues/items/` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - removed the required property `data/allOf[#/components/schemas/Dashboard]/savedFilterValues/items/condition` from the response with the `200` status
  - …4 more
- …earlier changes not shown

[Full history](https://skmtc.dev/hyperdxio/apis/hyperdx-external-api/changes/api/v2/dashboards/:id/put.md)

---

[API](https://skmtc.dev/hyperdxio/apis/hyperdx-external-api.md) · [All operations](https://skmtc.dev/hyperdxio/apis/hyperdx-external-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hyperdxio/hyperdx-external-api/revisions/3399efdca551/schema)
