diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml
index 150bd49be13..b4c65dd34aa 100644
--- a/.generator/schemas/v1/openapi.yaml
+++ b/.generator/schemas/v1/openapi.yaml
@@ -25934,6 +25934,8 @@ components:
$ref: '#/components/schemas/WidgetLineType'
line_width:
$ref: '#/components/schemas/WidgetLineWidth'
+ order_by:
+ $ref: '#/components/schemas/WidgetStyleOrderBy'
palette:
description: Color palette to apply to the widget.
type: string
@@ -25996,6 +25998,19 @@ components:
description: Color palette to apply to the widget.
type: string
type: object
+ WidgetStyleOrderBy:
+ description: 'How to order series in timeseries visualizations.
+
+ - `tags`: Order series alphabetically by tag name (default behavior)
+
+ - `values`: Order series by their current metric values (typically descending)'
+ enum:
+ - tags
+ - values
+ type: string
+ x-enum-varnames:
+ - TAGS
+ - VALUES
WidgetSummaryType:
description: Which summary type should be used.
enum:
diff --git a/examples/v1/dashboards/CreateDashboard_1259346254.java b/examples/v1/dashboards/CreateDashboard_1259346254.java
new file mode 100644
index 00000000000..472246e8ed2
--- /dev/null
+++ b/examples/v1/dashboards/CreateDashboard_1259346254.java
@@ -0,0 +1,55 @@
+// Create a new dashboard with timeseries widget using order_by values
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v1.api.DashboardsApi;
+import com.datadog.api.client.v1.model.Dashboard;
+import com.datadog.api.client.v1.model.DashboardLayoutType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinition;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetRequest;
+import com.datadog.api.client.v1.model.Widget;
+import com.datadog.api.client.v1.model.WidgetDefinition;
+import com.datadog.api.client.v1.model.WidgetDisplayType;
+import com.datadog.api.client.v1.model.WidgetRequestStyle;
+import com.datadog.api.client.v1.model.WidgetStyleOrderBy;
+import java.util.Collections;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ DashboardsApi apiInstance = new DashboardsApi(defaultClient);
+
+ Dashboard body =
+ new Dashboard()
+ .layoutType(DashboardLayoutType.ORDERED)
+ .title("Example-Dashboard with order_by values")
+ .widgets(
+ Collections.singletonList(
+ new Widget()
+ .definition(
+ new WidgetDefinition(
+ new TimeseriesWidgetDefinition()
+ .type(TimeseriesWidgetDefinitionType.TIMESERIES)
+ .requests(
+ Collections.singletonList(
+ new TimeseriesWidgetRequest()
+ .q("avg:system.cpu.user{*} by {host}")
+ .style(
+ new WidgetRequestStyle()
+ .palette("warm")
+ .orderBy(WidgetStyleOrderBy.VALUES))
+ .displayType(WidgetDisplayType.LINE)))))));
+
+ try {
+ Dashboard result = apiInstance.createDashboard(body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling DashboardsApi#createDashboard");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/examples/v1/dashboards/CreateDashboard_3631423980.java b/examples/v1/dashboards/CreateDashboard_3631423980.java
new file mode 100644
index 00000000000..df98fc294b6
--- /dev/null
+++ b/examples/v1/dashboards/CreateDashboard_3631423980.java
@@ -0,0 +1,57 @@
+// Create a new dashboard with timeseries widget without order_by for backward compatibility
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v1.api.DashboardsApi;
+import com.datadog.api.client.v1.model.Dashboard;
+import com.datadog.api.client.v1.model.DashboardLayoutType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinition;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetRequest;
+import com.datadog.api.client.v1.model.Widget;
+import com.datadog.api.client.v1.model.WidgetDefinition;
+import com.datadog.api.client.v1.model.WidgetDisplayType;
+import com.datadog.api.client.v1.model.WidgetLineType;
+import com.datadog.api.client.v1.model.WidgetLineWidth;
+import com.datadog.api.client.v1.model.WidgetRequestStyle;
+import java.util.Collections;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ DashboardsApi apiInstance = new DashboardsApi(defaultClient);
+
+ Dashboard body =
+ new Dashboard()
+ .layoutType(DashboardLayoutType.ORDERED)
+ .title("Example-Dashboard without order_by")
+ .widgets(
+ Collections.singletonList(
+ new Widget()
+ .definition(
+ new WidgetDefinition(
+ new TimeseriesWidgetDefinition()
+ .type(TimeseriesWidgetDefinitionType.TIMESERIES)
+ .requests(
+ Collections.singletonList(
+ new TimeseriesWidgetRequest()
+ .q("avg:system.cpu.user{*} by {host}")
+ .style(
+ new WidgetRequestStyle()
+ .palette("dog_classic")
+ .lineType(WidgetLineType.SOLID)
+ .lineWidth(WidgetLineWidth.NORMAL))
+ .displayType(WidgetDisplayType.LINE)))))));
+
+ try {
+ Dashboard result = apiInstance.createDashboard(body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling DashboardsApi#createDashboard");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/examples/v1/dashboards/CreateDashboard_416487533.java b/examples/v1/dashboards/CreateDashboard_416487533.java
new file mode 100644
index 00000000000..71c68439838
--- /dev/null
+++ b/examples/v1/dashboards/CreateDashboard_416487533.java
@@ -0,0 +1,55 @@
+// Create a new dashboard with timeseries widget using order_by tags
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v1.api.DashboardsApi;
+import com.datadog.api.client.v1.model.Dashboard;
+import com.datadog.api.client.v1.model.DashboardLayoutType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinition;
+import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType;
+import com.datadog.api.client.v1.model.TimeseriesWidgetRequest;
+import com.datadog.api.client.v1.model.Widget;
+import com.datadog.api.client.v1.model.WidgetDefinition;
+import com.datadog.api.client.v1.model.WidgetDisplayType;
+import com.datadog.api.client.v1.model.WidgetRequestStyle;
+import com.datadog.api.client.v1.model.WidgetStyleOrderBy;
+import java.util.Collections;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ DashboardsApi apiInstance = new DashboardsApi(defaultClient);
+
+ Dashboard body =
+ new Dashboard()
+ .layoutType(DashboardLayoutType.ORDERED)
+ .title("Example-Dashboard with order_by tags")
+ .widgets(
+ Collections.singletonList(
+ new Widget()
+ .definition(
+ new WidgetDefinition(
+ new TimeseriesWidgetDefinition()
+ .type(TimeseriesWidgetDefinitionType.TIMESERIES)
+ .requests(
+ Collections.singletonList(
+ new TimeseriesWidgetRequest()
+ .q("avg:system.cpu.user{*} by {host}")
+ .style(
+ new WidgetRequestStyle()
+ .palette("dog_classic")
+ .orderBy(WidgetStyleOrderBy.TAGS))
+ .displayType(WidgetDisplayType.LINE)))))));
+
+ try {
+ Dashboard result = apiInstance.createDashboard(body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling DashboardsApi#createDashboard");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java b/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java
index b1d80d0014b..1f45735cdc3 100644
--- a/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java
+++ b/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java
@@ -20,6 +20,7 @@
@JsonPropertyOrder({
WidgetRequestStyle.JSON_PROPERTY_LINE_TYPE,
WidgetRequestStyle.JSON_PROPERTY_LINE_WIDTH,
+ WidgetRequestStyle.JSON_PROPERTY_ORDER_BY,
WidgetRequestStyle.JSON_PROPERTY_PALETTE
})
@jakarta.annotation.Generated(
@@ -32,6 +33,9 @@ public class WidgetRequestStyle {
public static final String JSON_PROPERTY_LINE_WIDTH = "line_width";
private WidgetLineWidth lineWidth;
+ public static final String JSON_PROPERTY_ORDER_BY = "order_by";
+ private WidgetStyleOrderBy orderBy;
+
public static final String JSON_PROPERTY_PALETTE = "palette";
private String palette;
@@ -85,6 +89,33 @@ public void setLineWidth(WidgetLineWidth lineWidth) {
this.lineWidth = lineWidth;
}
+ public WidgetRequestStyle orderBy(WidgetStyleOrderBy orderBy) {
+ this.orderBy = orderBy;
+ this.unparsed |= !orderBy.isValid();
+ return this;
+ }
+
+ /**
+ * How to order series in timeseries visualizations. - tags: Order series
+ * alphabetically by tag name (default behavior) - values: Order series by their
+ * current metric values (typically descending)
+ *
+ * @return orderBy
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ORDER_BY)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public WidgetStyleOrderBy getOrderBy() {
+ return orderBy;
+ }
+
+ public void setOrderBy(WidgetStyleOrderBy orderBy) {
+ if (!orderBy.isValid()) {
+ this.unparsed = true;
+ }
+ this.orderBy = orderBy;
+ }
+
public WidgetRequestStyle palette(String palette) {
this.palette = palette;
return this;
@@ -164,13 +195,14 @@ public boolean equals(Object o) {
WidgetRequestStyle widgetRequestStyle = (WidgetRequestStyle) o;
return Objects.equals(this.lineType, widgetRequestStyle.lineType)
&& Objects.equals(this.lineWidth, widgetRequestStyle.lineWidth)
+ && Objects.equals(this.orderBy, widgetRequestStyle.orderBy)
&& Objects.equals(this.palette, widgetRequestStyle.palette)
&& Objects.equals(this.additionalProperties, widgetRequestStyle.additionalProperties);
}
@Override
public int hashCode() {
- return Objects.hash(lineType, lineWidth, palette, additionalProperties);
+ return Objects.hash(lineType, lineWidth, orderBy, palette, additionalProperties);
}
@Override
@@ -179,6 +211,7 @@ public String toString() {
sb.append("class WidgetRequestStyle {\n");
sb.append(" lineType: ").append(toIndentedString(lineType)).append("\n");
sb.append(" lineWidth: ").append(toIndentedString(lineWidth)).append("\n");
+ sb.append(" orderBy: ").append(toIndentedString(orderBy)).append("\n");
sb.append(" palette: ").append(toIndentedString(palette)).append("\n");
sb.append(" additionalProperties: ")
.append(toIndentedString(additionalProperties))
diff --git a/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java b/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java
new file mode 100644
index 00000000000..68d85e59f88
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java
@@ -0,0 +1,59 @@
+/*
+ * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
+ * Copyright 2019-Present Datadog, Inc.
+ */
+
+package com.datadog.api.client.v1.model;
+
+import com.datadog.api.client.ModelEnum;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * How to order series in timeseries visualizations. - tags: Order series
+ * alphabetically by tag name (default behavior) - values: Order series by their
+ * current metric values (typically descending)
+ */
+@JsonSerialize(using = WidgetStyleOrderBy.WidgetStyleOrderBySerializer.class)
+public class WidgetStyleOrderBy extends ModelEnum {
+
+ private static final Set allowedValues =
+ new HashSet(Arrays.asList("tags", "values"));
+
+ public static final WidgetStyleOrderBy TAGS = new WidgetStyleOrderBy("tags");
+ public static final WidgetStyleOrderBy VALUES = new WidgetStyleOrderBy("values");
+
+ WidgetStyleOrderBy(String value) {
+ super(value, allowedValues);
+ }
+
+ public static class WidgetStyleOrderBySerializer extends StdSerializer {
+ public WidgetStyleOrderBySerializer(Class t) {
+ super(t);
+ }
+
+ public WidgetStyleOrderBySerializer() {
+ this(null);
+ }
+
+ @Override
+ public void serialize(WidgetStyleOrderBy value, JsonGenerator jgen, SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeObject(value.value);
+ }
+ }
+
+ @JsonCreator
+ public static WidgetStyleOrderBy fromValue(String value) {
+ return new WidgetStyleOrderBy(value);
+ }
+}
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze
new file mode 100644
index 00000000000..951919f26bd
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze
@@ -0,0 +1 @@
+2026-01-20T23:39:22.864Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json
new file mode 100644
index 00000000000..0268f5ae5a2
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json
@@ -0,0 +1,58 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"tags\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"}}]}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v1/dashboard",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"id\":\"2r3-a4g-ubz\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/2r3-a4g-ubz/test-createanewdashboardwithtimeserieswidgetusingorderbytags-1768952362-with-ord\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"tags\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":8704189893014651}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:22.992533+00:00\",\"modified_at\":\"2026-01-20T23:39:22.992533+00:00\",\"restricted_roles\":[]}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "abeac4e0-5184-00e1-9b5a-81838f265016"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "DELETE",
+ "path": "/api/v1/dashboard/2r3-a4g-ubz",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"deleted_dashboard_id\":\"2r3-a4g-ubz\"}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "b2a45bba-7e7d-6dd1-c196-6614f1adfe42"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze
new file mode 100644
index 00000000000..67f72333494
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze
@@ -0,0 +1 @@
+2026-01-20T23:39:50.889Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json
new file mode 100644
index 00000000000..492a66c2e8f
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json
@@ -0,0 +1,58 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"values\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"}}]}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v1/dashboard",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"id\":\"5ee-dqv-ruw\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/5ee-dqv-ruw/test-createanewdashboardwithtimeserieswidgetusingorderbyvalues-1768952390-with-o\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"values\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"},\"id\":8314193502199768}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:51.018015+00:00\",\"modified_at\":\"2026-01-20T23:39:51.018015+00:00\",\"restricted_roles\":[]}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "234d406c-2755-1e9a-049a-34be4f0dfc42"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "DELETE",
+ "path": "/api/v1/dashboard/5ee-dqv-ruw",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"deleted_dashboard_id\":\"5ee-dqv-ruw\"}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "d72a5f38-3cf3-59ed-2726-0704c0e048a9"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze
new file mode 100644
index 00000000000..608e803e2fa
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze
@@ -0,0 +1 @@
+2026-01-20T23:40:15.566Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json
new file mode 100644
index 00000000000..158ff1249fd
--- /dev/null
+++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json
@@ -0,0 +1,58 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"}}]}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v1/dashboard",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"id\":\"6bg-rgq-fxc\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/6bg-rgq-fxc/test-createanewdashboardwithtimeserieswidgetwithoutorderbyforbackwardcompatibili\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":2503785343641105}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:40:15.937647+00:00\",\"modified_at\":\"2026-01-20T23:40:15.937647+00:00\",\"restricted_roles\":[]}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "dce11a09-aa12-a01e-d5be-e912789a546a"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "DELETE",
+ "path": "/api/v1/dashboard/6bg-rgq-fxc",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"deleted_dashboard_id\":\"6bg-rgq-fxc\"}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "e3bd787e-08c1-2124-e7f8-0f3491c37147"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature b/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature
index 6b67bc65044..349f7de6f9d 100644
--- a/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature
+++ b/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature
@@ -946,6 +946,24 @@ Feature: Dashboards
And the response "widgets[0].definition.requests[0].display_type" is equal to "bars"
And the response "widgets[0].definition.requests[0].q" is equal to "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()"
+ @team:DataDog/dashboards-backend
+ Scenario: Create a new dashboard with timeseries widget using order_by tags
+ Given new "CreateDashboard" request
+ And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by tags","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","order_by": "tags"},"display_type": "line"}]}}]}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "widgets[0].definition.requests[0].style.order_by" is equal to "tags"
+ And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic"
+
+ @team:DataDog/dashboards-backend
+ Scenario: Create a new dashboard with timeseries widget using order_by values
+ Given new "CreateDashboard" request
+ And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by values","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "warm","order_by": "values"},"display_type": "line"}]}}]}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "widgets[0].definition.requests[0].style.order_by" is equal to "values"
+ And the response "widgets[0].definition.requests[0].style.palette" is equal to "warm"
+
@team:DataDog/dashboards-backend
Scenario: Create a new dashboard with timeseries widget with custom_unit
Given new "CreateDashboard" request
@@ -958,6 +976,16 @@ Feature: Dashboards
And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.type" is equal to "canonical_unit"
And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.unit_name" is equal to "fraction"
+ @team:DataDog/dashboards-backend
+ Scenario: Create a new dashboard with timeseries widget without order_by for backward compatibility
+ Given new "CreateDashboard" request
+ And body with value {"layout_type": "ordered", "title": "{{ unique }} without order_by","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","line_type": "solid","line_width": "normal"},"display_type": "line"}]}}]}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic"
+ And the response "widgets[0].definition.requests[0].style.line_type" is equal to "solid"
+ And the response "widgets[0].definition.requests[0].style.line_width" is equal to "normal"
+
@team:DataDog/dashboards-backend
Scenario: Create a new dashboard with toplist widget
Given new "CreateDashboard" request