---
title: Update Dashboard Widget
description: Edit one widget using a full supported definition or sparse metadata/layout/query patch and the dashboard revision. Query and arrays replace their complete p…
product: general
lang: en
token_estimate: 16042
---
# Update Dashboard Widget

> For AI agents: a documentation index is available at [/llms.txt](/llms.txt). Append `.md` to any page URL for markdown, or send `Accept: text/markdown`.

## Update Dashboard Widget

**PATCH** `/console/v1/dashboards/{id}/widgets/{widgetId}`

Full URL: `https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}`

Update Dashboard Widget

Edit one widget using a full supported definition or sparse metadata/layout/query patch and the dashboard revision. Query and arrays replace their complete previous values. Omitted fields remain unchanged. Unsupported widgets allow layout-only edits. Read again after a revision conflict.

## Authorizations

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| STATSIG-API-KEY | string | Yes | — | apiKey (header) |

## Path parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| id (path) | string | Yes | — | dashboard id |
| widgetId (path) | string | Yes | — | widget id |

## Body (application/json)

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| revision | string | Yes | — | Include the `revision` returned by an editable or references read. Read the dashboard again after a revision conflict. |
| widget | oneOf | Yes | — | Constraints: oneOf (oneOf (object, object, object, object, object), object), object |
| widget.width | integer | No | — | Constraints: min: 0, max: 12 |
| widget.height | integer | No | — | Constraints: min: 0 |
| widget.id | string | No | — | — |
| widget.description | string | No | — | — |
| widget.color | string | No | — | Constraints: nullable |
| widget.layout | object | No | — | — |
| widget.layout.row | integer | Yes | — | Constraints: min: 0 |
| widget.layout.column | integer | Yes | — | Constraints: min: 0, max: 11 |
| widget.date_range | object | No | — | Constraints: nullable |
| widget.date_range.start_ds | string | No | — | Constraints: nullable |
| widget.date_range.end_ds | string | No | — | Constraints: nullable |
| widget.date_range.start_offset_days | number | No | — | Constraints: nullable |
| widget.date_range.end_offset_days | number | No | — | Constraints: nullable |
| widget.type | string | No | — | Allowed values: text, header, timeseries, drilldown, funnel, unsupported |
| widget.title | string | No | — | — |
| widget.content | string | No | — | — |
| widget.query | oneOf | No | — | Replace the complete query. Arrays replace existing arrays rather than merging by position. Constraints: object, object, object |
| widget.query.source | object | No | — | — |
| widget.query.source.type | string | Yes | — | Allowed values: event |
| widget.query.source.event_name | string | Yes | — | — |
| widget.query.source.filters | object[] | No | — | — |
| widget.query.source.filters.property | object | Yes | — | — |
| widget.query.source.filters.property.key | string | Yes | — | — |
| widget.query.source.filters.property.column | unknown | Yes | — | — |
| widget.query.source.filters.operator | unknown | Yes | — | — |
| widget.query.source.filters.values | string[] | No | [] | — |
| widget.query.sources | object[] | No | — | — |
| widget.query.sources.type | string | Yes | — | Allowed values: event |
| widget.query.sources.event_name | string | Yes | — | — |
| widget.query.sources.filters | object[] | No | — | — |
| widget.query.sources.filters.property | object | Yes | — | — |
| widget.query.sources.filters.property.key | string | Yes | — | — |
| widget.query.sources.filters.property.column | unknown | Yes | — | — |
| widget.query.sources.filters.operator | unknown | Yes | — | — |
| widget.query.sources.filters.values | string[] | No | [] | — |
| widget.query.aggregation | object or string | No | — | Allowed values: daily, overall |
| widget.query.aggregation.type | unknown | Yes | — | — |
| widget.query.aggregation.property | object | No | — | — |
| widget.query.aggregation.property.key | string | Yes | — | — |
| widget.query.aggregation.property.column | unknown | Yes | — | — |
| widget.query.unit_type | string | No | — | — |
| widget.query.group_bys | object[] | No | — | — |
| widget.query.group_bys.key | string | Yes | — | — |
| widget.query.group_bys.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.group_bys.metric_source_column | string | No | — | — |
| widget.query.group_bys.source | object | No | — | Constraints: nullable |
| widget.query.group_bys.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.group_bys.source.experiment_name | string | Yes | — | — |
| widget.query.group_bys.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.group_bys.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.viz | object | No | — | — |
| widget.query.viz.chart_type | string | Yes | — | Allowed values: line, timeseries-bar, horizontal-bar, grouped-bar, pie, geo-map, samples, stacked-line, single-value, conversion-rate, conversions, table |
| widget.query.viz.date | oneOf | No | — | Constraints: object, object |
| widget.query.viz.date.type | string | Yes | — | Allowed values: relative, fixed |
| widget.query.viz.date.window_size | number | No | — | — |
| widget.query.viz.date.offset_days | number | No | — | — |
| widget.query.viz.date.label | string | Yes | — | — |
| widget.query.viz.date.start_ms | number | No | — | — |
| widget.query.viz.date.end_ms | number | No | — | — |
| widget.query.viz.date.excluded_dates_ms | number[] | No | — | — |
| widget.query.viz.date.is_relative_to_now | boolean | No | — | When `true`, the Console uses a recognized relative `label` to refresh the saved date bounds when it loads the chart. |
| widget.query.viz.time_range | object | No | — | — |
| widget.query.viz.time_range.start_ms | number | Yes | — | — |
| widget.query.viz.time_range.end_ms | number | Yes | — | — |
| widget.query.viz.time_range.label | string | Yes | — | — |
| widget.query.viz.time_range.is_relative_to_now | boolean | No | — | — |
| widget.query.viz.granularity | string | No | — | Allowed values: month, week, day, hour, 5m, 30m, 1m, auto |
| widget.query.viz.time_comparison | number | No | — | — |
| widget.query.viz.time_comparison_hours | number | No | — | — |
| widget.query.viz.rollup_type | string | No | — | Allowed values: none, avg, sum, cumulative_sum |
| widget.query.viz.rollup_days | number | No | — | — |
| widget.query.viz.y_axis_type | string | No | — | Allowed values: numbers, monetary, percentage, time, time_ns, time_us, time_ms, decimal_bytes, binary_bytes, bits, time_s, percentage_ratio |
| widget.query.viz.cum_sum_rollup | string | No | — | Allowed values: unique, all |
| widget.query.viz.single_value_type | string | No | — | Allowed values: latest, overall |
| widget.query.viz.usage_interval_number_of_days | number | No | — | — |
| widget.query.viz.show_delta_comparison_view | boolean | No | — | — |
| widget.query.viz.is_time_comparison_last_period | boolean | No | — | — |
| widget.query.viz.show_grouped_percentage_breakdown | boolean | No | — | — |
| widget.query.viz.chart_view | string | No | — | Allowed values: chart, legend, chart_legend |
| widget.query.viz.show_percent_difference_compare_option | boolean | No | — | — |
| widget.query.viz.use_widget_granularity_in_dashboard | boolean | No | — | — |
| widget.query.filters | object[] | No | — | — |
| widget.query.filters.property | object | Yes | — | — |
| widget.query.filters.property.key | string | Yes | — | — |
| widget.query.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.filters.property.metric_source_column | string | No | — | — |
| widget.query.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.filters.values | string[] | No | [] | — |
| widget.query.filters.label | string | No | — | — |
| widget.query.cohorts | oneOf[] | No | — | — |
| widget.query.cohorts.id | string | No | — | Constraints: min length: 1 |
| widget.query.cohorts.name | string | No | — | — |
| widget.query.cohorts.unit_type | string | No | — | — |
| widget.query.cohorts.events | object[] | No | — | — |
| widget.query.cohorts.events.event | object | Yes | — | — |
| widget.query.cohorts.events.event.event_name | string | Yes | — | — |
| widget.query.cohorts.events.event.filters | object[] | Yes | — | — |
| widget.query.cohorts.events.event.filters.property | object | Yes | — | — |
| widget.query.cohorts.events.event.filters.property.key | string | Yes | — | — |
| widget.query.cohorts.events.event.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.cohorts.events.event.filters.property.metric_source_column | string | No | — | — |
| widget.query.cohorts.events.event.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.cohorts.events.event.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.cohorts.events.event.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.cohorts.events.event.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.cohorts.events.event.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.cohorts.events.event.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.cohorts.events.event.filters.values | string[] | No | [] | — |
| widget.query.cohorts.events.event.filters.label | string | No | — | — |
| widget.query.cohorts.events.event.alias | string | No | — | — |
| widget.query.cohorts.events.event.is_first_time | boolean | No | — | — |
| widget.query.cohorts.events.event.metric_type | string | No | — | — |
| widget.query.cohorts.events.event.metric_source_id | string | No | — | — |
| widget.query.cohorts.events.event.event_name_column | string | No | — | Constraints: nullable |
| widget.query.cohorts.events.event.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.cohorts.events.operator | string | Yes | — | Allowed values: >, <, >=, <=, = |
| widget.query.cohorts.events.threshold | number | Yes | — | — |
| widget.query.cohorts.events.date_range | oneOf | Yes | — | Constraints: object, object |
| widget.query.cohorts.events.date_range.type | string | Yes | — | Allowed values: relative, fixed |
| widget.query.cohorts.events.date_range.window_size | number | No | — | — |
| widget.query.cohorts.events.date_range.offset_days | number | No | — | — |
| widget.query.cohorts.events.date_range.label | string | Yes | — | — |
| widget.query.cohorts.events.date_range.start_ms | number | No | — | — |
| widget.query.cohorts.events.date_range.end_ms | number | No | — | — |
| widget.query.cohorts.events.date_range.excluded_dates_ms | number[] | No | — | — |
| widget.query.cohorts.events.date_range.is_relative_to_now | boolean | No | — | When `true`, the Console uses a recognized relative `label` to refresh the saved date bounds when it loads the chart. |
| widget.query.cohorts.any_event | boolean | No | — | — |
| widget.query.cohorts.is_verified | boolean | No | — | — |
| widget.query.options | object | No | — | — |
| widget.query.options.exposure_query_mode | string | No | — | Allowed values: all, daily_first, first, fresh |
| widget.query.options.group_by_limit | integer | No | — | Constraints: min: 0 |
| widget.query.options.group_by_query_limit | integer | No | — | Constraints: min: 0 |
| widget.query.options.separate_chart_per_metric | boolean | No | — | — |
| widget.query.options.force_start_y_at_zero | boolean | No | — | — |
| widget.query.options.include_annotations | boolean | No | — | — |
| widget.query.options.show_all_annotations | boolean | No | — | — |
| widget.query.options.annotation_filters | object | No | — | — |
| widget.query.options.annotation_filters.filter_entity_type | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_tag | object | No | — | — |
| widget.query.options.annotation_filters.filter_tag.ids | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_tag.operator | string | No | — | — |
| widget.query.options.annotation_filters.filter_target_app | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_environment | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_team | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_creator | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_gate_name | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_dynamic_config_name | string[] | No | — | — |
| widget.query.options.annotation_filters.filter_experiment_name | string[] | No | — | — |
| widget.query.options.sorting | object | No | — | — |
| widget.query.options.sorting.metric_metadata | object | No | — | — |
| widget.query.options.sorting.metric_metadata.name | string | Yes | — | — |
| widget.query.options.sorting.metric_metadata.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.options.sorting.metric_metadata.property | object | No | — | — |
| widget.query.options.sorting.metric_metadata.property.key | string | Yes | — | — |
| widget.query.options.sorting.metric_metadata.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.options.sorting.metric_metadata.property.metric_source_column | string | No | — | — |
| widget.query.options.sorting.metric_metadata.property.source | object | No | — | Constraints: nullable |
| widget.query.options.sorting.metric_metadata.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.options.sorting.metric_metadata.property.source.experiment_name | string | Yes | — | — |
| widget.query.options.sorting.metric_metadata.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.options.sorting.metric_metadata.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.options.sorting.metric_symbol | string | No | — | — |
| widget.query.options.sorting.sort_ascending | boolean | No | — | — |
| widget.query.options.sampling_enabled | boolean | No | — | — |
| widget.query.options.include_test_events | boolean | No | — | — |
| widget.query.options.filter_bot_data | boolean | No | — | — |
| widget.query.options.enable_id_resolution | boolean | No | — | — |
| widget.query.options.is_precomputed_only | boolean | No | — | — |
| widget.query.options.default_id_type | string | No | — | Constraints: nullable |
| widget.query.options.show_table_only | boolean | No | — | — |
| widget.query.series | object[] | No | — | — |
| widget.query.series.id | string | No | — | — |
| widget.query.series.source | oneOf | Yes | — | Constraints: object, object, object, object, object |
| widget.query.series.source.type | string | Yes | — | Allowed values: event, metric, metric_source, exposure, table_config |
| widget.query.series.source.event_name | string | No | — | — |
| widget.query.series.source.metric_id | string | No | — | Constraints: pattern: ^.+::[^:]+$ |
| widget.query.series.source.metric_source_id | string | No | — | Constraints: min length: 1 |
| widget.query.series.source.kind | string | No | — | Allowed values: experiment, gate, config, layer |
| widget.query.series.source.name | string | No | — | — |
| widget.query.series.source.table_config_id | string | No | — | Constraints: min length: 1 |
| widget.query.series.definition | object | No | — | — |
| widget.query.series.definition.events | object[] | Yes | — | — |
| widget.query.series.definition.events.event_name | string | Yes | — | — |
| widget.query.series.definition.events.filters | object[] | Yes | — | — |
| widget.query.series.definition.events.filters.property | object | Yes | — | — |
| widget.query.series.definition.events.filters.property.key | string | Yes | — | — |
| widget.query.series.definition.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.series.definition.events.filters.values | string[] | No | [] | — |
| widget.query.series.definition.events.filters.label | string | No | — | — |
| widget.query.series.definition.events.alias | string | No | — | — |
| widget.query.series.definition.events.is_first_time | boolean | No | — | — |
| widget.query.series.definition.events.metric_type | string | No | — | — |
| widget.query.series.definition.events.metric_source_id | string | No | — | — |
| widget.query.series.definition.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.series.definition.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.series.definition.aggregation | object | Yes | — | — |
| widget.query.series.definition.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.series.definition.aggregation.property | object | No | — | — |
| widget.query.series.definition.aggregation.property.key | string | Yes | — | — |
| widget.query.series.definition.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.series.definition.composite | object | No | — | — |
| widget.query.series.definition.composite.type | string | Yes | — | Allowed values: ratio |
| widget.query.series.definition.composite.numerator | object | Yes | — | — |
| widget.query.series.definition.composite.numerator.events | object[] | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.event_name | string | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.filters | object[] | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.filters.property | object | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.filters.property.key | string | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.composite.numerator.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.composite.numerator.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.composite.numerator.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.composite.numerator.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.series.definition.composite.numerator.events.filters.values | string[] | No | [] | — |
| widget.query.series.definition.composite.numerator.events.filters.label | string | No | — | — |
| widget.query.series.definition.composite.numerator.events.alias | string | No | — | — |
| widget.query.series.definition.composite.numerator.events.is_first_time | boolean | No | — | — |
| widget.query.series.definition.composite.numerator.events.metric_type | string | No | — | — |
| widget.query.series.definition.composite.numerator.events.metric_source_id | string | No | — | — |
| widget.query.series.definition.composite.numerator.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.series.definition.composite.numerator.aggregation | object | Yes | — | — |
| widget.query.series.definition.composite.numerator.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.series.definition.composite.numerator.aggregation.property | object | No | — | — |
| widget.query.series.definition.composite.numerator.aggregation.property.key | string | Yes | — | — |
| widget.query.series.definition.composite.numerator.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.composite.numerator.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.composite.numerator.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.composite.numerator.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.composite.numerator.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.composite.numerator.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.series.definition.composite.denominator | object | Yes | — | — |
| widget.query.series.definition.composite.denominator.events | object[] | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.event_name | string | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.filters | object[] | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.filters.property | object | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.filters.property.key | string | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.composite.denominator.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.composite.denominator.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.composite.denominator.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.composite.denominator.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.series.definition.composite.denominator.events.filters.values | string[] | No | [] | — |
| widget.query.series.definition.composite.denominator.events.filters.label | string | No | — | — |
| widget.query.series.definition.composite.denominator.events.alias | string | No | — | — |
| widget.query.series.definition.composite.denominator.events.is_first_time | boolean | No | — | — |
| widget.query.series.definition.composite.denominator.events.metric_type | string | No | — | — |
| widget.query.series.definition.composite.denominator.events.metric_source_id | string | No | — | — |
| widget.query.series.definition.composite.denominator.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.series.definition.composite.denominator.aggregation | object | Yes | — | — |
| widget.query.series.definition.composite.denominator.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.series.definition.composite.denominator.aggregation.property | object | No | — | — |
| widget.query.series.definition.composite.denominator.aggregation.property.key | string | Yes | — | — |
| widget.query.series.definition.composite.denominator.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.definition.composite.denominator.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.series.definition.composite.denominator.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.definition.composite.denominator.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.definition.composite.denominator.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.definition.composite.denominator.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.series.definition.null_handling | string | No | — | Allowed values: skip, treat_as_zero |
| widget.query.series.unit_type | string | No | — | — |
| widget.query.series.filters | object[] | No | — | — |
| widget.query.series.filters.property | object | Yes | — | — |
| widget.query.series.filters.property.key | string | Yes | — | — |
| widget.query.series.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.filters.property.metric_source_column | string | No | — | — |
| widget.query.series.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.series.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.series.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.series.filters.values | string[] | No | [] | — |
| widget.query.series.filters.label | string | No | — | — |
| widget.query.series.group_bys | object[] | No | — | — |
| widget.query.series.group_bys.key | string | Yes | — | — |
| widget.query.series.group_bys.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.series.group_bys.metric_source_column | string | No | — | — |
| widget.query.series.group_bys.source | object | No | — | Constraints: nullable |
| widget.query.series.group_bys.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.series.group_bys.source.experiment_name | string | Yes | — | — |
| widget.query.series.group_bys.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.series.group_bys.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.series.alias | string | No | — | — |
| widget.query.series.hidden | boolean | No | — | — |
| widget.query.formulas | object[] | No | — | — |
| widget.query.formulas.id | string | No | — | — |
| widget.query.formulas.formula | string | Yes | — | — |
| widget.query.formulas.name | string | No | — | — |
| widget.query.formulas.hidden | boolean | No | — | — |
| widget.query.formulas.coalesce_nulls_as_zeroes | boolean | No | — | — |
| widget.query.formulas.highlight_as | string | No | — | Allowed values: error, warning |
| widget.query.steps | oneOf[] | No | — | — |
| widget.query.steps.event_name | string | No | — | — |
| widget.query.steps.filters | object[] | No | — | — |
| widget.query.steps.filters.property | object | Yes | — | — |
| widget.query.steps.filters.property.key | string | Yes | — | — |
| widget.query.steps.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.filters.values | string[] | No | [] | — |
| widget.query.steps.filters.label | string | No | — | — |
| widget.query.steps.events | object[] | No | — | — |
| widget.query.steps.events.event_name | string | Yes | — | — |
| widget.query.steps.events.filters | object[] | Yes | — | — |
| widget.query.steps.events.filters.property | object | Yes | — | — |
| widget.query.steps.events.filters.property.key | string | Yes | — | — |
| widget.query.steps.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.events.filters.values | string[] | No | [] | — |
| widget.query.steps.events.filters.label | string | No | — | — |
| widget.query.steps.events.alias | string | No | — | — |
| widget.query.steps.events.is_first_time | boolean | No | — | — |
| widget.query.steps.events.metric_type | string | No | — | — |
| widget.query.steps.events.metric_source_id | string | No | — | — |
| widget.query.steps.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.steps.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.steps.metric | object | No | — | — |
| widget.query.steps.metric.id | string | No | — | — |
| widget.query.steps.metric.source | oneOf | Yes | — | Constraints: object, object, object, object, object |
| widget.query.steps.metric.source.type | string | Yes | — | Allowed values: event, metric, metric_source, exposure, table_config |
| widget.query.steps.metric.source.event_name | string | No | — | — |
| widget.query.steps.metric.source.metric_id | string | No | — | Constraints: pattern: ^.+::[^:]+$ |
| widget.query.steps.metric.source.metric_source_id | string | No | — | Constraints: min length: 1 |
| widget.query.steps.metric.source.kind | string | No | — | Allowed values: experiment, gate, config, layer |
| widget.query.steps.metric.source.name | string | No | — | — |
| widget.query.steps.metric.source.table_config_id | string | No | — | Constraints: min length: 1 |
| widget.query.steps.metric.definition | object | No | — | — |
| widget.query.steps.metric.definition.events | object[] | Yes | — | — |
| widget.query.steps.metric.definition.events.event_name | string | Yes | — | — |
| widget.query.steps.metric.definition.events.filters | object[] | Yes | — | — |
| widget.query.steps.metric.definition.events.filters.property | object | Yes | — | — |
| widget.query.steps.metric.definition.events.filters.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.metric.definition.events.filters.values | string[] | No | [] | — |
| widget.query.steps.metric.definition.events.filters.label | string | No | — | — |
| widget.query.steps.metric.definition.events.alias | string | No | — | — |
| widget.query.steps.metric.definition.events.is_first_time | boolean | No | — | — |
| widget.query.steps.metric.definition.events.metric_type | string | No | — | — |
| widget.query.steps.metric.definition.events.metric_source_id | string | No | — | — |
| widget.query.steps.metric.definition.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.steps.metric.definition.aggregation | object | Yes | — | — |
| widget.query.steps.metric.definition.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.steps.metric.definition.aggregation.property | object | No | — | — |
| widget.query.steps.metric.definition.aggregation.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.steps.metric.definition.composite | object | No | — | — |
| widget.query.steps.metric.definition.composite.type | string | Yes | — | Allowed values: ratio |
| widget.query.steps.metric.definition.composite.numerator | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events | object[] | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.event_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters | object[] | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.metric.definition.composite.numerator.events.filters.values | string[] | No | [] | — |
| widget.query.steps.metric.definition.composite.numerator.events.filters.label | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.alias | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.is_first_time | boolean | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.metric_type | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.metric_source_id | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.steps.metric.definition.composite.numerator.aggregation | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property | object | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.numerator.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.steps.metric.definition.composite.denominator | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events | object[] | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.event_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters | object[] | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.metric.definition.composite.denominator.events.filters.values | string[] | No | [] | — |
| widget.query.steps.metric.definition.composite.denominator.events.filters.label | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.alias | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.is_first_time | boolean | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.metric_type | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.metric_source_id | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.steps.metric.definition.composite.denominator.aggregation | object | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.aggregation.type | string | Yes | — | Allowed values: COUNT, COUNT_DISTINCT, COUNT_DISTINCT_VALUE, COUNT_DISTINCT_VALUE_PER_USER, AVG_COUNT_PER_USER, MAX_COUNT_PER_USER, MIN_COUNT_PER_USER, P50_COUNT_PER_USER, P75_COUNT_PER_USER, P90_COUNT_PER_USER, P95_COUNT_PER_USER, P99_COUNT_PER_USER, SUM, AVG, CONVERSION_RATE, FUNNEL, P50, P75, P90, P95, P99, MAX, MIN, OTEL_COUNTER__SUM, OTEL_COUNTER__AVG, OTEL_COUNTER__MIN, OTEL_COUNTER__MAX, OTEL_HISTOGRAM__COUNT, OTEL_HISTOGRAM__SUM, OTEL_HISTOGRAM__AVG, OTEL_HISTOGRAM__P50, OTEL_HISTOGRAM__P75, OTEL_HISTOGRAM__P90, OTEL_HISTOGRAM__P95, OTEL_HISTOGRAM__P99, OTEL_GAUGE__AVG, OTEL_GAUGE__SUM, OTEL_GAUGE__MIN, OTEL_GAUGE__MAX |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property | object | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.key | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.aggregation.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.definition.composite.denominator.uniques_window | string | No | — | Allowed values: daily, weekly, monthly, default |
| widget.query.steps.metric.definition.null_handling | string | No | — | Allowed values: skip, treat_as_zero |
| widget.query.steps.metric.unit_type | string | No | — | — |
| widget.query.steps.metric.filters | object[] | No | — | — |
| widget.query.steps.metric.filters.property | object | Yes | — | — |
| widget.query.steps.metric.filters.property.key | string | Yes | — | — |
| widget.query.steps.metric.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.filters.property.metric_source_column | string | No | — | — |
| widget.query.steps.metric.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.steps.metric.filters.values | string[] | No | [] | — |
| widget.query.steps.metric.filters.label | string | No | — | — |
| widget.query.steps.metric.group_bys | object[] | No | — | — |
| widget.query.steps.metric.group_bys.key | string | Yes | — | — |
| widget.query.steps.metric.group_bys.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.steps.metric.group_bys.metric_source_column | string | No | — | — |
| widget.query.steps.metric.group_bys.source | object | No | — | Constraints: nullable |
| widget.query.steps.metric.group_bys.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.steps.metric.group_bys.source.experiment_name | string | Yes | — | — |
| widget.query.steps.metric.group_bys.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.steps.metric.group_bys.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.steps.metric.alias | string | No | — | — |
| widget.query.steps.metric.hidden | boolean | No | — | — |
| widget.query.steps.alias | string | No | — | — |
| widget.query.steps.is_metric_expanded | boolean | No | — | — |
| widget.query.steps.is_optional | boolean | No | — | — |
| widget.query.steps.should_compare_events | boolean | No | — | — |
| widget.query.conversion_window | object | No | — | — |
| widget.query.conversion_window.value | integer | Yes | — | Constraints: min: 0 |
| widget.query.conversion_window.unit | string | Yes | — | Allowed values: second, minute, hour, day |
| widget.query.chart_type | string | No | — | Allowed values: conversion-rate, conversions |
| widget.query.measurement | string | No | — | Allowed values: conversion_rate, conversion_rate_over_time, time_to_convert |
| widget.query.is_sequential | boolean | No | — | — |
| widget.query.use_uniques_units | boolean | No | — | — |
| widget.query.use_persistent_group_bys | boolean | No | — | — |
| widget.query.group_by_limit | integer | No | — | Constraints: min: 0 |
| widget.query.sort_by_conversion_rate | boolean | No | — | — |
| widget.query.sort_order_is_descending | boolean | No | — | — |
| widget.query.time_to_convert_buckets | object | No | — | — |
| widget.query.time_to_convert_buckets.range_min | number | Yes | — | — |
| widget.query.time_to_convert_buckets.range_max | number | Yes | — | — |
| widget.query.time_to_convert_buckets.interval_size | number | Yes | — | Constraints: min: 0 |
| widget.query.time_to_convert_buckets.bucket_units_min_max | string | Yes | — | Allowed values: second, minute, hour, day |
| widget.query.time_to_convert_buckets.bucket_units_bucket_size | string | Yes | — | Allowed values: second, minute, hour, day |
| widget.query.time_to_convert_unit | string | No | — | Allowed values: second, minute, hour, day |
| widget.query.show_sum_property_value_last_step | boolean | No | — | — |
| widget.query.property_value_to_sum | string | No | — | — |
| widget.query.exclude_units_who_did_event | object | No | — | — |
| widget.query.exclude_units_who_did_event.events | object[] | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.event_name | string | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.filters | object[] | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.filters.property | object | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.filters.property.key | string | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.filters.property.column | string | Yes | — | Property namespace, such as `user_object` or `metric_source_metadata`. |
| widget.query.exclude_units_who_did_event.events.filters.property.metric_source_column | string | No | — | — |
| widget.query.exclude_units_who_did_event.events.filters.property.source | object | No | — | Constraints: nullable |
| widget.query.exclude_units_who_did_event.events.filters.property.source.type | string | Yes | — | Allowed values: experiment, echidna_entity_property_source |
| widget.query.exclude_units_who_did_event.events.filters.property.source.experiment_name | string | Yes | — | — |
| widget.query.exclude_units_who_did_event.events.filters.property.source.rule_id | string | No | — | Constraints: nullable |
| widget.query.exclude_units_who_did_event.events.filters.property.source.is_holdout | boolean | No | — | Constraints: nullable |
| widget.query.exclude_units_who_did_event.events.filters.operator | string | Yes | — | Allowed values: ANY_OF, CONTAINS, EQ, GT, LT, GTE, LTE, IS_NOT_NULL, IS_NULL, NONE_OF, NOT_CONTAINS, SQL_FILTER, STARTS_WITH, ENDS_WITH, AFTER_EXPOSURE, BEFORE_EXPOSURE, IS_TRUE, IS_FALSE, INCLUDED, NOT_INCLUDED |
| widget.query.exclude_units_who_did_event.events.filters.values | string[] | No | [] | — |
| widget.query.exclude_units_who_did_event.events.filters.label | string | No | — | — |
| widget.query.exclude_units_who_did_event.events.alias | string | No | — | — |
| widget.query.exclude_units_who_did_event.events.is_first_time | boolean | No | — | — |
| widget.query.exclude_units_who_did_event.events.metric_type | string | No | — | — |
| widget.query.exclude_units_who_did_event.events.metric_source_id | string | No | — | — |
| widget.query.exclude_units_who_did_event.events.event_name_column | string | No | — | Constraints: nullable |
| widget.query.exclude_units_who_did_event.events.analytics_config | string | No | — | Allowed values: fact_table, single_event, multi_event |
| widget.query.exclude_units_who_did_event.between_steps | object | No | — | — |
| widget.query.exclude_units_who_did_event.between_steps.start | integer | Yes | — | Constraints: min: 0 |
| widget.query.exclude_units_who_did_event.between_steps.end | integer | Yes | — | Constraints: min: 0 |

