From 05b62f4d661c4250b701bbd976c8b5fc109dfd79 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Mon, 2 Nov 2026 18:49:35 +0000 Subject: [PATCH] Regenerate client from commit 741d2b9 of spec repo --- .generator/schemas/v2/openapi.yaml | 19 +++++ .../UploadCustomCostsFile_3323862424.java | 41 ++++++++++ .../client/v2/api/CloudCostManagementApi.java | 77 +++++++++++++++++-- .../v2/model/CustomCostsFileMetadata.java | 30 +++++++- .../CustomCostsFileMetadataWithContent.java | 30 +++++++- .../v2/api/cloud_cost_management.feature | 9 +++ .../test-runner-data/manifest.json | 7 ++ ...ovider-file-returns-accepted-response.json | 57 ++++++++++++++ .../v2/cloud-cost-management.json | 45 +++++++++++ 9 files changed, 307 insertions(+), 8 deletions(-) create mode 100644 examples/v2/cloud-cost-management/UploadCustomCostsFile_3323862424.java create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-marked-as-an-ai-provider-file-returns-accepted-response.json diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 24d89e059e3..f7368511bc9 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -29597,6 +29597,10 @@ components: CustomCostsFileMetadata: description: Schema of a Custom Costs metadata. properties: + ai_provider: + description: Whether the Custom Costs file contains the costs of an AI provider. + example: false + type: boolean billed_cost: description: Total cost in the cost file. example: 100.50 @@ -29646,6 +29650,10 @@ components: CustomCostsFileMetadataWithContent: description: Schema of a cost file's metadata. properties: + ai_provider: + description: Whether the Custom Costs file contains the costs of an AI provider. + example: false + type: boolean billed_cost: description: Total cost in the cost file. example: 100.50 @@ -162449,6 +162457,7 @@ paths: value: data: - attributes: + ai_provider: false billed_cost: 100.5 billing_currency: USD charge_period: @@ -162496,6 +162505,14 @@ paths: put: description: Upload a Custom Costs file. operationId: UploadCustomCostsFile + parameters: + - description: Whether the uploaded file contains the costs of an AI provider. + in: query + name: ai_provider + required: false + schema: + default: false + type: boolean requestBody: content: application/json: @@ -162519,6 +162536,7 @@ paths: value: data: attributes: + ai_provider: false billed_cost: 100.5 billing_currency: USD charge_period: @@ -162607,6 +162625,7 @@ paths: value: data: attributes: + ai_provider: false billed_cost: 100.5 billing_currency: USD charge_period: diff --git a/examples/v2/cloud-cost-management/UploadCustomCostsFile_3323862424.java b/examples/v2/cloud-cost-management/UploadCustomCostsFile_3323862424.java new file mode 100644 index 00000000000..7971085e45f --- /dev/null +++ b/examples/v2/cloud-cost-management/UploadCustomCostsFile_3323862424.java @@ -0,0 +1,41 @@ +// Upload Custom Costs file marked as an AI provider file returns "Accepted" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.UploadCustomCostsFileOptionalParameters; +import com.datadog.api.client.v2.model.CustomCostsFileLineItem; +import com.datadog.api.client.v2.model.CustomCostsFileUploadResponse; +import java.util.Collections; +import java.util.List; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + List body = + Collections.singletonList( + new CustomCostsFileLineItem() + .providerName("my_ai_provider") + .chargePeriodStart("2026-10-01") + .chargePeriodEnd("2026-10-31") + .chargeDescription("my_description") + .billedCost(250.0) + .billingCurrency("USD")); + + try { + CustomCostsFileUploadResponse result = + apiInstance.uploadCustomCostsFile( + body, new UploadCustomCostsFileOptionalParameters().aiProvider(true)); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#uploadCustomCostsFile"); + 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/api/CloudCostManagementApi.java b/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java index 55d20500240..9a6766d078e 100644 --- a/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java @@ -12823,6 +12823,23 @@ public CompletableFuture> updateUnitCostWithHttpIn new GenericType() {}); } + /** Manage optional parameters to uploadCustomCostsFile. */ + public static class UploadCustomCostsFileOptionalParameters { + private Boolean aiProvider; + + /** + * Set aiProvider. + * + * @param aiProvider Whether the uploaded file contains the costs of an AI provider. (optional, + * default to false) + * @return UploadCustomCostsFileOptionalParameters + */ + public UploadCustomCostsFileOptionalParameters aiProvider(Boolean aiProvider) { + this.aiProvider = aiProvider; + return this; + } + } + /** * Upload Custom Costs file. * @@ -12834,7 +12851,8 @@ public CompletableFuture> updateUnitCostWithHttpIn */ public CustomCostsFileUploadResponse uploadCustomCostsFile(List body) throws ApiException { - return uploadCustomCostsFileWithHttpInfo(body).getData(); + return uploadCustomCostsFileWithHttpInfo(body, new UploadCustomCostsFileOptionalParameters()) + .getData(); } /** @@ -12847,7 +12865,42 @@ public CustomCostsFileUploadResponse uploadCustomCostsFile(List uploadCustomCostsFileAsync( List body) { - return uploadCustomCostsFileWithHttpInfoAsync(body) + return uploadCustomCostsFileWithHttpInfoAsync( + body, new UploadCustomCostsFileOptionalParameters()) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * Upload Custom Costs file. + * + *

