diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml
index 3cabe03bbad..e4888a0ced6 100644
--- a/.generator/schemas/v2/openapi.yaml
+++ b/.generator/schemas/v2/openapi.yaml
@@ -75613,12 +75613,15 @@ components:
description: |-
If `true`, Splunk tries to extract timestamps from incoming log events.
If `false`, Splunk assigns the time the event was received.
+ Only applies when `endpoint_target` is `event`; cannot be `true` when `endpoint_target` is `raw`.
example: true
type: boolean
buffer:
$ref: "#/components/schemas/ObservabilityPipelineBufferOptions"
encoding:
$ref: "#/components/schemas/ObservabilityPipelineSplunkHecDestinationEncoding"
+ endpoint_target:
+ $ref: "#/components/schemas/ObservabilityPipelineSplunkHecDestinationEndpointTarget"
endpoint_url_key:
description: Name of the environment variable or secret that holds the Splunk HEC endpoint URL.
example: SPLUNK_HEC_ENDPOINT_URL
@@ -75673,6 +75676,16 @@ components:
x-enum-varnames:
- JSON
- RAW_MESSAGE
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget:
+ description: The Splunk HEC endpoint to send events to. Use `event` to send structured events to the `/event` endpoint, or `raw` to send the raw message to the `/raw` endpoint.
+ enum:
+ - event
+ - raw
+ example: event
+ type: string
+ x-enum-varnames:
+ - EVENT
+ - RAW
ObservabilityPipelineSplunkHecDestinationTokenStrategy:
description: Controls how the Splunk HEC token is supplied. Use `custom` to provide a token with `token_key`, or `from_source` to forward the token received from an upstream Splunk HEC source.
enum:
diff --git a/examples/v2/observability-pipelines/ValidatePipeline_1874470273.java b/examples/v2/observability-pipelines/ValidatePipeline_1874470273.java
new file mode 100644
index 00000000000..d5c97b5e59b
--- /dev/null
+++ b/examples/v2/observability-pipelines/ValidatePipeline_1874470273.java
@@ -0,0 +1,94 @@
+// Validate an observability pipeline with Splunk HEC destination endpoint_target returns "OK"
+// response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.ObservabilityPipelinesApi;
+import com.datadog.api.client.v2.model.ObservabilityPipelineConfig;
+import com.datadog.api.client.v2.model.ObservabilityPipelineConfigDestinationItem;
+import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorGroup;
+import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorItem;
+import com.datadog.api.client.v2.model.ObservabilityPipelineConfigSourceItem;
+import com.datadog.api.client.v2.model.ObservabilityPipelineDataAttributes;
+import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSource;
+import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSourceType;
+import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor;
+import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType;
+import com.datadog.api.client.v2.model.ObservabilityPipelineSpec;
+import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData;
+import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestination;
+import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestinationEndpointTarget;
+import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestinationType;
+import com.datadog.api.client.v2.model.ValidationResponse;
+import java.util.Collections;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ ObservabilityPipelinesApi apiInstance = new ObservabilityPipelinesApi(defaultClient);
+
+ ObservabilityPipelineSpec body =
+ new ObservabilityPipelineSpec()
+ .data(
+ new ObservabilityPipelineSpecData()
+ .attributes(
+ new ObservabilityPipelineDataAttributes()
+ .config(
+ new ObservabilityPipelineConfig()
+ .destinations(
+ Collections.singletonList(
+ new ObservabilityPipelineConfigDestinationItem(
+ new ObservabilityPipelineSplunkHecDestination()
+ .id("splunk-hec-destination")
+ .inputs(
+ Collections.singletonList(
+ "my-processor-group"))
+ .type(
+ ObservabilityPipelineSplunkHecDestinationType
+ .SPLUNK_HEC)
+ .tokenKey("SPLUNK_HEC_TOKEN")
+ .endpointTarget(
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget
+ .RAW))))
+ .processorGroups(
+ Collections.singletonList(
+ new ObservabilityPipelineConfigProcessorGroup()
+ .enabled(true)
+ .id("my-processor-group")
+ .include("service:my-service")
+ .inputs(
+ Collections.singletonList(
+ "datadog-agent-source"))
+ .processors(
+ Collections.singletonList(
+ new ObservabilityPipelineConfigProcessorItem(
+ new ObservabilityPipelineFilterProcessor()
+ .enabled(true)
+ .id("filter-processor")
+ .include("status:error")
+ .type(
+ ObservabilityPipelineFilterProcessorType
+ .FILTER))))))
+ .sources(
+ Collections.singletonList(
+ new ObservabilityPipelineConfigSourceItem(
+ new ObservabilityPipelineDatadogAgentSource()
+ .id("datadog-agent-source")
+ .type(
+ ObservabilityPipelineDatadogAgentSourceType
+ .DATADOG_AGENT)))))
+ .name("Pipeline with Splunk HEC endpoint_target"))
+ .type("pipelines"));
+
+ try {
+ ValidationResponse result = apiInstance.validatePipeline(body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling ObservabilityPipelinesApi#validatePipeline");
+ 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/v2/model/ObservabilityPipelineSplunkHecDestination.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestination.java
index 0648559ffe4..7ea0d23ec76 100644
--- a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestination.java
+++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestination.java
@@ -29,6 +29,7 @@
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_AUTO_EXTRACT_TIMESTAMP,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_BUFFER,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENCODING,
+ ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENDPOINT_TARGET,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENDPOINT_URL_KEY,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ID,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_INDEX,
@@ -52,6 +53,9 @@ public class ObservabilityPipelineSplunkHecDestination {
public static final String JSON_PROPERTY_ENCODING = "encoding";
private ObservabilityPipelineSplunkHecDestinationEncoding encoding;
+ public static final String JSON_PROPERTY_ENDPOINT_TARGET = "endpoint_target";
+ private ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget;
+
public static final String JSON_PROPERTY_ENDPOINT_URL_KEY = "endpoint_url_key";
private String endpointUrlKey;
@@ -102,7 +106,9 @@ public ObservabilityPipelineSplunkHecDestination autoExtractTimestamp(
/**
* If true, Splunk tries to extract timestamps from incoming log events. If
- * false, Splunk assigns the time the event was received.
+ * false, Splunk assigns the time the event was received. Only applies when
+ * endpoint_target is event; cannot be true when
+ * endpoint_target is raw.
*
* @return autoExtractTimestamp
*/
@@ -169,6 +175,35 @@ public void setEncoding(ObservabilityPipelineSplunkHecDestinationEncoding encodi
this.encoding = encoding;
}
+ public ObservabilityPipelineSplunkHecDestination endpointTarget(
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget) {
+ this.endpointTarget = endpointTarget;
+ this.unparsed |= !endpointTarget.isValid();
+ return this;
+ }
+
+ /**
+ * The Splunk HEC endpoint to send events to. Use event to send structured events to
+ * the /event endpoint, or raw to send the raw message to the /raw
+ * endpoint.
+ *
+ * @return endpointTarget
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ENDPOINT_TARGET)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public ObservabilityPipelineSplunkHecDestinationEndpointTarget getEndpointTarget() {
+ return endpointTarget;
+ }
+
+ public void setEndpointTarget(
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget) {
+ if (!endpointTarget.isValid()) {
+ this.unparsed = true;
+ }
+ this.endpointTarget = endpointTarget;
+ }
+
public ObservabilityPipelineSplunkHecDestination endpointUrlKey(String endpointUrlKey) {
this.endpointUrlKey = endpointUrlKey;
return this;
@@ -445,6 +480,8 @@ public boolean equals(Object o) {
observabilityPipelineSplunkHecDestination.autoExtractTimestamp)
&& Objects.equals(this.buffer, observabilityPipelineSplunkHecDestination.buffer)
&& Objects.equals(this.encoding, observabilityPipelineSplunkHecDestination.encoding)
+ && Objects.equals(
+ this.endpointTarget, observabilityPipelineSplunkHecDestination.endpointTarget)
&& Objects.equals(
this.endpointUrlKey, observabilityPipelineSplunkHecDestination.endpointUrlKey)
&& Objects.equals(this.id, observabilityPipelineSplunkHecDestination.id)
@@ -468,6 +505,7 @@ public int hashCode() {
autoExtractTimestamp,
buffer,
encoding,
+ endpointTarget,
endpointUrlKey,
id,
index,
@@ -489,6 +527,7 @@ public String toString() {
.append("\n");
sb.append(" buffer: ").append(toIndentedString(buffer)).append("\n");
sb.append(" encoding: ").append(toIndentedString(encoding)).append("\n");
+ sb.append(" endpointTarget: ").append(toIndentedString(endpointTarget)).append("\n");
sb.append(" endpointUrlKey: ").append(toIndentedString(endpointUrlKey)).append("\n");
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" index: ").append(toIndentedString(index)).append("\n");
diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestinationEndpointTarget.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestinationEndpointTarget.java
new file mode 100644
index 00000000000..f79e9dc25bd
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineSplunkHecDestinationEndpointTarget.java
@@ -0,0 +1,69 @@
+/*
+ * 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.v2.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;
+
+/**
+ * The Splunk HEC endpoint to send events to. Use event to send structured events to
+ * the /event endpoint, or raw to send the raw message to the /raw
+ * endpoint.
+ */
+@JsonSerialize(
+ using =
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget
+ .ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer.class)
+public class ObservabilityPipelineSplunkHecDestinationEndpointTarget extends ModelEnum {
+
+ private static final Set allowedValues =
+ new HashSet(Arrays.asList("event", "raw"));
+
+ public static final ObservabilityPipelineSplunkHecDestinationEndpointTarget EVENT =
+ new ObservabilityPipelineSplunkHecDestinationEndpointTarget("event");
+ public static final ObservabilityPipelineSplunkHecDestinationEndpointTarget RAW =
+ new ObservabilityPipelineSplunkHecDestinationEndpointTarget("raw");
+
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget(String value) {
+ super(value, allowedValues);
+ }
+
+ public static class ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer
+ extends StdSerializer {
+ public ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer(
+ Class t) {
+ super(t);
+ }
+
+ public ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer() {
+ this(null);
+ }
+
+ @Override
+ public void serialize(
+ ObservabilityPipelineSplunkHecDestinationEndpointTarget value,
+ JsonGenerator jgen,
+ SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeObject(value.value);
+ }
+ }
+
+ @JsonCreator
+ public static ObservabilityPipelineSplunkHecDestinationEndpointTarget fromValue(String value) {
+ return new ObservabilityPipelineSplunkHecDestinationEndpointTarget(value);
+ }
+}
diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.freeze
new file mode 100644
index 00000000000..c87fe539db9
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-08-03T12:48:21.947Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.json
new file mode 100644
index 00000000000..da822c4eabc
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_Splunk_HEC_destination_endpoint_target_returns_OK_response.json
@@ -0,0 +1,32 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"config\":{\"destinations\":[{\"endpoint_target\":\"raw\",\"id\":\"splunk-hec-destination\",\"inputs\":[\"my-processor-group\"],\"token_key\":\"SPLUNK_HEC_TOKEN\",\"type\":\"splunk_hec\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]},\"name\":\"Pipeline with Splunk HEC endpoint_target\"},\"type\":\"pipelines\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/obs-pipelines/pipelines/validate",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"errors\":[]}\n",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "73db9f94-ddcd-4bde-3cd5-7de25c4c7329"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature b/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature
index 8aa6ef36159..a2d4f82677a 100644
--- a/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature
+++ b/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature
@@ -239,6 +239,14 @@ Feature: Observability Pipelines
Then the response status is 200 OK
And the response "errors" has length 0
+ @team:DataDog/observability-pipelines
+ Scenario: Validate an observability pipeline with Splunk HEC destination endpoint_target returns "OK" response
+ Given new "ValidatePipeline" request
+ And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "splunk-hec-destination", "inputs": ["my-processor-group"], "type": "splunk_hec", "token_key": "SPLUNK_HEC_TOKEN", "endpoint_target": "raw"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Splunk HEC endpoint_target"}, "type": "pipelines"}}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "errors" has length 0
+
@team:DataDog/observability-pipelines
Scenario: Validate an observability pipeline with Splunk HEC destination token_strategy returns "OK" response
Given new "ValidatePipeline" request