## Response (application/json)

**200** — Updated widget identity and dashboard revision.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| message | string | Yes | — | A simple string explaining the result of the operation. |
| data | object | Yes | — | — |
| data.id | string | Yes | — | — |
| data.revision | string | Yes | — | — |

```json
{
  "message": "string",
  "data": {
    "id": "string",
    "revision": "string"
  }
}
```

**400** — Invalid request. Please check the request input and try again.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| status | integer | Yes | — | Allowed values: 400 |
| message | string | Yes | — | — |

```json
{
  "status": 400,
  "message": "Invalid request. Please check the request input and try again."
}
```

**404** — Not Found. The requested resource could not be found.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| status | integer | Yes | — | Allowed values: 404 |
| message | string | Yes | — | — |

```json
{
  "status": 404,
  "message": "Not Found. The requested resource could not be found."
}
```

**412** — The revision changed. Read the dashboard again and reapply the edit.

## Code samples

### cURL

```bash
curl -X PATCH "https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}" \
  -H "Content-Type: application/json" \
  -H "STATSIG-API-KEY: YOUR_API_KEY"
```

### Python

```python
import requests

response = requests.patch(
    "https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}",
    headers={
        "Content-Type": "application/json",
        "STATSIG-API-KEY": "YOUR_API_KEY"
    }
)
data = response.json()
```

### JavaScript

```javascript
const response = await fetch("https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}", {
  method: "PATCH",
  headers: {
    "Content-Type": "application/json",
    "STATSIG-API-KEY": "YOUR_API_KEY"
  }
});
const data = await response.json();
```

### PHP

```php
<?php
$ch = curl_init("https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "STATSIG-API-KEY: YOUR_API_KEY"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
```

### Go

```go
package main

import (
  "bytes"
  "net/http"
)

func main() {
req, _ := http.NewRequest("PATCH", "https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}", nil)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("STATSIG-API-KEY", "YOUR_API_KEY")
  client := &http.Client{}
  resp, _ := client.Do(req)
  defer resp.Body.Close()
}
```

### Java

```java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}"))
      .method("PATCH", HttpRequest.BodyPublishers.noBody())
.header("Content-Type", "application/json")
      .header("STATSIG-API-KEY", "YOUR_API_KEY")
      .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
```

### Ruby

```ruby
require "net/http"
require "json"

uri = URI("https://statsigapi.net/console/v1/dashboards/{id}/widgets/{widgetId}")
request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["STATSIG-API-KEY"] = "YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end
```