See {@link #uploadCustomCostsFileWithHttpInfo}. + * + * @param body (required) + * @param parameters Optional parameters for the request. + * @return CustomCostsFileUploadResponse + * @throws ApiException if fails to make API call + */ + public CustomCostsFileUploadResponse uploadCustomCostsFile( + List body, UploadCustomCostsFileOptionalParameters parameters) + throws ApiException { + return uploadCustomCostsFileWithHttpInfo(body, parameters).getData(); + } + + /** + * Upload Custom Costs file. + * + *

See {@link #uploadCustomCostsFileWithHttpInfoAsync}. + * + * @param body (required) + * @param parameters Optional parameters for the request. + * @return CompletableFuture<CustomCostsFileUploadResponse> + */ + public CompletableFuture uploadCustomCostsFileAsync( + List body, UploadCustomCostsFileOptionalParameters parameters) { + return uploadCustomCostsFileWithHttpInfoAsync(body, parameters) .thenApply( response -> { return response.getData(); @@ -12858,6 +12911,7 @@ public CompletableFuture uploadCustomCostsFileAsy * Upload a Custom Costs file. * * @param body (required) + * @param parameters Optional parameters for the request. * @return ApiResponse<CustomCostsFileUploadResponse> * @throws ApiException if fails to make API call * @http.response.details @@ -12871,7 +12925,8 @@ public CompletableFuture uploadCustomCostsFileAsy * */ public ApiResponse uploadCustomCostsFileWithHttpInfo( - List body) throws ApiException { + List body, UploadCustomCostsFileOptionalParameters parameters) + throws ApiException { Object localVarPostBody = body; // verify the required parameter 'body' is set @@ -12879,16 +12934,20 @@ public ApiResponse uploadCustomCostsFileWithHttpI throw new ApiException( 400, "Missing the required parameter 'body' when calling uploadCustomCostsFile"); } + Boolean aiProvider = parameters.aiProvider; // create path and map variables String localVarPath = "/api/v2/cost/custom_costs"; + List localVarQueryParams = new ArrayList(); Map localVarHeaderParams = new HashMap(); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "ai_provider", aiProvider)); + Invocation.Builder builder = apiClient.createBuilder( "v2.CloudCostManagementApi.uploadCustomCostsFile", localVarPath, - new ArrayList(), + localVarQueryParams, localVarHeaderParams, new HashMap(), new String[] {"application/json"}, @@ -12910,10 +12969,12 @@ public ApiResponse uploadCustomCostsFileWithHttpI *

See {@link #uploadCustomCostsFileWithHttpInfo}. * * @param body (required) + * @param parameters Optional parameters for the request. * @return CompletableFuture<ApiResponse<CustomCostsFileUploadResponse>> */ public CompletableFuture> - uploadCustomCostsFileWithHttpInfoAsync(List body) { + uploadCustomCostsFileWithHttpInfoAsync( + List body, UploadCustomCostsFileOptionalParameters parameters) { Object localVarPostBody = body; // verify the required parameter 'body' is set @@ -12925,18 +12986,22 @@ public ApiResponse uploadCustomCostsFileWithHttpI 400, "Missing the required parameter 'body' when calling uploadCustomCostsFile")); return result; } + Boolean aiProvider = parameters.aiProvider; // create path and map variables String localVarPath = "/api/v2/cost/custom_costs"; + List localVarQueryParams = new ArrayList(); Map localVarHeaderParams = new HashMap(); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "ai_provider", aiProvider)); + Invocation.Builder builder; try { builder = apiClient.createBuilder( "v2.CloudCostManagementApi.uploadCustomCostsFile", localVarPath, - new ArrayList(), + localVarQueryParams, localVarHeaderParams, new HashMap(), new String[] {"application/json"}, diff --git a/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadata.java b/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadata.java index 46186decd3b..bb53c045d8f 100644 --- a/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadata.java +++ b/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadata.java @@ -20,6 +20,7 @@ /** Schema of a Custom Costs metadata. */ @JsonPropertyOrder({ + CustomCostsFileMetadata.JSON_PROPERTY_AI_PROVIDER, CustomCostsFileMetadata.JSON_PROPERTY_BILLED_COST, CustomCostsFileMetadata.JSON_PROPERTY_BILLING_CURRENCY, CustomCostsFileMetadata.JSON_PROPERTY_CHARGE_PERIOD, @@ -33,6 +34,9 @@ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") public class CustomCostsFileMetadata { @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AI_PROVIDER = "ai_provider"; + private Boolean aiProvider; + public static final String JSON_PROPERTY_BILLED_COST = "billed_cost"; private Double billedCost; @@ -57,6 +61,27 @@ public class CustomCostsFileMetadata { public static final String JSON_PROPERTY_UPLOADED_BY = "uploaded_by"; private CustomCostsUser uploadedBy; + public CustomCostsFileMetadata aiProvider(Boolean aiProvider) { + this.aiProvider = aiProvider; + return this; + } + + /** + * Whether the Custom Costs file contains the costs of an AI provider. + * + * @return aiProvider + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AI_PROVIDER) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getAiProvider() { + return aiProvider; + } + + public void setAiProvider(Boolean aiProvider) { + this.aiProvider = aiProvider; + } + public CustomCostsFileMetadata billedCost(Double billedCost) { this.billedCost = billedCost; return this; @@ -297,7 +322,8 @@ public boolean equals(Object o) { return false; } CustomCostsFileMetadata customCostsFileMetadata = (CustomCostsFileMetadata) o; - return Objects.equals(this.billedCost, customCostsFileMetadata.billedCost) + return Objects.equals(this.aiProvider, customCostsFileMetadata.aiProvider) + && Objects.equals(this.billedCost, customCostsFileMetadata.billedCost) && Objects.equals(this.billingCurrency, customCostsFileMetadata.billingCurrency) && Objects.equals(this.chargePeriod, customCostsFileMetadata.chargePeriod) && Objects.equals(this.name, customCostsFileMetadata.name) @@ -311,6 +337,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( + aiProvider, billedCost, billingCurrency, chargePeriod, @@ -326,6 +353,7 @@ public int hashCode() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class CustomCostsFileMetadata {\n"); + sb.append(" aiProvider: ").append(toIndentedString(aiProvider)).append("\n"); sb.append(" billedCost: ").append(toIndentedString(billedCost)).append("\n"); sb.append(" billingCurrency: ").append(toIndentedString(billingCurrency)).append("\n"); sb.append(" chargePeriod: ").append(toIndentedString(chargePeriod)).append("\n"); diff --git a/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadataWithContent.java b/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadataWithContent.java index 34dc7ea97a2..90140b2f412 100644 --- a/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadataWithContent.java +++ b/src/main/java/com/datadog/api/client/v2/model/CustomCostsFileMetadataWithContent.java @@ -20,6 +20,7 @@ /** Schema of a cost file's metadata. */ @JsonPropertyOrder({ + CustomCostsFileMetadataWithContent.JSON_PROPERTY_AI_PROVIDER, CustomCostsFileMetadataWithContent.JSON_PROPERTY_BILLED_COST, CustomCostsFileMetadataWithContent.JSON_PROPERTY_BILLING_CURRENCY, CustomCostsFileMetadataWithContent.JSON_PROPERTY_CHARGE_PERIOD, @@ -34,6 +35,9 @@ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") public class CustomCostsFileMetadataWithContent { @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AI_PROVIDER = "ai_provider"; + private Boolean aiProvider; + public static final String JSON_PROPERTY_BILLED_COST = "billed_cost"; private Double billedCost; @@ -61,6 +65,27 @@ public class CustomCostsFileMetadataWithContent { public static final String JSON_PROPERTY_UPLOADED_BY = "uploaded_by"; private CustomCostsUser uploadedBy; + public CustomCostsFileMetadataWithContent aiProvider(Boolean aiProvider) { + this.aiProvider = aiProvider; + return this; + } + + /** + * Whether the Custom Costs file contains the costs of an AI provider. + * + * @return aiProvider + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AI_PROVIDER) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getAiProvider() { + return aiProvider; + } + + public void setAiProvider(Boolean aiProvider) { + this.aiProvider = aiProvider; + } + public CustomCostsFileMetadataWithContent billedCost(Double billedCost) { this.billedCost = billedCost; return this; @@ -343,7 +368,8 @@ public boolean equals(Object o) { } CustomCostsFileMetadataWithContent customCostsFileMetadataWithContent = (CustomCostsFileMetadataWithContent) o; - return Objects.equals(this.billedCost, customCostsFileMetadataWithContent.billedCost) + return Objects.equals(this.aiProvider, customCostsFileMetadataWithContent.aiProvider) + && Objects.equals(this.billedCost, customCostsFileMetadataWithContent.billedCost) && Objects.equals(this.billingCurrency, customCostsFileMetadataWithContent.billingCurrency) && Objects.equals(this.chargePeriod, customCostsFileMetadataWithContent.chargePeriod) && Objects.equals(this.content, customCostsFileMetadataWithContent.content) @@ -359,6 +385,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( + aiProvider, billedCost, billingCurrency, chargePeriod, @@ -375,6 +402,7 @@ public int hashCode() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class CustomCostsFileMetadataWithContent {\n"); + sb.append(" aiProvider: ").append(toIndentedString(aiProvider)).append("\n"); sb.append(" billedCost: ").append(toIndentedString(billedCost)).append("\n"); sb.append(" billingCurrency: ").append(toIndentedString(billingCurrency)).append("\n"); sb.append(" chargePeriod: ").append(toIndentedString(chargePeriod)).append("\n"); diff --git a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature index ec0defe48d7..5e633c80e3a 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature @@ -1186,6 +1186,15 @@ Feature: Cloud Cost Management Then the response status is 202 Accepted And the response "data.attributes.name" is equal to "data.json" + @team:ddoghq/cloud-cost-management + Scenario: Upload Custom Costs file marked as an AI provider file returns "Accepted" response + Given new "UploadCustomCostsFile" request + And request contains "ai_provider" parameter with value true + And body with value [{"ProviderName": "my_ai_provider", "ChargePeriodStart": "2026-10-01", "ChargePeriodEnd": "2026-10-31", "ChargeDescription": "my_description", "BilledCost": 250, "BillingCurrency": "USD"}] + When the request is sent + Then the response status is 202 Accepted + And the response "data.attributes.ai_provider" is equal to true + @generated @skip @team:ddoghq/cloud-cost-management Scenario: Upload Custom Costs file returns "Accepted" response Given new "UploadCustomCostsFile" request diff --git a/src/test/resources/generated-test/test-runner-data/manifest.json b/src/test/resources/generated-test/test-runner-data/manifest.json index 79334fa3a43..23331f0a6c0 100644 --- a/src/test/resources/generated-test/test-runner-data/manifest.json +++ b/src/test/resources/generated-test/test-runner-data/manifest.json @@ -4431,6 +4431,13 @@ "scenario": "Upload Custom Costs File returns \"Accepted\" response", "version": "v2" }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/upload-custom-costs-file-marked-as-an-ai-provider-file-returns-accepted-response.json", + "scenario": "Upload Custom Costs file marked as an AI provider file returns \"Accepted\" response", + "version": "v2" + }, { "feature": "Cloud Cost Management", "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-marked-as-an-ai-provider-file-returns-accepted-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-marked-as-an-ai-provider-file-returns-accepted-response.json new file mode 100644 index 00000000000..f8fc9fb3b79 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-marked-as-an-ai-provider-file-returns-accepted-response.json @@ -0,0 +1,57 @@ +{ + "api": "CloudCostManagement", + "expected_status": 202, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Upload Custom Costs file marked as an AI provider file returns \"Accepted\" response", + "operation_id": "UploadCustomCostsFile", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "CustomCostsFileLineItem", + "type": "object" + }, + "ref": "CustomCostsFileUploadRequest", + "type": "array" + }, + "source": "inline", + "value": [ + { + "BilledCost": 250, + "BillingCurrency": "USD", + "ChargeDescription": "my_description", + "ChargePeriodEnd": "2026-10-31", + "ChargePeriodStart": "2026-10-01", + "ProviderName": "my_ai_provider" + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "ai_provider", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs" + }, + "scenario": "Upload Custom Costs file marked as an AI provider file returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json b/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json index de073b6055b..51ace326332 100644 --- a/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json +++ b/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json @@ -2240,6 +2240,51 @@ "scenario": "Upload Custom Costs File returns \"Accepted\" response", "version": "v2" }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-11-02T15:43:51.566Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "BilledCost": 250, + "BillingCurrency": "USD", + "ChargeDescription": "my_description", + "ChargePeriodEnd": "2026-10-31", + "ChargePeriodStart": "2026-10-01", + "ProviderName": "my_ai_provider" + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/custom_costs", + "query": [ + [ + "ai_provider", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"495fb2db-ee1e-4656-8914-6db06370bf74\",\"type\":\"cost_metadata\",\"attributes\":{\"ai_provider\":true,\"billed_cost\":250,\"billing_currency\":\"USD\",\"charge_period\":{\"start\":1790812800000,\"end\":1793404800000},\"name\":\"data.json\",\"provider_names\":[\"my_ai_provider\"],\"status\":\"UPLOADING\",\"uploaded_at\":1793634232151,\"uploaded_by\":{\"name\":\"C\u00e9dric Van Rompay\",\"icon\":\"https://secure.gravatar.com/avatar/fb5991514ab909a799dd362ad990f4f8?d=retro\\u0026s=48\",\"email\":\"cedric.vanrompay@datadoghq.com\"}}},\"meta\":{\"version\":\"1.0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Upload Custom Costs file marked as an AI provider file returns \"Accepted\" response", + "version": "v2" + }, { "feature": "Cloud Cost Management", "frozen_at": "2025-08-13T18:09:22.298Z",