diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml
index 203a2ac6cdf..2f8c17f5476 100644
--- a/.generator/schemas/v2/openapi.yaml
+++ b/.generator/schemas/v2/openapi.yaml
@@ -86174,6 +86174,229 @@ components:
example: "report_id"
type: string
type: object
+ STIXBundleRequest:
+ additionalProperties: {}
+ description: A STIX 2.1 bundle containing threat intelligence indicator objects.
+ properties:
+ id:
+ description: The STIX bundle identifier.
+ example: bundle--11111111-1111-4111-8111-111111111111
+ type: string
+ objects:
+ description: The indicator objects included in the bundle.
+ example:
+ - created: "2026-07-22T12:00:00Z"
+ id: indicator--22222222-2222-4222-8222-222222222222
+ modified: "2026-07-22T12:00:00Z"
+ pattern: "[ipv4-addr:value = '198.51.100.42']"
+ pattern_type: stix
+ spec_version: "2.1"
+ type: indicator
+ valid_from: "2026-07-22T12:00:00Z"
+ items:
+ $ref: "#/components/schemas/STIXIndicatorObject"
+ type: array
+ spec_version:
+ $ref: "#/components/schemas/STIXSpecVersion"
+ type:
+ $ref: "#/components/schemas/STIXBundleType"
+ required:
+ - type
+ - id
+ - objects
+ type: object
+ STIXBundleType:
+ description: The STIX object type for a bundle.
+ enum:
+ - bundle
+ example: bundle
+ type: string
+ x-enum-varnames:
+ - BUNDLE
+ STIXContentEncoding:
+ description: The content encoding applied to the request body.
+ enum:
+ - gzip
+ example: gzip
+ type: string
+ x-enum-varnames:
+ - GZIP
+ STIXIndicatorObject:
+ additionalProperties: {}
+ description: A STIX 2.1 indicator object.
+ properties:
+ confidence:
+ description: The confidence in the correctness of the indicator, from 0 through 100.
+ example: 80
+ format: int32
+ maximum: 100
+ minimum: 0
+ type: integer
+ created:
+ description: The time when the indicator was created.
+ example: "2026-07-22T12:00:00Z"
+ format: date-time
+ type: string
+ external_references:
+ description: Optional external reference metadata preserved with the indicator but not interpreted during ingestion.
+ items:
+ $ref: "#/components/schemas/STIXMetadataObject"
+ type: array
+ id:
+ description: The STIX indicator identifier.
+ example: indicator--22222222-2222-4222-8222-222222222222
+ type: string
+ indicator_types:
+ description: The open vocabulary terms that categorize the indicator.
+ example:
+ - malicious-activity
+ items:
+ type: string
+ type: array
+ kill_chain_phases:
+ description: Optional kill chain metadata preserved with the indicator but not interpreted during ingestion.
+ items:
+ $ref: "#/components/schemas/STIXMetadataObject"
+ type: array
+ labels:
+ description: Labels associated with the indicator.
+ example:
+ - synthetic
+ items:
+ type: string
+ type: array
+ modified:
+ description: The time when the indicator was last modified.
+ example: "2026-07-22T12:00:00Z"
+ format: date-time
+ type: string
+ object_marking_refs:
+ description: References to marking definition objects that apply to the indicator.
+ example:
+ - marking-definition--33333333-3333-4333-8333-333333333333
+ items:
+ type: string
+ type: array
+ pattern:
+ description: The STIX pattern that identifies the observable.
+ example: "[ipv4-addr:value = '198.51.100.42']"
+ type: string
+ pattern_type:
+ $ref: "#/components/schemas/STIXPatternType"
+ revoked:
+ description: Whether the indicator has been revoked.
+ example: false
+ type: boolean
+ spec_version:
+ $ref: "#/components/schemas/STIXSpecVersion"
+ type:
+ $ref: "#/components/schemas/STIXIndicatorType"
+ valid_from:
+ description: The time from which the indicator is considered valid.
+ example: "2026-07-22T12:00:00Z"
+ format: date-time
+ type: string
+ valid_until:
+ description: The time until which the indicator is considered valid.
+ example: "2027-07-22T12:00:00Z"
+ format: date-time
+ type: string
+ required:
+ - type
+ - id
+ - spec_version
+ - created
+ - modified
+ - pattern
+ - pattern_type
+ - valid_from
+ type: object
+ STIXIndicatorType:
+ description: The STIX object type for an indicator.
+ enum:
+ - indicator
+ example: indicator
+ type: string
+ x-enum-varnames:
+ - INDICATOR
+ STIXIngestResponse:
+ description: The response from a completed STIX ingestion request.
+ properties:
+ data:
+ $ref: "#/components/schemas/STIXIngestResponseData"
+ required:
+ - data
+ type: object
+ STIXIngestResponseAttributes:
+ description: Counters describing the result of the STIX ingestion request.
+ properties:
+ added:
+ description: The number of supported indicators added.
+ example: 1
+ format: int64
+ minimum: 0
+ type: integer
+ invalid:
+ description: The number of indicators with patterns that could not be parsed.
+ example: 0
+ format: int64
+ minimum: 0
+ type: integer
+ unsupported:
+ description: The number of unsupported objects or patterns.
+ example: 0
+ format: int64
+ minimum: 0
+ type: integer
+ required:
+ - added
+ - unsupported
+ - invalid
+ type: object
+ STIXIngestResponseData:
+ description: The JSON:API resource describing the completed STIX ingestion request.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/STIXIngestResponseAttributes"
+ id:
+ description: The normalized vendor identifier.
+ example: acme
+ type: string
+ type:
+ $ref: "#/components/schemas/STIXIngestResponseType"
+ required:
+ - type
+ - id
+ - attributes
+ type: object
+ STIXIngestResponseType:
+ description: The STIX ingestion resource type.
+ enum:
+ - threat-intel-stix-ingest
+ example: threat-intel-stix-ingest
+ type: string
+ x-enum-varnames:
+ - THREAT_INTEL_STIX_INGEST
+ STIXMetadataObject:
+ additionalProperties: {}
+ description: An opaque STIX metadata object.
+ type: object
+ STIXPatternType:
+ description: The supported STIX pattern language.
+ enum:
+ - stix
+ example: stix
+ type: string
+ x-enum-varnames:
+ - STIX
+ STIXSpecVersion:
+ description: The supported STIX specification version.
+ enum:
+ - "2.1"
+ example: "2.1"
+ type: string
+ x-enum-varnames:
+ - VERSION_2_1
SalesforceIncidentsOrganizationResponseAttributes:
description: Attributes of a Salesforce organization connected to the Datadog Salesforce integration.
properties:
@@ -181627,6 +181850,114 @@ paths:
operator: OR
permissions:
- security_monitoring_notification_profiles_write
+ /api/v2/security/threat-intel/stix:
+ post:
+ description: |-
+ Ingest a STIX 2.1 bundle containing threat intelligence indicators. Only indicator objects are supported. Supported indicator patterns contain IPv4 addresses, IPv6 addresses, domain names, or SHA-256 file hashes.
+
+ Unsupported objects and patterns increment the `unsupported` counter. Patterns that cannot be parsed increment the `invalid` counter. Processing is best effort, so valid supported indicators in the same bundle are still added.
+
+ A successful response means ingestion has completed. Reference-table materialization and enrichment happen asynchronously. Requests are limited to 50 MB and 10 requests per second per API key. Gzip-compressed request bodies are supported.
+ operationId: IngestStixThreatIntel
+ parameters:
+ - description: >-
+ Vendor identifier for the feed. The value must not exceed 10 characters. Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to underscores, and trims leading and trailing underscores.
+ example: acme
+ in: header
+ name: ti_vendor
+ required: true
+ schema:
+ maxLength: 10
+ minLength: 1
+ type: string
+ - description: Content encoding for the request body. Use gzip for a compressed STIX bundle.
+ in: header
+ name: Content-Encoding
+ required: false
+ schema:
+ $ref: "#/components/schemas/STIXContentEncoding"
+ requestBody:
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ id: bundle--11111111-1111-4111-8111-111111111111
+ objects:
+ - created: "2026-07-22T12:00:00Z"
+ id: indicator--22222222-2222-4222-8222-222222222222
+ modified: "2026-07-22T12:00:00Z"
+ pattern: "[ipv4-addr:value = '198.51.100.42']"
+ pattern_type: stix
+ spec_version: "2.1"
+ type: indicator
+ valid_from: "2026-07-22T12:00:00Z"
+ spec_version: "2.1"
+ type: bundle
+ schema:
+ $ref: "#/components/schemas/STIXBundleRequest"
+ description: >-
+ A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB. When `Content-Encoding: gzip` is used, the limit applies to the compressed bytes received.
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ added: 1
+ invalid: 0
+ unsupported: 0
+ id: acme
+ type: threat-intel-stix-ingest
+ schema:
+ $ref: "#/components/schemas/STIXIngestResponse"
+ description: OK
+ "400":
+ $ref: "#/components/responses/BadRequestResponse"
+ "401":
+ $ref: "#/components/responses/UnauthorizedResponse"
+ "403":
+ $ref: "#/components/responses/ForbiddenResponse"
+ "413":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/APIErrorResponse"
+ description: Payload Too Large
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ "502":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/APIErrorResponse"
+ description: Bad Gateway
+ "503":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/APIErrorResponse"
+ description: Service Unavailable
+ security:
+ - apiKeyAuth: []
+ appKeyAuth: []
+ - AuthZ:
+ - reference_tables_write
+ summary: Ingest STIX threat intelligence
+ tags:
+ - Threat Intelligence
+ x-codegen-request-body-name: body
+ x-permission:
+ operator: OR
+ permissions:
+ - reference_tables_write
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
/api/v2/security/vulnerabilities:
get:
deprecated: true
@@ -204776,6 +205107,8 @@ tags:
- description: |-
Search and manage flaky tests through Test Optimization. See the [Test Optimization page](https://docs.datadoghq.com/tests/) for more information.
name: Test Optimization
+ - description: Ingest and manage threat intelligence data for security enrichment and investigation.
+ name: Threat Intelligence
- description: |-
The usage metering API allows you to get hourly, daily, and
monthly usage across multiple facets of Datadog.
diff --git a/examples/v2/threat-intelligence/IngestStixThreatIntel.java b/examples/v2/threat-intelligence/IngestStixThreatIntel.java
new file mode 100644
index 00000000000..e2caab24d03
--- /dev/null
+++ b/examples/v2/threat-intelligence/IngestStixThreatIntel.java
@@ -0,0 +1,50 @@
+// Ingest STIX threat intelligence returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.ThreatIntelligenceApi;
+import com.datadog.api.client.v2.model.STIXBundleRequest;
+import com.datadog.api.client.v2.model.STIXBundleType;
+import com.datadog.api.client.v2.model.STIXIndicatorObject;
+import com.datadog.api.client.v2.model.STIXIndicatorType;
+import com.datadog.api.client.v2.model.STIXIngestResponse;
+import com.datadog.api.client.v2.model.STIXPatternType;
+import com.datadog.api.client.v2.model.STIXSpecVersion;
+import java.time.OffsetDateTime;
+import java.util.Collections;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ defaultClient.setUnstableOperationEnabled("v2.ingestStixThreatIntel", true);
+ ThreatIntelligenceApi apiInstance = new ThreatIntelligenceApi(defaultClient);
+
+ STIXBundleRequest body =
+ new STIXBundleRequest()
+ .id("bundle--44444444-4444-4444-8444-444444444444")
+ .objects(
+ Collections.singletonList(
+ new STIXIndicatorObject()
+ .created(OffsetDateTime.parse("2026-07-22T12:00:00Z"))
+ .id("indicator--55555555-5555-4555-8555-555555555555")
+ .modified(OffsetDateTime.parse("2026-07-22T12:00:00Z"))
+ .pattern("[ipv4-addr:value = '198.51.100.42']")
+ .patternType(STIXPatternType.STIX)
+ .specVersion(STIXSpecVersion.VERSION_2_1)
+ .type(STIXIndicatorType.INDICATOR)
+ .validFrom(OffsetDateTime.parse("2026-07-22T12:00:00Z"))))
+ .specVersion(STIXSpecVersion.VERSION_2_1)
+ .type(STIXBundleType.BUNDLE);
+
+ try {
+ STIXIngestResponse result = apiInstance.ingestStixThreatIntel("Acme-Inc", body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling ThreatIntelligenceApi#ingestStixThreatIntel");
+ 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/ApiClient.java b/src/main/java/com/datadog/api/client/ApiClient.java
index 42f44708488..c658629b851 100644
--- a/src/main/java/com/datadog/api/client/ApiClient.java
+++ b/src/main/java/com/datadog/api/client/ApiClient.java
@@ -1218,6 +1218,7 @@ public class ApiClient {
put("v2.createScorecardOutcomesBatch", false);
put("v2.getEntityRiskScore", false);
put("v2.listEntityRiskScores", false);
+ put("v2.ingestStixThreatIntel", false);
put("v2.createSLOReportJob", false);
put("v2.getSLOReport", false);
put("v2.getSLOReportJobStatus", false);
diff --git a/src/main/java/com/datadog/api/client/v2/api/ThreatIntelligenceApi.java b/src/main/java/com/datadog/api/client/v2/api/ThreatIntelligenceApi.java
new file mode 100644
index 00000000000..913f665151f
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/api/ThreatIntelligenceApi.java
@@ -0,0 +1,330 @@
+package com.datadog.api.client.v2.api;
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.ApiResponse;
+import com.datadog.api.client.Pair;
+import com.datadog.api.client.v2.model.STIXBundleRequest;
+import com.datadog.api.client.v2.model.STIXContentEncoding;
+import com.datadog.api.client.v2.model.STIXIngestResponse;
+import jakarta.ws.rs.client.Invocation;
+import jakarta.ws.rs.core.GenericType;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class ThreatIntelligenceApi {
+ private ApiClient apiClient;
+
+ public ThreatIntelligenceApi() {
+ this(ApiClient.getDefaultApiClient());
+ }
+
+ public ThreatIntelligenceApi(ApiClient apiClient) {
+ this.apiClient = apiClient;
+ }
+
+ /**
+ * Get the API client.
+ *
+ * @return API client
+ */
+ public ApiClient getApiClient() {
+ return apiClient;
+ }
+
+ /**
+ * Set the API client.
+ *
+ * @param apiClient an instance of API client
+ */
+ public void setApiClient(ApiClient apiClient) {
+ this.apiClient = apiClient;
+ }
+
+ /** Manage optional parameters to ingestStixThreatIntel. */
+ public static class IngestStixThreatIntelOptionalParameters {
+ private STIXContentEncoding contentEncoding;
+
+ /**
+ * Set contentEncoding.
+ *
+ * @param contentEncoding Content encoding for the request body. Use gzip for a compressed STIX
+ * bundle. (optional)
+ * @return IngestStixThreatIntelOptionalParameters
+ */
+ public IngestStixThreatIntelOptionalParameters contentEncoding(
+ STIXContentEncoding contentEncoding) {
+ this.contentEncoding = contentEncoding;
+ return this;
+ }
+ }
+
+ /**
+ * Ingest STIX threat intelligence.
+ *
+ *
See {@link #ingestStixThreatIntelWithHttpInfo}.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @return STIXIngestResponse
+ * @throws ApiException if fails to make API call
+ */
+ public STIXIngestResponse ingestStixThreatIntel(String tiVendor, STIXBundleRequest body)
+ throws ApiException {
+ return ingestStixThreatIntelWithHttpInfo(
+ tiVendor, body, new IngestStixThreatIntelOptionalParameters())
+ .getData();
+ }
+
+ /**
+ * Ingest STIX threat intelligence.
+ *
+ *
See {@link #ingestStixThreatIntelWithHttpInfoAsync}.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @return CompletableFuture<STIXIngestResponse>
+ */
+ public CompletableFuture ingestStixThreatIntelAsync(
+ String tiVendor, STIXBundleRequest body) {
+ return ingestStixThreatIntelWithHttpInfoAsync(
+ tiVendor, body, new IngestStixThreatIntelOptionalParameters())
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Ingest STIX threat intelligence.
+ *
+ * See {@link #ingestStixThreatIntelWithHttpInfo}.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @param parameters Optional parameters for the request.
+ * @return STIXIngestResponse
+ * @throws ApiException if fails to make API call
+ */
+ public STIXIngestResponse ingestStixThreatIntel(
+ String tiVendor, STIXBundleRequest body, IngestStixThreatIntelOptionalParameters parameters)
+ throws ApiException {
+ return ingestStixThreatIntelWithHttpInfo(tiVendor, body, parameters).getData();
+ }
+
+ /**
+ * Ingest STIX threat intelligence.
+ *
+ *
See {@link #ingestStixThreatIntelWithHttpInfoAsync}.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @param parameters Optional parameters for the request.
+ * @return CompletableFuture<STIXIngestResponse>
+ */
+ public CompletableFuture ingestStixThreatIntelAsync(
+ String tiVendor, STIXBundleRequest body, IngestStixThreatIntelOptionalParameters parameters) {
+ return ingestStixThreatIntelWithHttpInfoAsync(tiVendor, body, parameters)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Ingest a STIX 2.1 bundle containing threat intelligence indicators. Only indicator objects are
+ * supported. Supported indicator patterns contain IPv4 addresses, IPv6 addresses, domain names,
+ * or SHA-256 file hashes.
+ *
+ * Unsupported objects and patterns increment the unsupported counter. Patterns
+ * that cannot be parsed increment the invalid counter. Processing is best effort, so
+ * valid supported indicators in the same bundle are still added.
+ *
+ *
A successful response means ingestion has completed. Reference-table materialization and
+ * enrichment happen asynchronously. Requests are limited to 50 MB and 10 requests per second per
+ * API key. Gzip-compressed request bodies are supported.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @param parameters Optional parameters for the request.
+ * @return ApiResponse<STIXIngestResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK | - |
+ * | 400 | Bad Request | - |
+ * | 401 | Unauthorized | - |
+ * | 403 | Forbidden | - |
+ * | 413 | Payload Too Large | - |
+ * | 429 | Too many requests | - |
+ * | 502 | Bad Gateway | - |
+ * | 503 | Service Unavailable | - |
+ *
+ */
+ public ApiResponse ingestStixThreatIntelWithHttpInfo(
+ String tiVendor, STIXBundleRequest body, IngestStixThreatIntelOptionalParameters parameters)
+ throws ApiException {
+ // Check if unstable operation is enabled
+ String operationId = "ingestStixThreatIntel";
+ if (apiClient.isUnstableOperationEnabled("v2." + operationId)) {
+ apiClient.getLogger().warning(String.format("Using unstable operation '%s'", operationId));
+ } else {
+ throw new ApiException(0, String.format("Unstable operation '%s' is disabled", operationId));
+ }
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'tiVendor' is set
+ if (tiVendor == null) {
+ throw new ApiException(
+ 400, "Missing the required parameter 'tiVendor' when calling ingestStixThreatIntel");
+ }
+
+ // verify the required parameter 'body' is set
+ if (body == null) {
+ throw new ApiException(
+ 400, "Missing the required parameter 'body' when calling ingestStixThreatIntel");
+ }
+ STIXContentEncoding contentEncoding = parameters.contentEncoding;
+ // create path and map variables
+ String localVarPath = "/api/v2/security/threat-intel/stix";
+
+ Map localVarHeaderParams = new HashMap();
+
+ if (tiVendor != null) {
+ localVarHeaderParams.put("ti_vendor", apiClient.parameterToString(tiVendor));
+ }
+ if (contentEncoding != null) {
+ localVarHeaderParams.put("Content-Encoding", apiClient.parameterToString(contentEncoding));
+ }
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.ThreatIntelligenceApi.ingestStixThreatIntel",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"});
+ return apiClient.invokeAPI(
+ "POST",
+ builder,
+ localVarHeaderParams,
+ new String[] {"application/json"},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Ingest STIX threat intelligence.
+ *
+ * See {@link #ingestStixThreatIntelWithHttpInfo}.
+ *
+ * @param tiVendor Vendor identifier for the feed. The value must not exceed 10 characters.
+ * Datadog normalizes the accepted value to lowercase, converts non-alphanumeric characters to
+ * underscores, and trims leading and trailing underscores. (required)
+ * @param body A STIX 2.1 bundle containing indicator objects. The maximum request size is 50 MB.
+ * When Content-Encoding: gzip is used, the limit applies to the compressed bytes
+ * received. (required)
+ * @param parameters Optional parameters for the request.
+ * @return CompletableFuture<ApiResponse<STIXIngestResponse>>
+ */
+ public CompletableFuture> ingestStixThreatIntelWithHttpInfoAsync(
+ String tiVendor, STIXBundleRequest body, IngestStixThreatIntelOptionalParameters parameters) {
+ // Check if unstable operation is enabled
+ String operationId = "ingestStixThreatIntel";
+ if (apiClient.isUnstableOperationEnabled("v2." + operationId)) {
+ apiClient.getLogger().warning(String.format("Using unstable operation '%s'", operationId));
+ } else {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(0, String.format("Unstable operation '%s' is disabled", operationId)));
+ return result;
+ }
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'tiVendor' is set
+ if (tiVendor == null) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400, "Missing the required parameter 'tiVendor' when calling ingestStixThreatIntel"));
+ return result;
+ }
+
+ // verify the required parameter 'body' is set
+ if (body == null) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400, "Missing the required parameter 'body' when calling ingestStixThreatIntel"));
+ return result;
+ }
+ STIXContentEncoding contentEncoding = parameters.contentEncoding;
+ // create path and map variables
+ String localVarPath = "/api/v2/security/threat-intel/stix";
+
+ Map localVarHeaderParams = new HashMap();
+
+ if (tiVendor != null) {
+ localVarHeaderParams.put("ti_vendor", apiClient.parameterToString(tiVendor));
+ }
+ if (contentEncoding != null) {
+ localVarHeaderParams.put("Content-Encoding", apiClient.parameterToString(contentEncoding));
+ }
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.ThreatIntelligenceApi.ingestStixThreatIntel",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"});
+ } catch (ApiException ex) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "POST",
+ builder,
+ localVarHeaderParams,
+ new String[] {"application/json"},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/STIXBundleRequest.java b/src/main/java/com/datadog/api/client/v2/model/STIXBundleRequest.java
new file mode 100644
index 00000000000..f5fb1f47acb
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/STIXBundleRequest.java
@@ -0,0 +1,257 @@
+/*
+ * 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.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/** A STIX 2.1 bundle containing threat intelligence indicator objects. */
+@JsonPropertyOrder({
+ STIXBundleRequest.JSON_PROPERTY_ID,
+ STIXBundleRequest.JSON_PROPERTY_OBJECTS,
+ STIXBundleRequest.JSON_PROPERTY_SPEC_VERSION,
+ STIXBundleRequest.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class STIXBundleRequest {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ID = "id";
+ private String id;
+
+ public static final String JSON_PROPERTY_OBJECTS = "objects";
+ private List objects = new ArrayList<>();
+
+ public static final String JSON_PROPERTY_SPEC_VERSION = "spec_version";
+ private STIXSpecVersion specVersion;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private STIXBundleType type;
+
+ public STIXBundleRequest() {}
+
+ @JsonCreator
+ public STIXBundleRequest(
+ @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id,
+ @JsonProperty(required = true, value = JSON_PROPERTY_OBJECTS)
+ List objects,
+ @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) STIXBundleType type) {
+ this.id = id;
+ this.objects = objects;
+ for (STIXIndicatorObject item : objects) {
+ this.unparsed |= item.unparsed;
+ }
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ }
+
+ public STIXBundleRequest id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * The STIX bundle identifier.
+ *
+ * @return id
+ */
+ @JsonProperty(JSON_PROPERTY_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public STIXBundleRequest objects(List objects) {
+ this.objects = objects;
+ for (STIXIndicatorObject item : objects) {
+ this.unparsed |= item.unparsed;
+ }
+ return this;
+ }
+
+ public STIXBundleRequest addObjectsItem(STIXIndicatorObject objectsItem) {
+ this.objects.add(objectsItem);
+ this.unparsed |= objectsItem.unparsed;
+ return this;
+ }
+
+ /**
+ * The indicator objects included in the bundle.
+ *
+ * @return objects
+ */
+ @JsonProperty(JSON_PROPERTY_OBJECTS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public List getObjects() {
+ return objects;
+ }
+
+ public void setObjects(List objects) {
+ this.objects = objects;
+ if (objects != null) {
+ for (STIXIndicatorObject item : objects) {
+ this.unparsed |= item.unparsed;
+ }
+ }
+ }
+
+ public STIXBundleRequest specVersion(STIXSpecVersion specVersion) {
+ this.specVersion = specVersion;
+ this.unparsed |= !specVersion.isValid();
+ return this;
+ }
+
+ /**
+ * The supported STIX specification version.
+ *
+ * @return specVersion
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_SPEC_VERSION)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public STIXSpecVersion getSpecVersion() {
+ return specVersion;
+ }
+
+ public void setSpecVersion(STIXSpecVersion specVersion) {
+ if (!specVersion.isValid()) {
+ this.unparsed = true;
+ }
+ this.specVersion = specVersion;
+ }
+
+ public STIXBundleRequest type(STIXBundleType type) {
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ return this;
+ }
+
+ /**
+ * The STIX object type for a bundle.
+ *
+ * @return type
+ */
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public STIXBundleType getType() {
+ return type;
+ }
+
+ public void setType(STIXBundleType type) {
+ if (!type.isValid()) {
+ this.unparsed = true;
+ }
+ this.type = type;
+ }
+
+ /**
+ * A container for additional, undeclared properties. This is a holder for any undeclared
+ * properties as specified with the 'additionalProperties' keyword in the OAS document.
+ */
+ private Map additionalProperties;
+
+ /**
+ * Set the additional (undeclared) property with the specified name and value. If the property
+ * does not already exist, create it otherwise replace it.
+ *
+ * @param key The arbitrary key to set
+ * @param value The associated value
+ * @return STIXBundleRequest
+ */
+ @JsonAnySetter
+ public STIXBundleRequest putAdditionalProperty(String key, Object value) {
+ if (this.additionalProperties == null) {
+ this.additionalProperties = new HashMap();
+ }
+ this.additionalProperties.put(key, value);
+ return this;
+ }
+
+ /**
+ * Return the additional (undeclared) property.
+ *
+ * @return The additional properties
+ */
+ @JsonAnyGetter
+ public Map getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ /**
+ * Return the additional (undeclared) property with the specified name.
+ *
+ * @param key The arbitrary key to get
+ * @return The specific additional property for the given key
+ */
+ public Object getAdditionalProperty(String key) {
+ if (this.additionalProperties == null) {
+ return null;
+ }
+ return this.additionalProperties.get(key);
+ }
+
+ /** Return true if this STIXBundleRequest object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ STIXBundleRequest stixBundleRequest = (STIXBundleRequest) o;
+ return Objects.equals(this.id, stixBundleRequest.id)
+ && Objects.equals(this.objects, stixBundleRequest.objects)
+ && Objects.equals(this.specVersion, stixBundleRequest.specVersion)
+ && Objects.equals(this.type, stixBundleRequest.type)
+ && Objects.equals(this.additionalProperties, stixBundleRequest.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, objects, specVersion, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class STIXBundleRequest {\n");
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append(" objects: ").append(toIndentedString(objects)).append("\n");
+ sb.append(" specVersion: ").append(toIndentedString(specVersion)).append("\n");
+ sb.append(" type: ").append(toIndentedString(type)).append("\n");
+ sb.append(" additionalProperties: ")
+ .append(toIndentedString(additionalProperties))
+ .append("\n");
+ sb.append('}');
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/STIXBundleType.java b/src/main/java/com/datadog/api/client/v2/model/STIXBundleType.java
new file mode 100644
index 00000000000..c178f12cb60
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/STIXBundleType.java
@@ -0,0 +1,53 @@
+/*
+ * 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 STIX object type for a bundle. */
+@JsonSerialize(using = STIXBundleType.STIXBundleTypeSerializer.class)
+public class STIXBundleType extends ModelEnum {
+
+ private static final Set allowedValues = new HashSet(Arrays.asList("bundle"));
+
+ public static final STIXBundleType BUNDLE = new STIXBundleType("bundle");
+
+ STIXBundleType(String value) {
+ super(value, allowedValues);
+ }
+
+ public static class STIXBundleTypeSerializer extends StdSerializer {
+ public STIXBundleTypeSerializer(Class t) {
+ super(t);
+ }
+
+ public STIXBundleTypeSerializer() {
+ this(null);
+ }
+
+ @Override
+ public void serialize(STIXBundleType value, JsonGenerator jgen, SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeObject(value.value);
+ }
+ }
+
+ @JsonCreator
+ public static STIXBundleType fromValue(String value) {
+ return new STIXBundleType(value);
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/STIXContentEncoding.java b/src/main/java/com/datadog/api/client/v2/model/STIXContentEncoding.java
new file mode 100644
index 00000000000..7eeda45bb5b
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/STIXContentEncoding.java
@@ -0,0 +1,54 @@
+/*
+ * 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 content encoding applied to the request body. */
+@JsonSerialize(using = STIXContentEncoding.STIXContentEncodingSerializer.class)
+public class STIXContentEncoding extends ModelEnum {
+
+ private static final Set allowedValues = new HashSet(Arrays.asList("gzip"));
+
+ public static final STIXContentEncoding GZIP = new STIXContentEncoding("gzip");
+
+ STIXContentEncoding(String value) {
+ super(value, allowedValues);
+ }
+
+ public static class STIXContentEncodingSerializer extends StdSerializer {
+ public STIXContentEncodingSerializer(Class t) {
+ super(t);
+ }
+
+ public STIXContentEncodingSerializer() {
+ this(null);
+ }
+
+ @Override
+ public void serialize(
+ STIXContentEncoding value, JsonGenerator jgen, SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeObject(value.value);
+ }
+ }
+
+ @JsonCreator
+ public static STIXContentEncoding fromValue(String value) {
+ return new STIXContentEncoding(value);
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/STIXIndicatorObject.java b/src/main/java/com/datadog/api/client/v2/model/STIXIndicatorObject.java
new file mode 100644
index 00000000000..eab071ef8ec
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/STIXIndicatorObject.java
@@ -0,0 +1,635 @@
+/*
+ * 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.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/** A STIX 2.1 indicator object. */
+@JsonPropertyOrder({
+ STIXIndicatorObject.JSON_PROPERTY_CONFIDENCE,
+ STIXIndicatorObject.JSON_PROPERTY_CREATED,
+ STIXIndicatorObject.JSON_PROPERTY_EXTERNAL_REFERENCES,
+ STIXIndicatorObject.JSON_PROPERTY_ID,
+ STIXIndicatorObject.JSON_PROPERTY_INDICATOR_TYPES,
+ STIXIndicatorObject.JSON_PROPERTY_KILL_CHAIN_PHASES,
+ STIXIndicatorObject.JSON_PROPERTY_LABELS,
+ STIXIndicatorObject.JSON_PROPERTY_MODIFIED,
+ STIXIndicatorObject.JSON_PROPERTY_OBJECT_MARKING_REFS,
+ STIXIndicatorObject.JSON_PROPERTY_PATTERN,
+ STIXIndicatorObject.JSON_PROPERTY_PATTERN_TYPE,
+ STIXIndicatorObject.JSON_PROPERTY_REVOKED,
+ STIXIndicatorObject.JSON_PROPERTY_SPEC_VERSION,
+ STIXIndicatorObject.JSON_PROPERTY_TYPE,
+ STIXIndicatorObject.JSON_PROPERTY_VALID_FROM,
+ STIXIndicatorObject.JSON_PROPERTY_VALID_UNTIL
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class STIXIndicatorObject {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_CONFIDENCE = "confidence";
+ private Integer confidence;
+
+ public static final String JSON_PROPERTY_CREATED = "created";
+ private OffsetDateTime created;
+
+ public static final String JSON_PROPERTY_EXTERNAL_REFERENCES = "external_references";
+ private List