diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml
index 64f30b32306..5f343ddf2f5 100644
--- a/.generator/schemas/v2/openapi.yaml
+++ b/.generator/schemas/v2/openapi.yaml
@@ -1426,6 +1426,394 @@ components:
$ref: '#/components/schemas/JSONAPIErrorResponse'
description: The server cannot process the request because it contains invalid
data.
+ WebIntegrationAccountSchemaBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_integration_name:
+ summary: Invalid integration name format
+ value:
+ errors:
+ - detail: Invalid integration name format
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The integration name format is invalid.'
+ WebIntegrationAccountSchemaForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ integration_not_allowed:
+ summary: Integration not allowed
+ value:
+ errors:
+ - detail: The API is currently disabled for this integration
+ status: '403'
+ title: Integration Not Allowed
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access.'
+ WebIntegrationAccountSchemaNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ schema_not_found:
+ summary: Schema not found for integration
+ value:
+ errors:
+ - detail: 'Schema not found for integration: twilio'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration does not exist or has no schema available.'
+ WebIntegrationAccountSchemaTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after the rate limit window
+ expires.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 12000 requests per organization every 60
+ seconds.'
+ WebIntegrationCreateAccountBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_request:
+ summary: Invalid request body
+ value:
+ errors:
+ - detail: 'Invalid request body: missing required field ''name'''
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The request body is malformed or the integration
+ name format is invalid.'
+ WebIntegrationCreateAccountForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ permission_denied:
+ summary: Permission denied
+ value:
+ errors:
+ - detail: User does not have permission to manage integrations
+ status: '403'
+ title: Forbidden
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access or the
+ user lacks permissions to manage integrations.'
+ WebIntegrationCreateAccountNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ integration_not_found:
+ summary: Integration not found
+ value:
+ errors:
+ - detail: 'Integration not found: unknown_integration'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration does not exist.'
+ WebIntegrationCreateAccountTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after 20 seconds.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 50 requests per user every 20 seconds.'
+ WebIntegrationCreateAccountUnprocessableEntityResponse:
+ content:
+ application/json:
+ examples:
+ validation_failed:
+ summary: Validation failed
+ value:
+ errors:
+ - detail: settings.account_sid is required
+ status: '422'
+ title: Unprocessable Entity
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Unprocessable Entity: The account configuration does not match
+ the integration schema.'
+ WebIntegrationDeleteAccountBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_account_id:
+ summary: Invalid account ID format
+ value:
+ errors:
+ - detail: Invalid account ID format
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The integration name or account ID format is invalid.'
+ WebIntegrationDeleteAccountForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ permission_denied:
+ summary: Permission denied
+ value:
+ errors:
+ - detail: User does not have permission to delete this account
+ status: '403'
+ title: Forbidden
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access or the
+ user lacks permissions to manage this account.'
+ WebIntegrationDeleteAccountNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ account_not_found:
+ summary: Account not found
+ value:
+ errors:
+ - detail: 'Account not found: abc123def456'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration or account does not exist.'
+ WebIntegrationDeleteAccountTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after 20 seconds.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 50 requests per user every 20 seconds.'
+ WebIntegrationGetAccountBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_account_id:
+ summary: Invalid account ID format
+ value:
+ errors:
+ - detail: Invalid account ID format
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The integration name or account ID format is invalid.'
+ WebIntegrationGetAccountForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ permission_denied:
+ summary: Permission denied
+ value:
+ errors:
+ - detail: User does not have permission to access this account
+ status: '403'
+ title: Forbidden
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access or the
+ user lacks required permissions.'
+ WebIntegrationGetAccountNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ account_not_found:
+ summary: Account not found
+ value:
+ errors:
+ - detail: 'Account not found: abc123def456'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration or account does not exist.'
+ WebIntegrationGetAccountTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after 60 seconds.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 12000 requests per organization every 60
+ seconds.'
+ WebIntegrationListAccountsBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_integration_name:
+ summary: Invalid integration name format
+ value:
+ errors:
+ - detail: Invalid integration name format
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The integration name format is invalid.'
+ WebIntegrationListAccountsForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ integration_not_allowed:
+ summary: Integration not allowed
+ value:
+ errors:
+ - detail: The API is currently disabled for this integration
+ status: '403'
+ title: Forbidden
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access or the
+ user lacks required permissions.'
+ WebIntegrationListAccountsNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ integration_not_found:
+ summary: Integration not found
+ value:
+ errors:
+ - detail: 'Integration not found: unknown_integration'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration does not exist.'
+ WebIntegrationListAccountsTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after 20 seconds.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 50 requests per user every 20 seconds.'
+ WebIntegrationUpdateAccountBadRequestResponse:
+ content:
+ application/json:
+ examples:
+ invalid_request:
+ summary: Invalid request body
+ value:
+ errors:
+ - detail: Invalid request body format
+ status: '400'
+ title: Bad Request
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Bad Request: The request body is malformed or the integration
+ name/account ID format is invalid.'
+ WebIntegrationUpdateAccountForbiddenResponse:
+ content:
+ application/json:
+ examples:
+ permission_denied:
+ summary: Permission denied
+ value:
+ errors:
+ - detail: User does not have permission to update this account
+ status: '403'
+ title: Forbidden
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Forbidden: The integration is not enabled for API access or the
+ user lacks permissions to manage this account.'
+ WebIntegrationUpdateAccountNotFoundResponse:
+ content:
+ application/json:
+ examples:
+ account_not_found:
+ summary: Account not found
+ value:
+ errors:
+ - detail: 'Account not found: abc123def456'
+ status: '404'
+ title: Not Found
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Not Found: The integration or account does not exist.'
+ WebIntegrationUpdateAccountTooManyRequestsResponse:
+ content:
+ application/json:
+ examples:
+ rate_limit_exceeded:
+ summary: Rate limit exceeded
+ value:
+ errors:
+ - detail: Rate limit exceeded. Please retry after 20 seconds.
+ status: '429'
+ title: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Too Many Requests: Rate limit exceeded.
+
+ This endpoint has a rate limit of 50 requests per user every 20 seconds.'
+ WebIntegrationUpdateAccountUnprocessableEntityResponse:
+ content:
+ application/json:
+ examples:
+ validation_failed:
+ summary: Validation failed
+ value:
+ errors:
+ - detail: settings.api_key must be at least 32 characters
+ status: '422'
+ title: Unprocessable Entity
+ schema:
+ $ref: '#/components/schemas/APIErrorResponse'
+ description: 'Unprocessable Entity: The account configuration does not match
+ the integration schema.'
schemas:
APIErrorResponse:
description: API error response.
@@ -72575,6 +72963,407 @@ components:
type: string
x-enum-varnames:
- RUM_REPLAY_WATCHER
+ WebIntegrationAccountAttributes:
+ description: Attributes for a web integration account.
+ properties:
+ name:
+ description: The name of the account.
+ example: My Production Account
+ type: string
+ settings:
+ additionalProperties: {}
+ description: 'Integration-specific settings for the account. The structure
+ and required fields vary by integration type.
+
+ Use the schema endpoint to retrieve the specific requirements for each
+ integration.'
+ example:
+ account_sid: ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ alerts: false
+ api_key: SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ call_summaries: true
+ ccm_enabled: true
+ censor_logs: true
+ events: true
+ messages: true
+ type: object
+ required:
+ - name
+ - settings
+ type: object
+ WebIntegrationAccountCreateRequest:
+ description: Payload for creating a web integration account.
+ properties:
+ data:
+ $ref: '#/components/schemas/WebIntegrationAccountCreateRequestData'
+ required:
+ - data
+ type: object
+ WebIntegrationAccountCreateRequestAttributes:
+ description: Attributes for creating a web integration account.
+ properties:
+ name:
+ description: The name of the account.
+ example: My Production Account
+ type: string
+ secrets:
+ additionalProperties: {}
+ description: 'Sensitive credentials for the account. The structure and required
+ fields vary by integration type.
+
+ These values are write-only and never returned in responses.'
+ example:
+ api_key_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ type: object
+ settings:
+ additionalProperties: {}
+ description: 'Integration-specific settings for the account. The structure
+ and required fields vary by integration type.
+
+ Use the schema endpoint (GET /api/v2/web-integrations/{integration_name}/accounts/schema)
+ to retrieve
+
+ the specific requirements for your integration before creating an account.'
+ example:
+ account_sid: ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ alerts: true
+ api_key: SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ call_summaries: true
+ ccm_enabled: true
+ censor_logs: true
+ events: true
+ messages: true
+ type: object
+ required:
+ - name
+ - settings
+ - secrets
+ type: object
+ WebIntegrationAccountCreateRequestData:
+ description: Data object for creating a web integration account.
+ properties:
+ attributes:
+ $ref: '#/components/schemas/WebIntegrationAccountCreateRequestAttributes'
+ type:
+ $ref: '#/components/schemas/WebIntegrationAccountType'
+ required:
+ - type
+ - attributes
+ type: object
+ WebIntegrationAccountResponse:
+ description: Response containing a single web integration account.
+ properties:
+ data:
+ $ref: '#/components/schemas/WebIntegrationAccountResponseData'
+ integration_name:
+ description: The name of the integration.
+ example: twilio
+ type: string
+ type: object
+ WebIntegrationAccountResponseData:
+ description: Data object for a web integration account response.
+ properties:
+ attributes:
+ $ref: '#/components/schemas/WebIntegrationAccountAttributes'
+ id:
+ description: The unique identifier for the account.
+ example: abc123def456
+ type: string
+ type:
+ $ref: '#/components/schemas/WebIntegrationAccountType'
+ required:
+ - id
+ - type
+ - attributes
+ type: object
+ WebIntegrationAccountSchemaResponse:
+ description: 'Response containing the JSON schema for an integration''s account
+ configuration.
+
+ This schema defines the required and optional fields for both settings and
+ secrets,
+
+ including field types, validation rules, and descriptions.
+
+
+ The response is a standard [JSON Schema (draft-07)](https://json-schema.org/draft-07/schema#)
+ document describing the account
+
+ configuration structure. Because this is a dynamic JSON Schema, the exact
+ properties vary by integration.'
+ example:
+ $schema: http://json-schema.org/draft-07/schema#
+ properties:
+ secrets:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseExampleSecrets'
+ settings:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseExampleSettings'
+ required:
+ - settings
+ - secrets
+ type: object
+ properties:
+ $schema:
+ description: The JSON Schema version URI.
+ example: http://json-schema.org/draft-07/schema#
+ type: string
+ additionalProperties:
+ description: Whether additional properties are allowed at the root level
+ (typically false).
+ example: false
+ type: boolean
+ properties:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseProperties'
+ required:
+ description: List of required top-level properties.
+ example:
+ - settings
+ - secrets
+ items:
+ type: string
+ type: array
+ type:
+ description: The root type of the schema (always "object").
+ example: object
+ type: string
+ required:
+ - $schema
+ - type
+ - properties
+ - required
+ type: object
+ WebIntegrationAccountSchemaResponseExampleSecrets:
+ additionalProperties: false
+ properties:
+ api_key_token:
+ description: The Twilio API Key Secret corresponding to the API Key SID.
+ example: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ minLength: 1
+ type: string
+ required:
+ - api_key_token
+ type: object
+ WebIntegrationAccountSchemaResponseExampleSettings:
+ additionalProperties: false
+ properties:
+ account_sid:
+ description: Twilio Account SID that uniquely identifies your Twilio account,
+ found in your account info in the Twilio console.
+ example: ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ minLength: 1
+ type: string
+ alerts:
+ default: false
+ description: Enable collection of Twilio Alert logs to monitor account alerts
+ and notifications.
+ type: boolean
+ api_key:
+ description: Twilio API Key SID for authentication. Create this API key
+ in the Twilio console.
+ example: SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ minLength: 1
+ type: string
+ call_summaries:
+ default: false
+ description: Enable collection of Twilio Voice call summaries to track voice
+ call performance and metadata.
+ type: boolean
+ ccm_enabled:
+ default: false
+ description: Enable Cloud Cost Management to monitor Twilio usage costs
+ and identify optimization opportunities.
+ type: boolean
+ censor_logs:
+ default: false
+ description: Enable censoring of sensitive data in logs. When true, phone
+ numbers and SMS message bodies are censored for privacy.
+ type: boolean
+ events:
+ default: false
+ description: Enable collection of Twilio Event logs to monitor account-level
+ events and activities.
+ type: boolean
+ messages:
+ default: false
+ description: Enable collection of Twilio Message logs to track SMS and messaging
+ activity.
+ type: boolean
+ required:
+ - api_key
+ - account_sid
+ type: object
+ WebIntegrationAccountSchemaResponseProperties:
+ description: 'The properties object containing settings and secrets schema definitions.
+
+ Both are always present in every integration schema, but the fields within
+ each
+
+ vary depending on the specific integration.'
+ properties:
+ secrets:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseSecretsObject'
+ settings:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseSettingsObject'
+ required:
+ - settings
+ - secrets
+ type: object
+ WebIntegrationAccountSchemaResponseSecretsObject:
+ description: 'JSON Schema definition for the secrets object.
+
+ Contains sensitive credentials required for the integration such as API keys,
+
+ tokens, and passwords. These values are write-only and never returned in responses.'
+ properties:
+ additionalProperties:
+ description: Whether additional properties are allowed (typically false).
+ example: false
+ type: boolean
+ properties:
+ additionalProperties:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseSettingsField'
+ description: 'The individual secret fields for this integration.
+
+ Field names and types vary by integration.'
+ type: object
+ required:
+ description: List of required secret field names.
+ items:
+ type: string
+ type: array
+ type:
+ description: Always "object" for the secrets container.
+ example: object
+ type: string
+ type: object
+ WebIntegrationAccountSchemaResponseSettingsField:
+ description: 'JSON Schema definition for a single field within settings or secrets.
+
+ The exact fields vary by integration.'
+ properties:
+ additionalProperties:
+ description: Whether additional properties are allowed for this field.
+ example: false
+ type: boolean
+ default:
+ description: Default value for the field if not provided.
+ description:
+ description: Human-readable description of the field's purpose.
+ example: API key for authentication
+ type: string
+ items:
+ description: Schema for array items when type is "array".
+ type: object
+ minLength:
+ description: Minimum length for string fields.
+ example: 1
+ format: int64
+ type: integer
+ type:
+ description: The data type of the field (string, boolean, integer, array,
+ object).
+ example: string
+ type: string
+ type: object
+ WebIntegrationAccountSchemaResponseSettingsObject:
+ description: 'JSON Schema definition for the settings object.
+
+ Contains integration-specific configuration fields such as account identifiers,
+
+ feature toggles, and non-sensitive configuration options.'
+ properties:
+ additionalProperties:
+ description: Whether additional properties are allowed (typically false).
+ example: false
+ type: boolean
+ properties:
+ additionalProperties:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponseSettingsField'
+ description: 'The individual setting fields for this integration.
+
+ Field names and types vary by integration.'
+ type: object
+ required:
+ description: List of required setting field names.
+ items:
+ type: string
+ type: array
+ type:
+ description: Always "object" for the settings container.
+ example: object
+ type: string
+ type: object
+ WebIntegrationAccountType:
+ default: Account
+ description: The JSON:API type for web integration accounts.
+ enum:
+ - Account
+ example: Account
+ type: string
+ x-enum-varnames:
+ - ACCOUNT
+ WebIntegrationAccountUpdateRequest:
+ description: Payload for updating a web integration account.
+ properties:
+ data:
+ $ref: '#/components/schemas/WebIntegrationAccountUpdateRequestData'
+ required:
+ - data
+ type: object
+ WebIntegrationAccountUpdateRequestAttributes:
+ description: 'Attributes for updating a web integration account. All fields
+ are optional;
+
+ only provide the fields you want to update.'
+ properties:
+ name:
+ description: The name of the account.
+ example: My Production Account (Updated)
+ type: string
+ secrets:
+ additionalProperties: {}
+ description: 'Sensitive credentials to update. Only the secrets provided
+ are updated.
+
+ These values are write-only and never returned in responses.'
+ example:
+ api_key_token: new_secret_token_value
+ type: object
+ settings:
+ additionalProperties: {}
+ description: 'Integration-specific settings to update. Only the fields provided
+ are updated.
+
+ The structure varies by integration type. See the integration''s schema
+ for available fields.'
+ example:
+ ccm_enabled: true
+ events: true
+ messages: false
+ type: object
+ type: object
+ WebIntegrationAccountUpdateRequestData:
+ description: Data object for updating a web integration account.
+ properties:
+ attributes:
+ $ref: '#/components/schemas/WebIntegrationAccountUpdateRequestAttributes'
+ type:
+ $ref: '#/components/schemas/WebIntegrationAccountType'
+ required:
+ - type
+ type: object
+ WebIntegrationAccountsResponse:
+ description: Response containing a list of web integration accounts.
+ properties:
+ data:
+ items:
+ $ref: '#/components/schemas/WebIntegrationAccountResponseData'
+ type: array
+ integration_name:
+ description: The name of the integration.
+ example: twilio
+ type: string
+ type: object
Weekday:
description: A day of the week.
enum:
@@ -110984,6 +111773,286 @@ paths:
operator: OR
permissions:
- teams_read
+ /api/v2/web-integrations/{integration_name}/accounts:
+ get:
+ description: 'Retrieve all configured accounts for a specific integration within
+ your organization.
+
+
+ Rate limit: 50 requests per user every 20 seconds.'
+ operationId: ListWebIntegrationAccounts
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountsResponse'
+ description: 'OK: List of all accounts for the specified integration.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationListAccountsBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationListAccountsForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationListAccountsNotFoundResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationListAccountsTooManyRequestsResponse'
+ summary: List integration accounts
+ tags:
+ - Integration Accounts
+ x-permission:
+ operator: OR
+ permissions:
+ - integrations_read
+ post:
+ description: 'Create a new account for a specific integration. The account configuration
+ must conform
+
+ to the schema defined for the integration, which can be retrieved using the
+ schema endpoint.
+
+
+ Rate limit: 50 requests per user every 20 seconds.'
+ operationId: CreateWebIntegrationAccount
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountCreateRequest'
+ required: true
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountResponse'
+ description: 'Created: The account was successfully created.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationCreateAccountBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationCreateAccountForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationCreateAccountNotFoundResponse'
+ '422':
+ $ref: '#/components/responses/WebIntegrationCreateAccountUnprocessableEntityResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationCreateAccountTooManyRequestsResponse'
+ summary: Create integration account
+ tags:
+ - Integration Accounts
+ x-codegen-request-body-name: body
+ x-permission:
+ operator: OR
+ permissions:
+ - manage_integrations
+ /api/v2/web-integrations/{integration_name}/accounts/schema:
+ get:
+ description: 'Get the JSON schema that defines the structure and validation
+ rules for account configuration
+
+ of a specific integration. This schema describes the required and optional
+ fields for both
+
+ **settings** and **secrets** when creating or updating an account.
+
+
+ The schema structure varies between integrations, so always retrieve the schema
+ for your
+
+ specific integration before creating or updating accounts.
+
+
+ Rate limit: 12000 requests per organization every 60 seconds.'
+ operationId: GetWebIntegrationAccountSchema
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountSchemaResponse'
+ description: 'OK: The JSON schema for the integration''s account configuration.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationAccountSchemaBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationAccountSchemaForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationAccountSchemaNotFoundResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationAccountSchemaTooManyRequestsResponse'
+ summary: Get account schema for an integration
+ tags:
+ - Integration Accounts
+ x-permission:
+ operator: OR
+ permissions:
+ - integrations_read
+ /api/v2/web-integrations/{integration_name}/accounts/{account_id}:
+ delete:
+ description: 'Delete a specific account by its ID for a given integration. This
+ removes the
+
+ account configuration and stops any data collection associated with it.
+
+
+ Rate limit: 50 requests per user every 20 seconds.'
+ operationId: DeleteWebIntegrationAccount
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ - description: The unique identifier of the account.
+ example: abc123def456
+ in: path
+ name: account_id
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: 'OK: The account was successfully deleted.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationDeleteAccountBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationDeleteAccountForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationDeleteAccountNotFoundResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationDeleteAccountTooManyRequestsResponse'
+ summary: Delete integration account
+ tags:
+ - Integration Accounts
+ x-permission:
+ operator: OR
+ permissions:
+ - manage_integrations
+ get:
+ description: 'Retrieve a specific account by its ID for a given integration.
+ The response includes
+
+ the account name and settings, but excludes sensitive secret values.
+
+
+ Rate limit: 12000 requests per organization every 60 seconds.'
+ operationId: GetWebIntegrationAccount
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ - description: The unique identifier of the account.
+ example: abc123def456
+ in: path
+ name: account_id
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountResponse'
+ description: 'OK: The account details for the specified integration.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationGetAccountBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationGetAccountForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationGetAccountNotFoundResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationGetAccountTooManyRequestsResponse'
+ summary: Get integration account
+ tags:
+ - Integration Accounts
+ x-permission:
+ operator: OR
+ permissions:
+ - integrations_read
+ patch:
+ description: 'Update an existing account for a specific integration. You can
+ update the name, settings,
+
+ and secrets. Only the fields provided in the request are updated.
+
+
+ Rate limit: 50 requests per user every 20 seconds.'
+ operationId: UpdateWebIntegrationAccount
+ parameters:
+ - description: The name of the integration.
+ example: twilio
+ in: path
+ name: integration_name
+ required: true
+ schema:
+ type: string
+ - description: The unique identifier of the account.
+ example: abc123def456
+ in: path
+ name: account_id
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountUpdateRequest'
+ required: true
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WebIntegrationAccountResponse'
+ description: 'OK: The account was successfully updated.'
+ '400':
+ $ref: '#/components/responses/WebIntegrationUpdateAccountBadRequestResponse'
+ '403':
+ $ref: '#/components/responses/WebIntegrationUpdateAccountForbiddenResponse'
+ '404':
+ $ref: '#/components/responses/WebIntegrationUpdateAccountNotFoundResponse'
+ '422':
+ $ref: '#/components/responses/WebIntegrationUpdateAccountUnprocessableEntityResponse'
+ '429':
+ $ref: '#/components/responses/WebIntegrationUpdateAccountTooManyRequestsResponse'
+ summary: Update integration account
+ tags:
+ - Integration Accounts
+ x-codegen-request-body-name: body
+ x-permission:
+ operator: OR
+ permissions:
+ - manage_integrations
/api/v2/workflows:
post:
description: Create a new workflow, returning the workflow ID. This API requires
@@ -111636,6 +112705,18 @@ tags:
and todos. See the [Incident Management page](https://docs.datadoghq.com/service_management/incident_management/)
for more information.
name: Incidents
+- description: "Configure and manage third-party integrations with Datadog. This API
+ provides a unified\ninterface for managing integration accounts across various
+ external services.\n\nEach integration has its own unique schema that defines
+ the required settings and secrets.\nBefore creating or updating an account, use
+ the schema endpoint to retrieve the specific\nrequirements, field types, validation
+ rules, and available configuration options for your\nintegration.\n\n**Note**:
+ This API manages integration account configurations only. It does not support\nGrace
+ Resources, Reference Tables, or Custom Queries CRUD operations. For those features,\nrefer
+ to each integration's dedicated documentation.\n\nSupported Integrations:\n -
+ [Twilio](https://docs.datadoghq.com/integrations/twilio/)\n - [Snowflake](https://docs.datadoghq.com/integrations/snowflake-web/)\n
+ \ - [Databricks](https://docs.datadoghq.com/integrations/databricks/)"
+ name: Integration Accounts
- description: 'The Integrations API is used to list available integrations
and retrieve information about their installation status.'
diff --git a/examples/v2/integration-accounts/CreateWebIntegrationAccount.java b/examples/v2/integration-accounts/CreateWebIntegrationAccount.java
new file mode 100644
index 00000000000..2bae0a897a6
--- /dev/null
+++ b/examples/v2/integration-accounts/CreateWebIntegrationAccount.java
@@ -0,0 +1,53 @@
+// Create integration account returns "Created: The account was successfully created." response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequestAttributes;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequestData;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountType;
+import java.util.Map;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ WebIntegrationAccountCreateRequest body =
+ new WebIntegrationAccountCreateRequest()
+ .data(
+ new WebIntegrationAccountCreateRequestData()
+ .attributes(
+ new WebIntegrationAccountCreateRequestAttributes()
+ .name("My Production Account")
+ .secrets(
+ Map.ofEntries(
+ Map.entry("api_key_token", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")))
+ .settings(
+ Map.ofEntries(
+ Map.entry("account_sid", "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ Map.entry("alerts", "True"),
+ Map.entry("api_key", "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ Map.entry("call_summaries", "True"),
+ Map.entry("ccm_enabled", "True"),
+ Map.entry("censor_logs", "True"),
+ Map.entry("events", "True"),
+ Map.entry("messages", "True"))))
+ .type(WebIntegrationAccountType.ACCOUNT));
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.createWebIntegrationAccount("twilio", body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#createWebIntegrationAccount");
+ 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/v2/integration-accounts/CreateWebIntegrationAccount_516494340.java b/examples/v2/integration-accounts/CreateWebIntegrationAccount_516494340.java
new file mode 100644
index 00000000000..bbce729854b
--- /dev/null
+++ b/examples/v2/integration-accounts/CreateWebIntegrationAccount_516494340.java
@@ -0,0 +1,52 @@
+// Create integration account returns "Created" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequestAttributes;
+import com.datadog.api.client.v2.model.WebIntegrationAccountCreateRequestData;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountType;
+import java.util.Map;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ WebIntegrationAccountCreateRequest body =
+ new WebIntegrationAccountCreateRequest()
+ .data(
+ new WebIntegrationAccountCreateRequestData()
+ .type(WebIntegrationAccountType.ACCOUNT)
+ .attributes(
+ new WebIntegrationAccountCreateRequestAttributes()
+ .name("Example-Web-Integration")
+ .settings(
+ Map.ofEntries(
+ Map.entry("api_key", "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ Map.entry("account_sid", "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ Map.entry("events", "True"),
+ Map.entry("messages", "True"),
+ Map.entry("alerts", "True"),
+ Map.entry("call_summaries", "True"),
+ Map.entry("ccm_enabled", "True"),
+ Map.entry("censor_logs", "True")))
+ .secrets(
+ Map.ofEntries(Map.entry("api_key_token", "test_secret_token")))));
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.createWebIntegrationAccount("twilio", body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#createWebIntegrationAccount");
+ 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/v2/integration-accounts/DeleteWebIntegrationAccount.java b/examples/v2/integration-accounts/DeleteWebIntegrationAccount.java
new file mode 100644
index 00000000000..8839a9781b8
--- /dev/null
+++ b/examples/v2/integration-accounts/DeleteWebIntegrationAccount.java
@@ -0,0 +1,23 @@
+// Delete integration account returns "OK: The account was successfully deleted." response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ apiInstance.deleteWebIntegrationAccount("twilio", "abc123def456");
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#deleteWebIntegrationAccount");
+ 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/v2/integration-accounts/DeleteWebIntegrationAccount_3148550629.java b/examples/v2/integration-accounts/DeleteWebIntegrationAccount_3148550629.java
new file mode 100644
index 00000000000..eef8c3dfe10
--- /dev/null
+++ b/examples/v2/integration-accounts/DeleteWebIntegrationAccount_3148550629.java
@@ -0,0 +1,26 @@
+// Delete integration account returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ // there is a valid "web_integration_account" in the system
+ String WEB_INTEGRATION_ACCOUNT_DATA_ID = System.getenv("WEB_INTEGRATION_ACCOUNT_DATA_ID");
+
+ try {
+ apiInstance.deleteWebIntegrationAccount("twilio", WEB_INTEGRATION_ACCOUNT_DATA_ID);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#deleteWebIntegrationAccount");
+ 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/v2/integration-accounts/GetWebIntegrationAccount.java b/examples/v2/integration-accounts/GetWebIntegrationAccount.java
new file mode 100644
index 00000000000..ac6737e73a6
--- /dev/null
+++ b/examples/v2/integration-accounts/GetWebIntegrationAccount.java
@@ -0,0 +1,25 @@
+// Get integration account returns "OK: The account details for the specified integration." response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.getWebIntegrationAccount("twilio", "abc123def456");
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling IntegrationAccountsApi#getWebIntegrationAccount");
+ 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/v2/integration-accounts/GetWebIntegrationAccountSchema.java b/examples/v2/integration-accounts/GetWebIntegrationAccountSchema.java
new file mode 100644
index 00000000000..13e130786c1
--- /dev/null
+++ b/examples/v2/integration-accounts/GetWebIntegrationAccountSchema.java
@@ -0,0 +1,28 @@
+// Get account schema for an integration returns "OK: The JSON schema for the integration's account
+// configuration."
+// response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountSchemaResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ WebIntegrationAccountSchemaResponse result =
+ apiInstance.getWebIntegrationAccountSchema("twilio");
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#getWebIntegrationAccountSchema");
+ 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/v2/integration-accounts/GetWebIntegrationAccountSchema_2275808665.java b/examples/v2/integration-accounts/GetWebIntegrationAccountSchema_2275808665.java
new file mode 100644
index 00000000000..65515a5ea23
--- /dev/null
+++ b/examples/v2/integration-accounts/GetWebIntegrationAccountSchema_2275808665.java
@@ -0,0 +1,26 @@
+// Get account schema for an integration returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountSchemaResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ WebIntegrationAccountSchemaResponse result =
+ apiInstance.getWebIntegrationAccountSchema("twilio");
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#getWebIntegrationAccountSchema");
+ 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/v2/integration-accounts/GetWebIntegrationAccount_2208305330.java b/examples/v2/integration-accounts/GetWebIntegrationAccount_2208305330.java
new file mode 100644
index 00000000000..646bedd6826
--- /dev/null
+++ b/examples/v2/integration-accounts/GetWebIntegrationAccount_2208305330.java
@@ -0,0 +1,28 @@
+// Get integration account returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ // there is a valid "web_integration_account" in the system
+ String WEB_INTEGRATION_ACCOUNT_DATA_ID = System.getenv("WEB_INTEGRATION_ACCOUNT_DATA_ID");
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.getWebIntegrationAccount("twilio", WEB_INTEGRATION_ACCOUNT_DATA_ID);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling IntegrationAccountsApi#getWebIntegrationAccount");
+ 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/v2/integration-accounts/ListWebIntegrationAccounts.java b/examples/v2/integration-accounts/ListWebIntegrationAccounts.java
new file mode 100644
index 00000000000..be1387504fe
--- /dev/null
+++ b/examples/v2/integration-accounts/ListWebIntegrationAccounts.java
@@ -0,0 +1,26 @@
+// List integration accounts returns "OK: List of all accounts for the specified integration."
+// response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountsResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ WebIntegrationAccountsResponse result = apiInstance.listWebIntegrationAccounts("twilio");
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#listWebIntegrationAccounts");
+ 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/v2/integration-accounts/ListWebIntegrationAccounts_2909671841.java b/examples/v2/integration-accounts/ListWebIntegrationAccounts_2909671841.java
new file mode 100644
index 00000000000..57884d1591c
--- /dev/null
+++ b/examples/v2/integration-accounts/ListWebIntegrationAccounts_2909671841.java
@@ -0,0 +1,25 @@
+// List integration accounts returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountsResponse;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ try {
+ WebIntegrationAccountsResponse result = apiInstance.listWebIntegrationAccounts("twilio");
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#listWebIntegrationAccounts");
+ 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/v2/integration-accounts/UpdateWebIntegrationAccount.java b/examples/v2/integration-accounts/UpdateWebIntegrationAccount.java
new file mode 100644
index 00000000000..118e3c14297
--- /dev/null
+++ b/examples/v2/integration-accounts/UpdateWebIntegrationAccount.java
@@ -0,0 +1,47 @@
+// Update integration account returns "OK: The account was successfully updated." response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountType;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequestAttributes;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequestData;
+import java.util.Map;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ WebIntegrationAccountUpdateRequest body =
+ new WebIntegrationAccountUpdateRequest()
+ .data(
+ new WebIntegrationAccountUpdateRequestData()
+ .attributes(
+ new WebIntegrationAccountUpdateRequestAttributes()
+ .name("My Production Account (Updated)")
+ .secrets(
+ Map.ofEntries(Map.entry("api_key_token", "new_secret_token_value")))
+ .settings(
+ Map.ofEntries(
+ Map.entry("ccm_enabled", "True"),
+ Map.entry("events", "True"),
+ Map.entry("messages", "False"))))
+ .type(WebIntegrationAccountType.ACCOUNT));
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.updateWebIntegrationAccount("twilio", "abc123def456", body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#updateWebIntegrationAccount");
+ 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/v2/integration-accounts/UpdateWebIntegrationAccount_3199996405.java b/examples/v2/integration-accounts/UpdateWebIntegrationAccount_3199996405.java
new file mode 100644
index 00000000000..c17becaae26
--- /dev/null
+++ b/examples/v2/integration-accounts/UpdateWebIntegrationAccount_3199996405.java
@@ -0,0 +1,48 @@
+// Update integration account returns "OK" response
+
+import com.datadog.api.client.ApiClient;
+import com.datadog.api.client.ApiException;
+import com.datadog.api.client.v2.api.IntegrationAccountsApi;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountType;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequestAttributes;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequestData;
+import java.util.Map;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = ApiClient.getDefaultApiClient();
+ IntegrationAccountsApi apiInstance = new IntegrationAccountsApi(defaultClient);
+
+ // there is a valid "web_integration_account" in the system
+ String WEB_INTEGRATION_ACCOUNT_DATA_ID = System.getenv("WEB_INTEGRATION_ACCOUNT_DATA_ID");
+
+ WebIntegrationAccountUpdateRequest body =
+ new WebIntegrationAccountUpdateRequest()
+ .data(
+ new WebIntegrationAccountUpdateRequestData()
+ .type(WebIntegrationAccountType.ACCOUNT)
+ .attributes(
+ new WebIntegrationAccountUpdateRequestAttributes()
+ .name("Example-Web-Integration-updated")
+ .settings(
+ Map.ofEntries(
+ Map.entry("events", "False"),
+ Map.entry("messages", "False"),
+ Map.entry("ccm_enabled", "False")))));
+
+ try {
+ WebIntegrationAccountResponse result =
+ apiInstance.updateWebIntegrationAccount("twilio", WEB_INTEGRATION_ACCOUNT_DATA_ID, body);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println(
+ "Exception when calling IntegrationAccountsApi#updateWebIntegrationAccount");
+ 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/IntegrationAccountsApi.java b/src/main/java/com/datadog/api/client/v2/api/IntegrationAccountsApi.java
new file mode 100644
index 00000000000..be9110d0fee
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/api/IntegrationAccountsApi.java
@@ -0,0 +1,1074 @@
+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.WebIntegrationAccountCreateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountSchemaResponse;
+import com.datadog.api.client.v2.model.WebIntegrationAccountUpdateRequest;
+import com.datadog.api.client.v2.model.WebIntegrationAccountsResponse;
+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 IntegrationAccountsApi {
+ private ApiClient apiClient;
+
+ public IntegrationAccountsApi() {
+ this(ApiClient.getDefaultApiClient());
+ }
+
+ public IntegrationAccountsApi(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;
+ }
+
+ /**
+ * Create integration account.
+ *
+ *
See {@link #createWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param body (required)
+ * @return WebIntegrationAccountResponse
+ * @throws ApiException if fails to make API call
+ */
+ public WebIntegrationAccountResponse createWebIntegrationAccount(
+ String integrationName, WebIntegrationAccountCreateRequest body) throws ApiException {
+ return createWebIntegrationAccountWithHttpInfo(integrationName, body).getData();
+ }
+
+ /**
+ * Create integration account.
+ *
+ *
See {@link #createWebIntegrationAccountWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param body (required)
+ * @return CompletableFuture<WebIntegrationAccountResponse>
+ */
+ public CompletableFuture createWebIntegrationAccountAsync(
+ String integrationName, WebIntegrationAccountCreateRequest body) {
+ return createWebIntegrationAccountWithHttpInfoAsync(integrationName, body)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Create a new account for a specific integration. The account configuration must conform to the
+ * schema defined for the integration, which can be retrieved using the schema endpoint.
+ *
+ * Rate limit: 50 requests per user every 20 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param body (required)
+ * @return ApiResponse<WebIntegrationAccountResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 201 | Created: The account was successfully created. | - |
+ * | 400 | Bad Request: The request body is malformed or the integration name format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access or the user lacks permissions to manage integrations. | - |
+ * | 404 | Not Found: The integration does not exist. | - |
+ * | 422 | Unprocessable Entity: The account configuration does not match the integration schema. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 50 requests per user every 20 seconds. | - |
+ *
+ */
+ public ApiResponse createWebIntegrationAccountWithHttpInfo(
+ String integrationName, WebIntegrationAccountCreateRequest body) throws ApiException {
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " createWebIntegrationAccount");
+ }
+
+ // verify the required parameter 'body' is set
+ if (body == null) {
+ throw new ApiException(
+ 400, "Missing the required parameter 'body' when calling createWebIntegrationAccount");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.createWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "POST",
+ builder,
+ localVarHeaderParams,
+ new String[] {"application/json"},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Create integration account.
+ *
+ * See {@link #createWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param body (required)
+ * @return CompletableFuture<ApiResponse<WebIntegrationAccountResponse>>
+ */
+ public CompletableFuture>
+ createWebIntegrationAccountWithHttpInfoAsync(
+ String integrationName, WebIntegrationAccountCreateRequest body) {
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " createWebIntegrationAccount"));
+ 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 createWebIntegrationAccount"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.createWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } 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() {});
+ }
+
+ /**
+ * Delete integration account.
+ *
+ * See {@link #deleteWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @throws ApiException if fails to make API call
+ */
+ public void deleteWebIntegrationAccount(String integrationName, String accountId)
+ throws ApiException {
+ deleteWebIntegrationAccountWithHttpInfo(integrationName, accountId);
+ }
+
+ /**
+ * Delete integration account.
+ *
+ *
See {@link #deleteWebIntegrationAccountWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return CompletableFuture
+ */
+ public CompletableFuture deleteWebIntegrationAccountAsync(
+ String integrationName, String accountId) {
+ return deleteWebIntegrationAccountWithHttpInfoAsync(integrationName, accountId)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Delete a specific account by its ID for a given integration. This removes the account
+ * configuration and stops any data collection associated with it.
+ *
+ * Rate limit: 50 requests per user every 20 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return ApiResponse<Void>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK: The account was successfully deleted. | - |
+ * | 400 | Bad Request: The integration name or account ID format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access or the user lacks permissions to manage this account. | - |
+ * | 404 | Not Found: The integration or account does not exist. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 50 requests per user every 20 seconds. | - |
+ *
+ */
+ public ApiResponse deleteWebIntegrationAccountWithHttpInfo(
+ String integrationName, String accountId) throws ApiException {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " deleteWebIntegrationAccount");
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'accountId' when calling deleteWebIntegrationAccount");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.deleteWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"*/*"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "DELETE",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ null);
+ }
+
+ /**
+ * Delete integration account.
+ *
+ * See {@link #deleteWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return CompletableFuture<ApiResponse<Void>>
+ */
+ public CompletableFuture> deleteWebIntegrationAccountWithHttpInfoAsync(
+ String integrationName, String accountId) {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " deleteWebIntegrationAccount"));
+ return result;
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'accountId' when calling"
+ + " deleteWebIntegrationAccount"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.deleteWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"*/*"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } catch (ApiException ex) {
+ CompletableFuture> result = new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "DELETE",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ null);
+ }
+
+ /**
+ * Get integration account.
+ *
+ * See {@link #getWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return WebIntegrationAccountResponse
+ * @throws ApiException if fails to make API call
+ */
+ public WebIntegrationAccountResponse getWebIntegrationAccount(
+ String integrationName, String accountId) throws ApiException {
+ return getWebIntegrationAccountWithHttpInfo(integrationName, accountId).getData();
+ }
+
+ /**
+ * Get integration account.
+ *
+ *
See {@link #getWebIntegrationAccountWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return CompletableFuture<WebIntegrationAccountResponse>
+ */
+ public CompletableFuture getWebIntegrationAccountAsync(
+ String integrationName, String accountId) {
+ return getWebIntegrationAccountWithHttpInfoAsync(integrationName, accountId)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Retrieve a specific account by its ID for a given integration. The response includes the
+ * account name and settings, but excludes sensitive secret values.
+ *
+ * Rate limit: 12000 requests per organization every 60 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return ApiResponse<WebIntegrationAccountResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK: The account details for the specified integration. | - |
+ * | 400 | Bad Request: The integration name or account ID format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access or the user lacks required permissions. | - |
+ * | 404 | Not Found: The integration or account does not exist. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 12000 requests per organization every 60 seconds. | - |
+ *
+ */
+ public ApiResponse getWebIntegrationAccountWithHttpInfo(
+ String integrationName, String accountId) throws ApiException {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling getWebIntegrationAccount");
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ throw new ApiException(
+ 400, "Missing the required parameter 'accountId' when calling getWebIntegrationAccount");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.getWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Get integration account.
+ *
+ * See {@link #getWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @return CompletableFuture<ApiResponse<WebIntegrationAccountResponse>>
+ */
+ public CompletableFuture>
+ getWebIntegrationAccountWithHttpInfoAsync(String integrationName, String accountId) {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " getWebIntegrationAccount"));
+ return result;
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'accountId' when calling getWebIntegrationAccount"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.getWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } catch (ApiException ex) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Get account schema for an integration.
+ *
+ * See {@link #getWebIntegrationAccountSchemaWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return WebIntegrationAccountSchemaResponse
+ * @throws ApiException if fails to make API call
+ */
+ public WebIntegrationAccountSchemaResponse getWebIntegrationAccountSchema(String integrationName)
+ throws ApiException {
+ return getWebIntegrationAccountSchemaWithHttpInfo(integrationName).getData();
+ }
+
+ /**
+ * Get account schema for an integration.
+ *
+ *
See {@link #getWebIntegrationAccountSchemaWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return CompletableFuture<WebIntegrationAccountSchemaResponse>
+ */
+ public CompletableFuture getWebIntegrationAccountSchemaAsync(
+ String integrationName) {
+ return getWebIntegrationAccountSchemaWithHttpInfoAsync(integrationName)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Get the JSON schema that defines the structure and validation rules for account configuration
+ * of a specific integration. This schema describes the required and optional fields for both
+ * settings and secrets when creating or updating an account.
+ *
+ * The schema structure varies between integrations, so always retrieve the schema for your
+ * specific integration before creating or updating accounts.
+ *
+ *
Rate limit: 12000 requests per organization every 60 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return ApiResponse<WebIntegrationAccountSchemaResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK: The JSON schema for the integration's account configuration. | - |
+ * | 400 | Bad Request: The integration name format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access. | - |
+ * | 404 | Not Found: The integration does not exist or has no schema available. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 12000 requests per organization every 60 seconds. | - |
+ *
+ */
+ public ApiResponse
+ getWebIntegrationAccountSchemaWithHttpInfo(String integrationName) throws ApiException {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " getWebIntegrationAccountSchema");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/schema"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.getWebIntegrationAccountSchema",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Get account schema for an integration.
+ *
+ * See {@link #getWebIntegrationAccountSchemaWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return CompletableFuture<ApiResponse<WebIntegrationAccountSchemaResponse>>
+ */
+ public CompletableFuture>
+ getWebIntegrationAccountSchemaWithHttpInfoAsync(String integrationName) {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " getWebIntegrationAccountSchema"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/schema"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.getWebIntegrationAccountSchema",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } catch (ApiException ex) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * List integration accounts.
+ *
+ * See {@link #listWebIntegrationAccountsWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return WebIntegrationAccountsResponse
+ * @throws ApiException if fails to make API call
+ */
+ public WebIntegrationAccountsResponse listWebIntegrationAccounts(String integrationName)
+ throws ApiException {
+ return listWebIntegrationAccountsWithHttpInfo(integrationName).getData();
+ }
+
+ /**
+ * List integration accounts.
+ *
+ *
See {@link #listWebIntegrationAccountsWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return CompletableFuture<WebIntegrationAccountsResponse>
+ */
+ public CompletableFuture listWebIntegrationAccountsAsync(
+ String integrationName) {
+ return listWebIntegrationAccountsWithHttpInfoAsync(integrationName)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Retrieve all configured accounts for a specific integration within your organization.
+ *
+ * Rate limit: 50 requests per user every 20 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return ApiResponse<WebIntegrationAccountsResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK: List of all accounts for the specified integration. | - |
+ * | 400 | Bad Request: The integration name format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access or the user lacks required permissions. | - |
+ * | 404 | Not Found: The integration does not exist. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 50 requests per user every 20 seconds. | - |
+ *
+ */
+ public ApiResponse listWebIntegrationAccountsWithHttpInfo(
+ String integrationName) throws ApiException {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " listWebIntegrationAccounts");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.listWebIntegrationAccounts",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * List integration accounts.
+ *
+ * See {@link #listWebIntegrationAccountsWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @return CompletableFuture<ApiResponse<WebIntegrationAccountsResponse>>
+ */
+ public CompletableFuture>
+ listWebIntegrationAccountsWithHttpInfoAsync(String integrationName) {
+ Object localVarPostBody = null;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " listWebIntegrationAccounts"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.listWebIntegrationAccounts",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } catch (ApiException ex) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "GET",
+ builder,
+ localVarHeaderParams,
+ new String[] {},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Update integration account.
+ *
+ * See {@link #updateWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @param body (required)
+ * @return WebIntegrationAccountResponse
+ * @throws ApiException if fails to make API call
+ */
+ public WebIntegrationAccountResponse updateWebIntegrationAccount(
+ String integrationName, String accountId, WebIntegrationAccountUpdateRequest body)
+ throws ApiException {
+ return updateWebIntegrationAccountWithHttpInfo(integrationName, accountId, body).getData();
+ }
+
+ /**
+ * Update integration account.
+ *
+ *
See {@link #updateWebIntegrationAccountWithHttpInfoAsync}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @param body (required)
+ * @return CompletableFuture<WebIntegrationAccountResponse>
+ */
+ public CompletableFuture updateWebIntegrationAccountAsync(
+ String integrationName, String accountId, WebIntegrationAccountUpdateRequest body) {
+ return updateWebIntegrationAccountWithHttpInfoAsync(integrationName, accountId, body)
+ .thenApply(
+ response -> {
+ return response.getData();
+ });
+ }
+
+ /**
+ * Update an existing account for a specific integration. You can update the name, settings, and
+ * secrets. Only the fields provided in the request are updated.
+ *
+ * Rate limit: 50 requests per user every 20 seconds.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @param body (required)
+ * @return ApiResponse<WebIntegrationAccountResponse>
+ * @throws ApiException if fails to make API call
+ * @http.response.details
+ *
+ * Response details
+ * | Status Code | Description | Response Headers |
+ * | 200 | OK: The account was successfully updated. | - |
+ * | 400 | Bad Request: The request body is malformed or the integration name/account ID format is invalid. | - |
+ * | 403 | Forbidden: The integration is not enabled for API access or the user lacks permissions to manage this account. | - |
+ * | 404 | Not Found: The integration or account does not exist. | - |
+ * | 422 | Unprocessable Entity: The account configuration does not match the integration schema. | - |
+ * | 429 | Too Many Requests: Rate limit exceeded. This endpoint has a rate limit of 50 requests per user every 20 seconds. | - |
+ *
+ */
+ public ApiResponse updateWebIntegrationAccountWithHttpInfo(
+ String integrationName, String accountId, WebIntegrationAccountUpdateRequest body)
+ throws ApiException {
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " updateWebIntegrationAccount");
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ throw new ApiException(
+ 400,
+ "Missing the required parameter 'accountId' when calling updateWebIntegrationAccount");
+ }
+
+ // verify the required parameter 'body' is set
+ if (body == null) {
+ throw new ApiException(
+ 400, "Missing the required parameter 'body' when calling updateWebIntegrationAccount");
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.updateWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ return apiClient.invokeAPI(
+ "PATCH",
+ builder,
+ localVarHeaderParams,
+ new String[] {"application/json"},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+
+ /**
+ * Update integration account.
+ *
+ * See {@link #updateWebIntegrationAccountWithHttpInfo}.
+ *
+ * @param integrationName The name of the integration. (required)
+ * @param accountId The unique identifier of the account. (required)
+ * @param body (required)
+ * @return CompletableFuture<ApiResponse<WebIntegrationAccountResponse>>
+ */
+ public CompletableFuture>
+ updateWebIntegrationAccountWithHttpInfoAsync(
+ String integrationName, String accountId, WebIntegrationAccountUpdateRequest body) {
+ Object localVarPostBody = body;
+
+ // verify the required parameter 'integrationName' is set
+ if (integrationName == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'integrationName' when calling"
+ + " updateWebIntegrationAccount"));
+ return result;
+ }
+
+ // verify the required parameter 'accountId' is set
+ if (accountId == null) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(
+ new ApiException(
+ 400,
+ "Missing the required parameter 'accountId' when calling"
+ + " updateWebIntegrationAccount"));
+ 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 updateWebIntegrationAccount"));
+ return result;
+ }
+ // create path and map variables
+ String localVarPath =
+ "/api/v2/web-integrations/{integration_name}/accounts/{account_id}"
+ .replaceAll(
+ "\\{" + "integration_name" + "\\}",
+ apiClient.escapeString(integrationName.toString()))
+ .replaceAll("\\{" + "account_id" + "\\}", apiClient.escapeString(accountId.toString()));
+
+ Map localVarHeaderParams = new HashMap();
+
+ Invocation.Builder builder;
+ try {
+ builder =
+ apiClient.createBuilder(
+ "v2.IntegrationAccountsApi.updateWebIntegrationAccount",
+ localVarPath,
+ new ArrayList(),
+ localVarHeaderParams,
+ new HashMap(),
+ new String[] {"application/json"},
+ new String[] {"apiKeyAuth", "appKeyAuth"});
+ } catch (ApiException ex) {
+ CompletableFuture> result =
+ new CompletableFuture<>();
+ result.completeExceptionally(ex);
+ return result;
+ }
+ return apiClient.invokeAPIAsync(
+ "PATCH",
+ builder,
+ localVarHeaderParams,
+ new String[] {"application/json"},
+ localVarPostBody,
+ new HashMap(),
+ false,
+ new GenericType() {});
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountAttributes.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountAttributes.java
new file mode 100644
index 00000000000..2308bcb6552
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountAttributes.java
@@ -0,0 +1,182 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Attributes for a web integration account. */
+@JsonPropertyOrder({
+ WebIntegrationAccountAttributes.JSON_PROPERTY_NAME,
+ WebIntegrationAccountAttributes.JSON_PROPERTY_SETTINGS
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountAttributes {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_NAME = "name";
+ private String name;
+
+ public static final String JSON_PROPERTY_SETTINGS = "settings";
+ private Map settings = new HashMap();
+
+ public WebIntegrationAccountAttributes() {}
+
+ @JsonCreator
+ public WebIntegrationAccountAttributes(
+ @JsonProperty(required = true, value = JSON_PROPERTY_NAME) String name,
+ @JsonProperty(required = true, value = JSON_PROPERTY_SETTINGS) Map settings) {
+ this.name = name;
+ this.settings = settings;
+ }
+
+ public WebIntegrationAccountAttributes name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * The name of the account.
+ *
+ * @return name
+ */
+ @JsonProperty(JSON_PROPERTY_NAME)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public WebIntegrationAccountAttributes settings(Map settings) {
+ this.settings = settings;
+ return this;
+ }
+
+ public WebIntegrationAccountAttributes putSettingsItem(String key, Object settingsItem) {
+ this.settings.put(key, settingsItem);
+ return this;
+ }
+
+ /**
+ * Integration-specific settings for the account. The structure and required fields vary by
+ * integration type. Use the schema endpoint to retrieve the specific requirements for each
+ * integration.
+ *
+ * @return settings
+ */
+ @JsonProperty(JSON_PROPERTY_SETTINGS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public Map getSettings() {
+ return settings;
+ }
+
+ public void setSettings(Map settings) {
+ this.settings = settings;
+ }
+
+ /**
+ * 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 WebIntegrationAccountAttributes
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountAttributes 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 WebIntegrationAccountAttributes object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountAttributes webIntegrationAccountAttributes =
+ (WebIntegrationAccountAttributes) o;
+ return Objects.equals(this.name, webIntegrationAccountAttributes.name)
+ && Objects.equals(this.settings, webIntegrationAccountAttributes.settings)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountAttributes.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, settings, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountAttributes {\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" settings: ").append(toIndentedString(settings)).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/WebIntegrationAccountCreateRequest.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequest.java
new file mode 100644
index 00000000000..076f13c8f96
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Payload for creating a web integration account. */
+@JsonPropertyOrder({WebIntegrationAccountCreateRequest.JSON_PROPERTY_DATA})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountCreateRequest {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_DATA = "data";
+ private WebIntegrationAccountCreateRequestData data;
+
+ public WebIntegrationAccountCreateRequest() {}
+
+ @JsonCreator
+ public WebIntegrationAccountCreateRequest(
+ @JsonProperty(required = true, value = JSON_PROPERTY_DATA)
+ WebIntegrationAccountCreateRequestData data) {
+ this.data = data;
+ this.unparsed |= data.unparsed;
+ }
+
+ public WebIntegrationAccountCreateRequest data(WebIntegrationAccountCreateRequestData data) {
+ this.data = data;
+ this.unparsed |= data.unparsed;
+ return this;
+ }
+
+ /**
+ * Data object for creating a web integration account.
+ *
+ * @return data
+ */
+ @JsonProperty(JSON_PROPERTY_DATA)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountCreateRequestData getData() {
+ return data;
+ }
+
+ public void setData(WebIntegrationAccountCreateRequestData data) {
+ this.data = data;
+ }
+
+ /**
+ * 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 WebIntegrationAccountCreateRequest
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountCreateRequest 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 WebIntegrationAccountCreateRequest object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountCreateRequest webIntegrationAccountCreateRequest =
+ (WebIntegrationAccountCreateRequest) o;
+ return Objects.equals(this.data, webIntegrationAccountCreateRequest.data)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountCreateRequest.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(data, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountCreateRequest {\n");
+ sb.append(" data: ").append(toIndentedString(data)).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/WebIntegrationAccountCreateRequestAttributes.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequestAttributes.java
new file mode 100644
index 00000000000..442352dd177
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequestAttributes.java
@@ -0,0 +1,221 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Attributes for creating a web integration account. */
+@JsonPropertyOrder({
+ WebIntegrationAccountCreateRequestAttributes.JSON_PROPERTY_NAME,
+ WebIntegrationAccountCreateRequestAttributes.JSON_PROPERTY_SECRETS,
+ WebIntegrationAccountCreateRequestAttributes.JSON_PROPERTY_SETTINGS
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountCreateRequestAttributes {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_NAME = "name";
+ private String name;
+
+ public static final String JSON_PROPERTY_SECRETS = "secrets";
+ private Map secrets = new HashMap();
+
+ public static final String JSON_PROPERTY_SETTINGS = "settings";
+ private Map settings = new HashMap();
+
+ public WebIntegrationAccountCreateRequestAttributes() {}
+
+ @JsonCreator
+ public WebIntegrationAccountCreateRequestAttributes(
+ @JsonProperty(required = true, value = JSON_PROPERTY_NAME) String name,
+ @JsonProperty(required = true, value = JSON_PROPERTY_SECRETS) Map secrets,
+ @JsonProperty(required = true, value = JSON_PROPERTY_SETTINGS) Map settings) {
+ this.name = name;
+ this.secrets = secrets;
+ this.settings = settings;
+ }
+
+ public WebIntegrationAccountCreateRequestAttributes name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * The name of the account.
+ *
+ * @return name
+ */
+ @JsonProperty(JSON_PROPERTY_NAME)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public WebIntegrationAccountCreateRequestAttributes secrets(Map secrets) {
+ this.secrets = secrets;
+ return this;
+ }
+
+ public WebIntegrationAccountCreateRequestAttributes putSecretsItem(
+ String key, Object secretsItem) {
+ this.secrets.put(key, secretsItem);
+ return this;
+ }
+
+ /**
+ * Sensitive credentials for the account. The structure and required fields vary by integration
+ * type. These values are write-only and never returned in responses.
+ *
+ * @return secrets
+ */
+ @JsonProperty(JSON_PROPERTY_SECRETS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public Map getSecrets() {
+ return secrets;
+ }
+
+ public void setSecrets(Map secrets) {
+ this.secrets = secrets;
+ }
+
+ public WebIntegrationAccountCreateRequestAttributes settings(Map settings) {
+ this.settings = settings;
+ return this;
+ }
+
+ public WebIntegrationAccountCreateRequestAttributes putSettingsItem(
+ String key, Object settingsItem) {
+ this.settings.put(key, settingsItem);
+ return this;
+ }
+
+ /**
+ * Integration-specific settings for the account. The structure and required fields vary by
+ * integration type. Use the schema endpoint (GET
+ * /api/v2/web-integrations/{integration_name}/accounts/schema) to retrieve the specific
+ * requirements for your integration before creating an account.
+ *
+ * @return settings
+ */
+ @JsonProperty(JSON_PROPERTY_SETTINGS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public Map getSettings() {
+ return settings;
+ }
+
+ public void setSettings(Map settings) {
+ this.settings = settings;
+ }
+
+ /**
+ * 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 WebIntegrationAccountCreateRequestAttributes
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountCreateRequestAttributes 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 WebIntegrationAccountCreateRequestAttributes object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountCreateRequestAttributes webIntegrationAccountCreateRequestAttributes =
+ (WebIntegrationAccountCreateRequestAttributes) o;
+ return Objects.equals(this.name, webIntegrationAccountCreateRequestAttributes.name)
+ && Objects.equals(this.secrets, webIntegrationAccountCreateRequestAttributes.secrets)
+ && Objects.equals(this.settings, webIntegrationAccountCreateRequestAttributes.settings)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountCreateRequestAttributes.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, secrets, settings, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountCreateRequestAttributes {\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" secrets: ").append(toIndentedString(secrets)).append("\n");
+ sb.append(" settings: ").append(toIndentedString(settings)).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/WebIntegrationAccountCreateRequestData.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequestData.java
new file mode 100644
index 00000000000..4879fce5362
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountCreateRequestData.java
@@ -0,0 +1,184 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Data object for creating a web integration account. */
+@JsonPropertyOrder({
+ WebIntegrationAccountCreateRequestData.JSON_PROPERTY_ATTRIBUTES,
+ WebIntegrationAccountCreateRequestData.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountCreateRequestData {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ATTRIBUTES = "attributes";
+ private WebIntegrationAccountCreateRequestAttributes attributes;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private WebIntegrationAccountType type = WebIntegrationAccountType.ACCOUNT;
+
+ public WebIntegrationAccountCreateRequestData() {}
+
+ @JsonCreator
+ public WebIntegrationAccountCreateRequestData(
+ @JsonProperty(required = true, value = JSON_PROPERTY_ATTRIBUTES)
+ WebIntegrationAccountCreateRequestAttributes attributes,
+ @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) WebIntegrationAccountType type) {
+ this.attributes = attributes;
+ this.unparsed |= attributes.unparsed;
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ }
+
+ public WebIntegrationAccountCreateRequestData attributes(
+ WebIntegrationAccountCreateRequestAttributes attributes) {
+ this.attributes = attributes;
+ this.unparsed |= attributes.unparsed;
+ return this;
+ }
+
+ /**
+ * Attributes for creating a web integration account.
+ *
+ * @return attributes
+ */
+ @JsonProperty(JSON_PROPERTY_ATTRIBUTES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountCreateRequestAttributes getAttributes() {
+ return attributes;
+ }
+
+ public void setAttributes(WebIntegrationAccountCreateRequestAttributes attributes) {
+ this.attributes = attributes;
+ }
+
+ public WebIntegrationAccountCreateRequestData type(WebIntegrationAccountType type) {
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ return this;
+ }
+
+ /**
+ * The JSON:API type for web integration accounts.
+ *
+ * @return type
+ */
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountType getType() {
+ return type;
+ }
+
+ public void setType(WebIntegrationAccountType 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 WebIntegrationAccountCreateRequestData
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountCreateRequestData 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 WebIntegrationAccountCreateRequestData object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountCreateRequestData webIntegrationAccountCreateRequestData =
+ (WebIntegrationAccountCreateRequestData) o;
+ return Objects.equals(this.attributes, webIntegrationAccountCreateRequestData.attributes)
+ && Objects.equals(this.type, webIntegrationAccountCreateRequestData.type)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountCreateRequestData.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(attributes, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountCreateRequestData {\n");
+ sb.append(" attributes: ").append(toIndentedString(attributes)).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/WebIntegrationAccountResponse.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountResponse.java
new file mode 100644
index 00000000000..98d8ea7eb3f
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountResponse.java
@@ -0,0 +1,166 @@
+/*
+ * 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.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Response containing a single web integration account. */
+@JsonPropertyOrder({
+ WebIntegrationAccountResponse.JSON_PROPERTY_DATA,
+ WebIntegrationAccountResponse.JSON_PROPERTY_INTEGRATION_NAME
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountResponse {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_DATA = "data";
+ private WebIntegrationAccountResponseData data;
+
+ public static final String JSON_PROPERTY_INTEGRATION_NAME = "integration_name";
+ private String integrationName;
+
+ public WebIntegrationAccountResponse data(WebIntegrationAccountResponseData data) {
+ this.data = data;
+ this.unparsed |= data.unparsed;
+ return this;
+ }
+
+ /**
+ * Data object for a web integration account response.
+ *
+ * @return data
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_DATA)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public WebIntegrationAccountResponseData getData() {
+ return data;
+ }
+
+ public void setData(WebIntegrationAccountResponseData data) {
+ this.data = data;
+ }
+
+ public WebIntegrationAccountResponse integrationName(String integrationName) {
+ this.integrationName = integrationName;
+ return this;
+ }
+
+ /**
+ * The name of the integration.
+ *
+ * @return integrationName
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_INTEGRATION_NAME)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getIntegrationName() {
+ return integrationName;
+ }
+
+ public void setIntegrationName(String integrationName) {
+ this.integrationName = integrationName;
+ }
+
+ /**
+ * 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 WebIntegrationAccountResponse
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountResponse 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 WebIntegrationAccountResponse object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountResponse webIntegrationAccountResponse = (WebIntegrationAccountResponse) o;
+ return Objects.equals(this.data, webIntegrationAccountResponse.data)
+ && Objects.equals(this.integrationName, webIntegrationAccountResponse.integrationName)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountResponse.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(data, integrationName, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountResponse {\n");
+ sb.append(" data: ").append(toIndentedString(data)).append("\n");
+ sb.append(" integrationName: ").append(toIndentedString(integrationName)).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/WebIntegrationAccountResponseData.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountResponseData.java
new file mode 100644
index 00000000000..fc9dbb31777
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountResponseData.java
@@ -0,0 +1,211 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Data object for a web integration account response. */
+@JsonPropertyOrder({
+ WebIntegrationAccountResponseData.JSON_PROPERTY_ATTRIBUTES,
+ WebIntegrationAccountResponseData.JSON_PROPERTY_ID,
+ WebIntegrationAccountResponseData.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountResponseData {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ATTRIBUTES = "attributes";
+ private WebIntegrationAccountAttributes attributes;
+
+ public static final String JSON_PROPERTY_ID = "id";
+ private String id;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private WebIntegrationAccountType type = WebIntegrationAccountType.ACCOUNT;
+
+ public WebIntegrationAccountResponseData() {}
+
+ @JsonCreator
+ public WebIntegrationAccountResponseData(
+ @JsonProperty(required = true, value = JSON_PROPERTY_ATTRIBUTES)
+ WebIntegrationAccountAttributes attributes,
+ @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id,
+ @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) WebIntegrationAccountType type) {
+ this.attributes = attributes;
+ this.unparsed |= attributes.unparsed;
+ this.id = id;
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ }
+
+ public WebIntegrationAccountResponseData attributes(WebIntegrationAccountAttributes attributes) {
+ this.attributes = attributes;
+ this.unparsed |= attributes.unparsed;
+ return this;
+ }
+
+ /**
+ * Attributes for a web integration account.
+ *
+ * @return attributes
+ */
+ @JsonProperty(JSON_PROPERTY_ATTRIBUTES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountAttributes getAttributes() {
+ return attributes;
+ }
+
+ public void setAttributes(WebIntegrationAccountAttributes attributes) {
+ this.attributes = attributes;
+ }
+
+ public WebIntegrationAccountResponseData id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * The unique identifier for the account.
+ *
+ * @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 WebIntegrationAccountResponseData type(WebIntegrationAccountType type) {
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ return this;
+ }
+
+ /**
+ * The JSON:API type for web integration accounts.
+ *
+ * @return type
+ */
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountType getType() {
+ return type;
+ }
+
+ public void setType(WebIntegrationAccountType 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 WebIntegrationAccountResponseData
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountResponseData 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 WebIntegrationAccountResponseData object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountResponseData webIntegrationAccountResponseData =
+ (WebIntegrationAccountResponseData) o;
+ return Objects.equals(this.attributes, webIntegrationAccountResponseData.attributes)
+ && Objects.equals(this.id, webIntegrationAccountResponseData.id)
+ && Objects.equals(this.type, webIntegrationAccountResponseData.type)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountResponseData.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(attributes, id, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountResponseData {\n");
+ sb.append(" attributes: ").append(toIndentedString(attributes)).append("\n");
+ sb.append(" id: ").append(toIndentedString(id)).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/WebIntegrationAccountSchemaResponse.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponse.java
new file mode 100644
index 00000000000..361def8e396
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponse.java
@@ -0,0 +1,283 @@
+/*
+ * 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;
+
+/**
+ * Response containing the JSON schema for an integration's account configuration. This schema
+ * defines the required and optional fields for both settings and secrets, including field types,
+ * validation rules, and descriptions.
+ *
+ * The response is a standard JSON Schema
+ * (draft-07) document describing the account configuration structure. Because this is a dynamic
+ * JSON Schema, the exact properties vary by integration.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountSchemaResponse.JSON_PROPERTY__SCHEMA,
+ WebIntegrationAccountSchemaResponse.JSON_PROPERTY_ADDITIONAL_PROPERTIES,
+ WebIntegrationAccountSchemaResponse.JSON_PROPERTY_PROPERTIES,
+ WebIntegrationAccountSchemaResponse.JSON_PROPERTY_REQUIRED,
+ WebIntegrationAccountSchemaResponse.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountSchemaResponse {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY__SCHEMA = "$schema";
+ private String Schema;
+
+ public static final String JSON_PROPERTY_ADDITIONAL_PROPERTIES = "additionalProperties";
+ private Boolean additionalProperties;
+
+ public static final String JSON_PROPERTY_PROPERTIES = "properties";
+ private WebIntegrationAccountSchemaResponseProperties properties;
+
+ public static final String JSON_PROPERTY_REQUIRED = "required";
+ private List required = new ArrayList<>();
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private String type;
+
+ public WebIntegrationAccountSchemaResponse() {}
+
+ @JsonCreator
+ public WebIntegrationAccountSchemaResponse(
+ @JsonProperty(required = true, value = JSON_PROPERTY__SCHEMA) String Schema,
+ @JsonProperty(required = true, value = JSON_PROPERTY_PROPERTIES)
+ WebIntegrationAccountSchemaResponseProperties properties,
+ @JsonProperty(required = true, value = JSON_PROPERTY_REQUIRED) List required,
+ @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) String type) {
+ this.Schema = Schema;
+ this.properties = properties;
+ this.unparsed |= properties.unparsed;
+ this.required = required;
+ this.type = type;
+ }
+
+ public WebIntegrationAccountSchemaResponse Schema(String Schema) {
+ this.Schema = Schema;
+ return this;
+ }
+
+ /**
+ * The JSON Schema version URI.
+ *
+ * @return Schema
+ */
+ @JsonProperty(JSON_PROPERTY__SCHEMA)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public String getSchema() {
+ return Schema;
+ }
+
+ public void setSchema(String Schema) {
+ this.Schema = Schema;
+ }
+
+ public WebIntegrationAccountSchemaResponse additionalProperties(Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ return this;
+ }
+
+ /**
+ * Whether additional properties are allowed at the root level (typically false).
+ *
+ * @return additionalProperties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Boolean getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ public void setAdditionalProperties(Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ }
+
+ public WebIntegrationAccountSchemaResponse properties(
+ WebIntegrationAccountSchemaResponseProperties properties) {
+ this.properties = properties;
+ this.unparsed |= properties.unparsed;
+ return this;
+ }
+
+ /**
+ * The properties object containing settings and secrets schema definitions. Both are always
+ * present in every integration schema, but the fields within each vary depending on the specific
+ * integration.
+ *
+ * @return properties
+ */
+ @JsonProperty(JSON_PROPERTY_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountSchemaResponseProperties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(WebIntegrationAccountSchemaResponseProperties properties) {
+ this.properties = properties;
+ }
+
+ public WebIntegrationAccountSchemaResponse required(List required) {
+ this.required = required;
+ return this;
+ }
+
+ public WebIntegrationAccountSchemaResponse addRequiredItem(String requiredItem) {
+ this.required.add(requiredItem);
+ return this;
+ }
+
+ /**
+ * List of required top-level properties.
+ *
+ * @return required
+ */
+ @JsonProperty(JSON_PROPERTY_REQUIRED)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public List getRequired() {
+ return required;
+ }
+
+ public void setRequired(List required) {
+ this.required = required;
+ }
+
+ public WebIntegrationAccountSchemaResponse type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ /**
+ * The root type of the schema (always "object").
+ *
+ * @return type
+ */
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ 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 WebIntegrationAccountSchemaResponse
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountSchemaResponse 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 WebIntegrationAccountSchemaResponse object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountSchemaResponse webIntegrationAccountSchemaResponse =
+ (WebIntegrationAccountSchemaResponse) o;
+ return Objects.equals(this.Schema, webIntegrationAccountSchemaResponse.Schema)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountSchemaResponse.additionalProperties)
+ && Objects.equals(this.properties, webIntegrationAccountSchemaResponse.properties)
+ && Objects.equals(this.required, webIntegrationAccountSchemaResponse.required)
+ && Objects.equals(this.type, webIntegrationAccountSchemaResponse.type)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountSchemaResponse.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ Schema, additionalProperties, properties, required, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountSchemaResponse {\n");
+ sb.append(" Schema: ").append(toIndentedString(Schema)).append("\n");
+ sb.append(" additionalProperties: ")
+ .append(toIndentedString(additionalProperties))
+ .append("\n");
+ sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
+ sb.append(" required: ").append(toIndentedString(required)).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/WebIntegrationAccountSchemaResponseProperties.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseProperties.java
new file mode 100644
index 00000000000..ade7928b920
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseProperties.java
@@ -0,0 +1,192 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * The properties object containing settings and secrets schema definitions. Both are always present
+ * in every integration schema, but the fields within each vary depending on the specific
+ * integration.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountSchemaResponseProperties.JSON_PROPERTY_SECRETS,
+ WebIntegrationAccountSchemaResponseProperties.JSON_PROPERTY_SETTINGS
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountSchemaResponseProperties {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_SECRETS = "secrets";
+ private WebIntegrationAccountSchemaResponseSecretsObject secrets;
+
+ public static final String JSON_PROPERTY_SETTINGS = "settings";
+ private WebIntegrationAccountSchemaResponseSettingsObject settings;
+
+ public WebIntegrationAccountSchemaResponseProperties() {}
+
+ @JsonCreator
+ public WebIntegrationAccountSchemaResponseProperties(
+ @JsonProperty(required = true, value = JSON_PROPERTY_SECRETS)
+ WebIntegrationAccountSchemaResponseSecretsObject secrets,
+ @JsonProperty(required = true, value = JSON_PROPERTY_SETTINGS)
+ WebIntegrationAccountSchemaResponseSettingsObject settings) {
+ this.secrets = secrets;
+ this.unparsed |= secrets.unparsed;
+ this.settings = settings;
+ this.unparsed |= settings.unparsed;
+ }
+
+ public WebIntegrationAccountSchemaResponseProperties secrets(
+ WebIntegrationAccountSchemaResponseSecretsObject secrets) {
+ this.secrets = secrets;
+ this.unparsed |= secrets.unparsed;
+ return this;
+ }
+
+ /**
+ * JSON Schema definition for the secrets object. Contains sensitive credentials required for the
+ * integration such as API keys, tokens, and passwords. These values are write-only and never
+ * returned in responses.
+ *
+ * @return secrets
+ */
+ @JsonProperty(JSON_PROPERTY_SECRETS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountSchemaResponseSecretsObject getSecrets() {
+ return secrets;
+ }
+
+ public void setSecrets(WebIntegrationAccountSchemaResponseSecretsObject secrets) {
+ this.secrets = secrets;
+ }
+
+ public WebIntegrationAccountSchemaResponseProperties settings(
+ WebIntegrationAccountSchemaResponseSettingsObject settings) {
+ this.settings = settings;
+ this.unparsed |= settings.unparsed;
+ return this;
+ }
+
+ /**
+ * JSON Schema definition for the settings object. Contains integration-specific configuration
+ * fields such as account identifiers, feature toggles, and non-sensitive configuration options.
+ *
+ * @return settings
+ */
+ @JsonProperty(JSON_PROPERTY_SETTINGS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountSchemaResponseSettingsObject getSettings() {
+ return settings;
+ }
+
+ public void setSettings(WebIntegrationAccountSchemaResponseSettingsObject settings) {
+ this.settings = settings;
+ }
+
+ /**
+ * 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 WebIntegrationAccountSchemaResponseProperties
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountSchemaResponseProperties 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 WebIntegrationAccountSchemaResponseProperties object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountSchemaResponseProperties webIntegrationAccountSchemaResponseProperties =
+ (WebIntegrationAccountSchemaResponseProperties) o;
+ return Objects.equals(this.secrets, webIntegrationAccountSchemaResponseProperties.secrets)
+ && Objects.equals(this.settings, webIntegrationAccountSchemaResponseProperties.settings)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseProperties.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(secrets, settings, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountSchemaResponseProperties {\n");
+ sb.append(" secrets: ").append(toIndentedString(secrets)).append("\n");
+ sb.append(" settings: ").append(toIndentedString(settings)).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/WebIntegrationAccountSchemaResponseSecretsObject.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSecretsObject.java
new file mode 100644
index 00000000000..103e5133927
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSecretsObject.java
@@ -0,0 +1,254 @@
+/*
+ * 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.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;
+
+/**
+ * JSON Schema definition for the secrets object. Contains sensitive credentials required for the
+ * integration such as API keys, tokens, and passwords. These values are write-only and never
+ * returned in responses.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountSchemaResponseSecretsObject.JSON_PROPERTY_ADDITIONAL_PROPERTIES,
+ WebIntegrationAccountSchemaResponseSecretsObject.JSON_PROPERTY_PROPERTIES,
+ WebIntegrationAccountSchemaResponseSecretsObject.JSON_PROPERTY_REQUIRED,
+ WebIntegrationAccountSchemaResponseSecretsObject.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountSchemaResponseSecretsObject {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ADDITIONAL_PROPERTIES = "additionalProperties";
+ private Boolean additionalProperties;
+
+ public static final String JSON_PROPERTY_PROPERTIES = "properties";
+ private Map properties = null;
+
+ public static final String JSON_PROPERTY_REQUIRED = "required";
+ private List required = null;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private String type;
+
+ public WebIntegrationAccountSchemaResponseSecretsObject additionalProperties(
+ Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ return this;
+ }
+
+ /**
+ * Whether additional properties are allowed (typically false).
+ *
+ * @return additionalProperties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Boolean getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ public void setAdditionalProperties(Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ }
+
+ public WebIntegrationAccountSchemaResponseSecretsObject properties(
+ Map properties) {
+ this.properties = properties;
+ return this;
+ }
+
+ public WebIntegrationAccountSchemaResponseSecretsObject putPropertiesItem(
+ String key, WebIntegrationAccountSchemaResponseSettingsField propertiesItem) {
+ if (this.properties == null) {
+ this.properties = new HashMap<>();
+ }
+ this.properties.put(key, propertiesItem);
+ return this;
+ }
+
+ /**
+ * The individual secret fields for this integration. Field names and types vary by integration.
+ *
+ * @return properties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Map getProperties() {
+ return properties;
+ }
+
+ public void setProperties(
+ Map properties) {
+ this.properties = properties;
+ }
+
+ public WebIntegrationAccountSchemaResponseSecretsObject required(List required) {
+ this.required = required;
+ return this;
+ }
+
+ public WebIntegrationAccountSchemaResponseSecretsObject addRequiredItem(String requiredItem) {
+ if (this.required == null) {
+ this.required = new ArrayList<>();
+ }
+ this.required.add(requiredItem);
+ return this;
+ }
+
+ /**
+ * List of required secret field names.
+ *
+ * @return required
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_REQUIRED)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public List getRequired() {
+ return required;
+ }
+
+ public void setRequired(List required) {
+ this.required = required;
+ }
+
+ public WebIntegrationAccountSchemaResponseSecretsObject type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ /**
+ * Always "object" for the secrets container.
+ *
+ * @return type
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ 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 WebIntegrationAccountSchemaResponseSecretsObject
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountSchemaResponseSecretsObject 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 WebIntegrationAccountSchemaResponseSecretsObject object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountSchemaResponseSecretsObject
+ webIntegrationAccountSchemaResponseSecretsObject =
+ (WebIntegrationAccountSchemaResponseSecretsObject) o;
+ return Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSecretsObject.additionalProperties)
+ && Objects.equals(
+ this.properties, webIntegrationAccountSchemaResponseSecretsObject.properties)
+ && Objects.equals(this.required, webIntegrationAccountSchemaResponseSecretsObject.required)
+ && Objects.equals(this.type, webIntegrationAccountSchemaResponseSecretsObject.type)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSecretsObject.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(additionalProperties, properties, required, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountSchemaResponseSecretsObject {\n");
+ sb.append(" additionalProperties: ")
+ .append(toIndentedString(additionalProperties))
+ .append("\n");
+ sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
+ sb.append(" required: ").append(toIndentedString(required)).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/WebIntegrationAccountSchemaResponseSettingsField.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSettingsField.java
new file mode 100644
index 00000000000..72c2ddfc52a
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSettingsField.java
@@ -0,0 +1,288 @@
+/*
+ * 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.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * JSON Schema definition for a single field within settings or secrets. The exact fields vary by
+ * integration.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_ADDITIONAL_PROPERTIES,
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_DEFAULT,
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_DESCRIPTION,
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_ITEMS,
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_MIN_LENGTH,
+ WebIntegrationAccountSchemaResponseSettingsField.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountSchemaResponseSettingsField {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ADDITIONAL_PROPERTIES = "additionalProperties";
+ private Boolean additionalProperties;
+
+ public static final String JSON_PROPERTY_DEFAULT = "default";
+ private Object _default = null;
+
+ public static final String JSON_PROPERTY_DESCRIPTION = "description";
+ private String description;
+
+ public static final String JSON_PROPERTY_ITEMS = "items";
+ private Object items;
+
+ public static final String JSON_PROPERTY_MIN_LENGTH = "minLength";
+ private Long minLength;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private String type;
+
+ public WebIntegrationAccountSchemaResponseSettingsField additionalProperties(
+ Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ return this;
+ }
+
+ /**
+ * Whether additional properties are allowed for this field.
+ *
+ * @return additionalProperties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Boolean getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ public void setAdditionalProperties(Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsField _default(Object _default) {
+ this._default = _default;
+ return this;
+ }
+
+ /**
+ * Default value for the field if not provided.
+ *
+ * @return _default
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_DEFAULT)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Object getDefault() {
+ return _default;
+ }
+
+ public void setDefault(Object _default) {
+ this._default = _default;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsField description(String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Human-readable description of the field's purpose.
+ *
+ * @return description
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsField items(Object items) {
+ this.items = items;
+ return this;
+ }
+
+ /**
+ * Schema for array items when type is "array".
+ *
+ * @return items
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ITEMS)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Object getItems() {
+ return items;
+ }
+
+ public void setItems(Object items) {
+ this.items = items;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsField minLength(Long minLength) {
+ this.minLength = minLength;
+ return this;
+ }
+
+ /**
+ * Minimum length for string fields.
+ *
+ * @return minLength
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_MIN_LENGTH)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Long getMinLength() {
+ return minLength;
+ }
+
+ public void setMinLength(Long minLength) {
+ this.minLength = minLength;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsField type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ /**
+ * The data type of the field (string, boolean, integer, array, object).
+ *
+ * @return type
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ 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 WebIntegrationAccountSchemaResponseSettingsField
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountSchemaResponseSettingsField 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 WebIntegrationAccountSchemaResponseSettingsField object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountSchemaResponseSettingsField
+ webIntegrationAccountSchemaResponseSettingsField =
+ (WebIntegrationAccountSchemaResponseSettingsField) o;
+ return Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSettingsField.additionalProperties)
+ && Objects.equals(this._default, webIntegrationAccountSchemaResponseSettingsField._default)
+ && Objects.equals(
+ this.description, webIntegrationAccountSchemaResponseSettingsField.description)
+ && Objects.equals(this.items, webIntegrationAccountSchemaResponseSettingsField.items)
+ && Objects.equals(
+ this.minLength, webIntegrationAccountSchemaResponseSettingsField.minLength)
+ && Objects.equals(this.type, webIntegrationAccountSchemaResponseSettingsField.type)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSettingsField.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ additionalProperties, _default, description, items, minLength, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountSchemaResponseSettingsField {\n");
+ sb.append(" additionalProperties: ")
+ .append(toIndentedString(additionalProperties))
+ .append("\n");
+ sb.append(" _default: ").append(toIndentedString(_default)).append("\n");
+ sb.append(" description: ").append(toIndentedString(description)).append("\n");
+ sb.append(" items: ").append(toIndentedString(items)).append("\n");
+ sb.append(" minLength: ").append(toIndentedString(minLength)).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/WebIntegrationAccountSchemaResponseSettingsObject.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSettingsObject.java
new file mode 100644
index 00000000000..7b3441573c7
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountSchemaResponseSettingsObject.java
@@ -0,0 +1,253 @@
+/*
+ * 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.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;
+
+/**
+ * JSON Schema definition for the settings object. Contains integration-specific configuration
+ * fields such as account identifiers, feature toggles, and non-sensitive configuration options.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountSchemaResponseSettingsObject.JSON_PROPERTY_ADDITIONAL_PROPERTIES,
+ WebIntegrationAccountSchemaResponseSettingsObject.JSON_PROPERTY_PROPERTIES,
+ WebIntegrationAccountSchemaResponseSettingsObject.JSON_PROPERTY_REQUIRED,
+ WebIntegrationAccountSchemaResponseSettingsObject.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountSchemaResponseSettingsObject {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ADDITIONAL_PROPERTIES = "additionalProperties";
+ private Boolean additionalProperties;
+
+ public static final String JSON_PROPERTY_PROPERTIES = "properties";
+ private Map properties = null;
+
+ public static final String JSON_PROPERTY_REQUIRED = "required";
+ private List required = null;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private String type;
+
+ public WebIntegrationAccountSchemaResponseSettingsObject additionalProperties(
+ Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ return this;
+ }
+
+ /**
+ * Whether additional properties are allowed (typically false).
+ *
+ * @return additionalProperties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Boolean getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ public void setAdditionalProperties(Boolean additionalProperties) {
+ this.additionalProperties = additionalProperties;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsObject properties(
+ Map properties) {
+ this.properties = properties;
+ return this;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsObject putPropertiesItem(
+ String key, WebIntegrationAccountSchemaResponseSettingsField propertiesItem) {
+ if (this.properties == null) {
+ this.properties = new HashMap<>();
+ }
+ this.properties.put(key, propertiesItem);
+ return this;
+ }
+
+ /**
+ * The individual setting fields for this integration. Field names and types vary by integration.
+ *
+ * @return properties
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_PROPERTIES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Map getProperties() {
+ return properties;
+ }
+
+ public void setProperties(
+ Map properties) {
+ this.properties = properties;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsObject required(List required) {
+ this.required = required;
+ return this;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsObject addRequiredItem(String requiredItem) {
+ if (this.required == null) {
+ this.required = new ArrayList<>();
+ }
+ this.required.add(requiredItem);
+ return this;
+ }
+
+ /**
+ * List of required setting field names.
+ *
+ * @return required
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_REQUIRED)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public List getRequired() {
+ return required;
+ }
+
+ public void setRequired(List required) {
+ this.required = required;
+ }
+
+ public WebIntegrationAccountSchemaResponseSettingsObject type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ /**
+ * Always "object" for the settings container.
+ *
+ * @return type
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ 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 WebIntegrationAccountSchemaResponseSettingsObject
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountSchemaResponseSettingsObject 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 WebIntegrationAccountSchemaResponseSettingsObject object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountSchemaResponseSettingsObject
+ webIntegrationAccountSchemaResponseSettingsObject =
+ (WebIntegrationAccountSchemaResponseSettingsObject) o;
+ return Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSettingsObject.additionalProperties)
+ && Objects.equals(
+ this.properties, webIntegrationAccountSchemaResponseSettingsObject.properties)
+ && Objects.equals(this.required, webIntegrationAccountSchemaResponseSettingsObject.required)
+ && Objects.equals(this.type, webIntegrationAccountSchemaResponseSettingsObject.type)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountSchemaResponseSettingsObject.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(additionalProperties, properties, required, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountSchemaResponseSettingsObject {\n");
+ sb.append(" additionalProperties: ")
+ .append(toIndentedString(additionalProperties))
+ .append("\n");
+ sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
+ sb.append(" required: ").append(toIndentedString(required)).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/WebIntegrationAccountType.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountType.java
new file mode 100644
index 00000000000..99fc2e19815
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountType.java
@@ -0,0 +1,55 @@
+/*
+ * 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 JSON:API type for web integration accounts. */
+@JsonSerialize(using = WebIntegrationAccountType.WebIntegrationAccountTypeSerializer.class)
+public class WebIntegrationAccountType extends ModelEnum {
+
+ private static final Set allowedValues = new HashSet(Arrays.asList("Account"));
+
+ public static final WebIntegrationAccountType ACCOUNT = new WebIntegrationAccountType("Account");
+
+ WebIntegrationAccountType(String value) {
+ super(value, allowedValues);
+ }
+
+ public static class WebIntegrationAccountTypeSerializer
+ extends StdSerializer {
+ public WebIntegrationAccountTypeSerializer(Class t) {
+ super(t);
+ }
+
+ public WebIntegrationAccountTypeSerializer() {
+ this(null);
+ }
+
+ @Override
+ public void serialize(
+ WebIntegrationAccountType value, JsonGenerator jgen, SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeObject(value.value);
+ }
+ }
+
+ @JsonCreator
+ public static WebIntegrationAccountType fromValue(String value) {
+ return new WebIntegrationAccountType(value);
+ }
+}
diff --git a/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequest.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequest.java
new file mode 100644
index 00000000000..b31834191a0
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Payload for updating a web integration account. */
+@JsonPropertyOrder({WebIntegrationAccountUpdateRequest.JSON_PROPERTY_DATA})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountUpdateRequest {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_DATA = "data";
+ private WebIntegrationAccountUpdateRequestData data;
+
+ public WebIntegrationAccountUpdateRequest() {}
+
+ @JsonCreator
+ public WebIntegrationAccountUpdateRequest(
+ @JsonProperty(required = true, value = JSON_PROPERTY_DATA)
+ WebIntegrationAccountUpdateRequestData data) {
+ this.data = data;
+ this.unparsed |= data.unparsed;
+ }
+
+ public WebIntegrationAccountUpdateRequest data(WebIntegrationAccountUpdateRequestData data) {
+ this.data = data;
+ this.unparsed |= data.unparsed;
+ return this;
+ }
+
+ /**
+ * Data object for updating a web integration account.
+ *
+ * @return data
+ */
+ @JsonProperty(JSON_PROPERTY_DATA)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountUpdateRequestData getData() {
+ return data;
+ }
+
+ public void setData(WebIntegrationAccountUpdateRequestData data) {
+ this.data = data;
+ }
+
+ /**
+ * 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 WebIntegrationAccountUpdateRequest
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountUpdateRequest 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 WebIntegrationAccountUpdateRequest object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountUpdateRequest webIntegrationAccountUpdateRequest =
+ (WebIntegrationAccountUpdateRequest) o;
+ return Objects.equals(this.data, webIntegrationAccountUpdateRequest.data)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountUpdateRequest.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(data, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountUpdateRequest {\n");
+ sb.append(" data: ").append(toIndentedString(data)).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/WebIntegrationAccountUpdateRequestAttributes.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequestAttributes.java
new file mode 100644
index 00000000000..e002eee3fa0
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequestAttributes.java
@@ -0,0 +1,218 @@
+/*
+ * 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.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Attributes for updating a web integration account. All fields are optional; only provide the
+ * fields you want to update.
+ */
+@JsonPropertyOrder({
+ WebIntegrationAccountUpdateRequestAttributes.JSON_PROPERTY_NAME,
+ WebIntegrationAccountUpdateRequestAttributes.JSON_PROPERTY_SECRETS,
+ WebIntegrationAccountUpdateRequestAttributes.JSON_PROPERTY_SETTINGS
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountUpdateRequestAttributes {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_NAME = "name";
+ private String name;
+
+ public static final String JSON_PROPERTY_SECRETS = "secrets";
+ private Map secrets = null;
+
+ public static final String JSON_PROPERTY_SETTINGS = "settings";
+ private Map settings = null;
+
+ public WebIntegrationAccountUpdateRequestAttributes name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * The name of the account.
+ *
+ * @return name
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_NAME)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public WebIntegrationAccountUpdateRequestAttributes secrets(Map secrets) {
+ this.secrets = secrets;
+ return this;
+ }
+
+ public WebIntegrationAccountUpdateRequestAttributes putSecretsItem(
+ String key, Object secretsItem) {
+ if (this.secrets == null) {
+ this.secrets = new HashMap<>();
+ }
+ this.secrets.put(key, secretsItem);
+ return this;
+ }
+
+ /**
+ * Sensitive credentials to update. Only the secrets provided are updated. These values are
+ * write-only and never returned in responses.
+ *
+ * @return secrets
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_SECRETS)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Map getSecrets() {
+ return secrets;
+ }
+
+ public void setSecrets(Map secrets) {
+ this.secrets = secrets;
+ }
+
+ public WebIntegrationAccountUpdateRequestAttributes settings(Map settings) {
+ this.settings = settings;
+ return this;
+ }
+
+ public WebIntegrationAccountUpdateRequestAttributes putSettingsItem(
+ String key, Object settingsItem) {
+ if (this.settings == null) {
+ this.settings = new HashMap<>();
+ }
+ this.settings.put(key, settingsItem);
+ return this;
+ }
+
+ /**
+ * Integration-specific settings to update. Only the fields provided are updated. The structure
+ * varies by integration type. See the integration's schema for available fields.
+ *
+ * @return settings
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_SETTINGS)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public Map getSettings() {
+ return settings;
+ }
+
+ public void setSettings(Map settings) {
+ this.settings = settings;
+ }
+
+ /**
+ * 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 WebIntegrationAccountUpdateRequestAttributes
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountUpdateRequestAttributes 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 WebIntegrationAccountUpdateRequestAttributes object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountUpdateRequestAttributes webIntegrationAccountUpdateRequestAttributes =
+ (WebIntegrationAccountUpdateRequestAttributes) o;
+ return Objects.equals(this.name, webIntegrationAccountUpdateRequestAttributes.name)
+ && Objects.equals(this.secrets, webIntegrationAccountUpdateRequestAttributes.secrets)
+ && Objects.equals(this.settings, webIntegrationAccountUpdateRequestAttributes.settings)
+ && Objects.equals(
+ this.additionalProperties,
+ webIntegrationAccountUpdateRequestAttributes.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, secrets, settings, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountUpdateRequestAttributes {\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" secrets: ").append(toIndentedString(secrets)).append("\n");
+ sb.append(" settings: ").append(toIndentedString(settings)).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/WebIntegrationAccountUpdateRequestData.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequestData.java
new file mode 100644
index 00000000000..e4b061e0e62
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountUpdateRequestData.java
@@ -0,0 +1,182 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/** Data object for updating a web integration account. */
+@JsonPropertyOrder({
+ WebIntegrationAccountUpdateRequestData.JSON_PROPERTY_ATTRIBUTES,
+ WebIntegrationAccountUpdateRequestData.JSON_PROPERTY_TYPE
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountUpdateRequestData {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_ATTRIBUTES = "attributes";
+ private WebIntegrationAccountUpdateRequestAttributes attributes;
+
+ public static final String JSON_PROPERTY_TYPE = "type";
+ private WebIntegrationAccountType type = WebIntegrationAccountType.ACCOUNT;
+
+ public WebIntegrationAccountUpdateRequestData() {}
+
+ @JsonCreator
+ public WebIntegrationAccountUpdateRequestData(
+ @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) WebIntegrationAccountType type) {
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ }
+
+ public WebIntegrationAccountUpdateRequestData attributes(
+ WebIntegrationAccountUpdateRequestAttributes attributes) {
+ this.attributes = attributes;
+ this.unparsed |= attributes.unparsed;
+ return this;
+ }
+
+ /**
+ * Attributes for updating a web integration account. All fields are optional; only provide the
+ * fields you want to update.
+ *
+ * @return attributes
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ATTRIBUTES)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public WebIntegrationAccountUpdateRequestAttributes getAttributes() {
+ return attributes;
+ }
+
+ public void setAttributes(WebIntegrationAccountUpdateRequestAttributes attributes) {
+ this.attributes = attributes;
+ }
+
+ public WebIntegrationAccountUpdateRequestData type(WebIntegrationAccountType type) {
+ this.type = type;
+ this.unparsed |= !type.isValid();
+ return this;
+ }
+
+ /**
+ * The JSON:API type for web integration accounts.
+ *
+ * @return type
+ */
+ @JsonProperty(JSON_PROPERTY_TYPE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public WebIntegrationAccountType getType() {
+ return type;
+ }
+
+ public void setType(WebIntegrationAccountType 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 WebIntegrationAccountUpdateRequestData
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountUpdateRequestData 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 WebIntegrationAccountUpdateRequestData object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountUpdateRequestData webIntegrationAccountUpdateRequestData =
+ (WebIntegrationAccountUpdateRequestData) o;
+ return Objects.equals(this.attributes, webIntegrationAccountUpdateRequestData.attributes)
+ && Objects.equals(this.type, webIntegrationAccountUpdateRequestData.type)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountUpdateRequestData.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(attributes, type, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountUpdateRequestData {\n");
+ sb.append(" attributes: ").append(toIndentedString(attributes)).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/WebIntegrationAccountsResponse.java b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountsResponse.java
new file mode 100644
index 00000000000..e49aa3b164f
--- /dev/null
+++ b/src/main/java/com/datadog/api/client/v2/model/WebIntegrationAccountsResponse.java
@@ -0,0 +1,180 @@
+/*
+ * 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.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;
+
+/** Response containing a list of web integration accounts. */
+@JsonPropertyOrder({
+ WebIntegrationAccountsResponse.JSON_PROPERTY_DATA,
+ WebIntegrationAccountsResponse.JSON_PROPERTY_INTEGRATION_NAME
+})
+@jakarta.annotation.Generated(
+ value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator")
+public class WebIntegrationAccountsResponse {
+ @JsonIgnore public boolean unparsed = false;
+ public static final String JSON_PROPERTY_DATA = "data";
+ private List data = null;
+
+ public static final String JSON_PROPERTY_INTEGRATION_NAME = "integration_name";
+ private String integrationName;
+
+ public WebIntegrationAccountsResponse data(List data) {
+ this.data = data;
+ for (WebIntegrationAccountResponseData item : data) {
+ this.unparsed |= item.unparsed;
+ }
+ return this;
+ }
+
+ public WebIntegrationAccountsResponse addDataItem(WebIntegrationAccountResponseData dataItem) {
+ if (this.data == null) {
+ this.data = new ArrayList<>();
+ }
+ this.data.add(dataItem);
+ this.unparsed |= dataItem.unparsed;
+ return this;
+ }
+
+ /**
+ * Getdata
+ *
+ * @return data
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_DATA)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ public WebIntegrationAccountsResponse integrationName(String integrationName) {
+ this.integrationName = integrationName;
+ return this;
+ }
+
+ /**
+ * The name of the integration.
+ *
+ * @return integrationName
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_INTEGRATION_NAME)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getIntegrationName() {
+ return integrationName;
+ }
+
+ public void setIntegrationName(String integrationName) {
+ this.integrationName = integrationName;
+ }
+
+ /**
+ * 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 WebIntegrationAccountsResponse
+ */
+ @JsonAnySetter
+ public WebIntegrationAccountsResponse 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 WebIntegrationAccountsResponse object is equal to o. */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ WebIntegrationAccountsResponse webIntegrationAccountsResponse =
+ (WebIntegrationAccountsResponse) o;
+ return Objects.equals(this.data, webIntegrationAccountsResponse.data)
+ && Objects.equals(this.integrationName, webIntegrationAccountsResponse.integrationName)
+ && Objects.equals(
+ this.additionalProperties, webIntegrationAccountsResponse.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(data, integrationName, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class WebIntegrationAccountsResponse {\n");
+ sb.append(" data: ").append(toIndentedString(data)).append("\n");
+ sb.append(" integrationName: ").append(toIndentedString(integrationName)).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/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.freeze b/src/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.freeze
new file mode 100644
index 00000000000..ee56d681a17
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:21:52.989Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.json b/src/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.json
new file mode 100644
index 00000000000..f209bd46ef7
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Create_integration_account_returns_Created_response.json
@@ -0,0 +1,32 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-Create_integration_account_returns_Created_response-1768522912\",\"secrets\":{\"api_key_token\":\"test_secret_token\"},\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"591eebe4-998f-49f0-b5db-a6b76e3ff392\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Create_integration_account_returns_Created_response-1768522912\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 201,
+ "reasonPhrase": "Created"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "657e1bc8-d7c7-b991-aec2-3fcee4c48443"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.freeze
new file mode 100644
index 00000000000..54451354153
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:21:53.514Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.json
new file mode 100644
index 00000000000..101de1c080d
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Delete_integration_account_returns_OK_response.json
@@ -0,0 +1,57 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-Delete_integration_account_returns_OK_response-1768522913\",\"secrets\":{\"api_key_token\":\"test_secret_token_value\"},\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"2ef78fa1-8ebd-4dc8-8db7-1516563d9a35\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Delete_integration_account_returns_OK_response-1768522913\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 201,
+ "reasonPhrase": "Created"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "a2197037-fd4b-273c-0921-261676cde17c"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "DELETE",
+ "path": "/api/v2/web-integrations/twilio/accounts/2ef78fa1-8ebd-4dc8-8db7-1516563d9a35",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "ca5b2b00-8182-544f-6e90-27ea25d21c13"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.freeze
new file mode 100644
index 00000000000..5b4b6c40750
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:23:39.895Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.json
new file mode 100644
index 00000000000..d4dd0f759d7
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Get_account_schema_for_an_integration_returns_OK_response.json
@@ -0,0 +1,28 @@
+[
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "GET",
+ "path": "/api/v2/web-integrations/twilio/accounts/schema",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"properties\":{\"secrets\":{\"additionalProperties\":false,\"properties\":{\"api_key_token\":{\"additionalProperties\":false,\"description\":\"Twilio API Key Secret (token) corresponding to the API Key SID. Keep this secure as it provides authentication access.\",\"minLength\":1,\"type\":\"string\"}},\"required\":[\"api_key_token\"],\"type\":\"object\"},\"settings\":{\"additionalProperties\":false,\"properties\":{\"account_sid\":{\"additionalProperties\":false,\"description\":\"Twilio Account SID that uniquely identifies your Twilio account. Found in Twilio Console \\u003e Account Info.\",\"minLength\":1,\"type\":\"string\"},\"alerts\":{\"additionalProperties\":false,\"description\":\"Enable collection of Twilio Alerts logs to monitor account alerts and notifications\",\"type\":\"boolean\"},\"api_key\":{\"additionalProperties\":false,\"description\":\"Twilio API Key SID for authentication. Create from Twilio Console \\u003e Account \\u003e API Keys \\u0026 Tokens.\",\"minLength\":1,\"type\":\"string\"},\"call_summaries\":{\"additionalProperties\":false,\"description\":\"Enable collection of Twilio Voice call summaries to track voice call performance and metadata\",\"type\":\"boolean\"},\"ccm_enabled\":{\"additionalProperties\":false,\"description\":\"Enable Cloud Cost Management to monitor Twilio usage costs and identify optimization opportunities\",\"type\":\"boolean\"},\"censor_logs\":{\"additionalProperties\":false,\"description\":\"Enable censoring of sensitive data in logs. When true, phone numbers in the 'to' field and SMS message bodies are censored for privacy.\",\"type\":\"boolean\"},\"events\":{\"additionalProperties\":false,\"description\":\"Enable collection of Twilio Events logs to monitor account-level events and activities\",\"type\":\"boolean\"},\"messages\":{\"additionalProperties\":false,\"description\":\"Enable collection of Twilio Messages logs to track SMS and messaging activity\",\"type\":\"boolean\"}},\"required\":[\"api_key\",\"account_sid\",\"events\",\"messages\",\"alerts\",\"call_summaries\",\"ccm_enabled\",\"censor_logs\"],\"type\":\"object\"}},\"required\":[\"settings\",\"secrets\"],\"type\":\"object\"}",
+ "headers": {
+ "Content-Type": [
+ "application/json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "75560e83-ca56-9ae8-6233-1483d36282bd"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.freeze
new file mode 100644
index 00000000000..67caccae486
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:21:54.756Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.json
new file mode 100644
index 00000000000..c0bcbc85169
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Get_integration_account_returns_OK_response.json
@@ -0,0 +1,58 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-Get_integration_account_returns_OK_response-1768522914\",\"secrets\":{\"api_key_token\":\"test_secret_token_value\"},\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"945d4bbe-d24e-4530-a4db-3dc27329e5e8\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Get_integration_account_returns_OK_response-1768522914\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 201,
+ "reasonPhrase": "Created"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "9de09fb2-7607-508c-83c9-4886d1b755ae"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "GET",
+ "path": "/api/v2/web-integrations/twilio/accounts/945d4bbe-d24e-4530-a4db-3dc27329e5e8",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"945d4bbe-d24e-4530-a4db-3dc27329e5e8\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Get_integration_account_returns_OK_response-1768522914\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "6ec9bc6c-56a3-56c0-cad3-df1e58cb062e"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.freeze
new file mode 100644
index 00000000000..3e3e9e31421
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:21:55.952Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.json b/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.json
new file mode 100644
index 00000000000..cd2789a6ac8
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/List_integration_accounts_returns_OK_response.json
@@ -0,0 +1,58 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-List_integration_accounts_returns_OK_response-1768522915\",\"secrets\":{\"api_key_token\":\"test_secret_token_value\"},\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"a491e2ce-8537-4015-8552-d76b23f9c2a2\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-List_integration_accounts_returns_OK_response-1768522915\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 201,
+ "reasonPhrase": "Created"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "0bad62e1-1013-f327-9001-211c97a28bf6"
+ },
+ {
+ "httpRequest": {
+ "headers": {},
+ "method": "GET",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":[{\"id\":\"cea19da0-127c-46bd-af1f-dab6524dc139\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Create_integration_account_returns_Created_response-1768495642\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}},{\"id\":\"07527a04-9eab-4528-8d55-072bb4cbfdfd\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Get_integration_account_returns_OK_response-1768495644\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}},{\"id\":\"efa743ed-c968-49df-97ce-f078b8f6a871\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-List_integration_accounts_returns_OK_response-1768495645\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}},{\"id\":\"4fe972b3-5a53-414f-9304-0a683f403f46\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Update_integration_account_returns_OK_response-1768495646-updated\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":false,\"censor_logs\":true,\"events\":false,\"messages\":false}}},{\"id\":\"591eebe4-998f-49f0-b5db-a6b76e3ff392\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Create_integration_account_returns_Created_response-1768522912\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}},{\"id\":\"945d4bbe-d24e-4530-a4db-3dc27329e5e8\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Get_integration_account_returns_OK_response-1768522914\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}},{\"id\":\"a491e2ce-8537-4015-8552-d76b23f9c2a2\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-List_integration_accounts_returns_OK_response-1768522915\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}]}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "903f5d3c-6322-d306-3ec3-ef11186597bc"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.freeze
new file mode 100644
index 00000000000..954730cedd3
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.freeze
@@ -0,0 +1 @@
+2026-01-16T00:21:56.916Z
\ No newline at end of file
diff --git a/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.json
new file mode 100644
index 00000000000..d51934b8c73
--- /dev/null
+++ b/src/test/resources/cassettes/features/v2/Update_integration_account_returns_OK_response.json
@@ -0,0 +1,62 @@
+[
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-Update_integration_account_returns_OK_response-1768522916\",\"secrets\":{\"api_key_token\":\"test_secret_token_value\"},\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "POST",
+ "path": "/api/v2/web-integrations/twilio/accounts",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"4458ffbb-09e3-4b11-8b59-7ac39a766164\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Update_integration_account_returns_OK_response-1768522916\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":true,\"censor_logs\":true,\"events\":true,\"messages\":true}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 201,
+ "reasonPhrase": "Created"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "a6ebe030-cddb-9817-3ba2-5d44f3fb2e02"
+ },
+ {
+ "httpRequest": {
+ "body": {
+ "type": "JSON",
+ "json": "{\"data\":{\"attributes\":{\"name\":\"Test-Update_integration_account_returns_OK_response-1768522916-updated\",\"settings\":{\"ccm_enabled\":false,\"events\":false,\"messages\":false}},\"type\":\"Account\"}}"
+ },
+ "headers": {},
+ "method": "PATCH",
+ "path": "/api/v2/web-integrations/twilio/accounts/4458ffbb-09e3-4b11-8b59-7ac39a766164",
+ "keepAlive": false,
+ "secure": true
+ },
+ "httpResponse": {
+ "body": "{\"data\":{\"id\":\"4458ffbb-09e3-4b11-8b59-7ac39a766164\",\"type\":\"Account\",\"attributes\":{\"name\":\"Test-Update_integration_account_returns_OK_response-1768522916-updated\",\"settings\":{\"account_sid\":\"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"alerts\":true,\"api_key\":\"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"call_summaries\":true,\"ccm_enabled\":false,\"censor_logs\":true,\"events\":false,\"messages\":false}}}}",
+ "headers": {
+ "Content-Type": [
+ "application/vnd.api+json"
+ ]
+ },
+ "statusCode": 200,
+ "reasonPhrase": "OK"
+ },
+ "times": {
+ "remainingTimes": 1
+ },
+ "timeToLive": {
+ "unlimited": true
+ },
+ "id": "661977ae-dd27-b514-0f94-3ef4e63af306"
+ }
+]
\ No newline at end of file
diff --git a/src/test/resources/com/datadog/api/client/v2/api/given.json b/src/test/resources/com/datadog/api/client/v2/api/given.json
index 76980d4ce3d..027b09ca181 100644
--- a/src/test/resources/com/datadog/api/client/v2/api/given.json
+++ b/src/test/resources/com/datadog/api/client/v2/api/given.json
@@ -1443,6 +1443,22 @@
"tag": "Users",
"operationId": "CreateUser"
},
+ {
+ "parameters": [
+ {
+ "name": "integration_name",
+ "value": "\"twilio\""
+ },
+ {
+ "name": "body",
+ "value": "{\n \"data\": {\n \"type\": \"Account\",\n \"attributes\": {\n \"name\": \"{{ unique }}\",\n \"settings\": {\n \"api_key\": \"SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"account_sid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"events\": true,\n \"messages\": true,\n \"alerts\": true,\n \"call_summaries\": true,\n \"ccm_enabled\": true,\n \"censor_logs\": true\n },\n \"secrets\": {\n \"api_key_token\": \"test_secret_token_value\"\n }\n }\n }\n}"
+ }
+ ],
+ "step": "there is a valid \"web_integration_account\" in the system",
+ "key": "web_integration_account",
+ "tag": "Integration Accounts",
+ "operationId": "CreateWebIntegrationAccount"
+ },
{
"parameters": [
{
diff --git a/src/test/resources/com/datadog/api/client/v2/api/integration_accounts.feature b/src/test/resources/com/datadog/api/client/v2/api/integration_accounts.feature
new file mode 100644
index 00000000000..54b4cea828a
--- /dev/null
+++ b/src/test/resources/com/datadog/api/client/v2/api/integration_accounts.feature
@@ -0,0 +1,179 @@
+@endpoint(integration-accounts) @endpoint(integration-accounts-v2)
+Feature: Integration Accounts
+ Configure and manage third-party integrations with Datadog. This API
+ provides a unified interface for managing integration accounts across
+ various external services. Each integration has its own unique schema
+ that defines the required settings and secrets. Before creating or
+ updating an account, use the schema endpoint to retrieve the specific
+ requirements, field types, validation rules, and available configuration
+ options for your integration. **Note**: This API manages integration
+ account configurations only. It does not support Grace Resources,
+ Reference Tables, or Custom Queries CRUD operations. For those features,
+ refer to each integration's dedicated documentation. Supported
+ Integrations: -
+ [Twilio](https://docs.datadoghq.com/integrations/twilio/) -
+ [Snowflake](https://docs.datadoghq.com/integrations/snowflake-web/) -
+ [Databricks](https://docs.datadoghq.com/integrations/databricks/)
+
+ Background:
+ Given a valid "apiKeyAuth" key in the system
+ And a valid "appKeyAuth" key in the system
+ And an instance of "IntegrationAccounts" API
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Bad Request: The request body is malformed or the integration name format is invalid." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 400 Bad Request: The request body is malformed or the integration name format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Created: The account was successfully created." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 201 Created: The account was successfully created.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Not Found: The integration does not exist." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 422 Unprocessable Entity: The account configuration does not match the integration schema.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name or account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "Not Found: The integration or account does not exist." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "OK: The account was successfully deleted." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The account was successfully deleted.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "Bad Request: The integration name format is invalid." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "Not Found: The integration does not exist or has no schema available." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist or has no schema available.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "OK: The JSON schema for the integration's account configuration." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The JSON schema for the integration's account configuration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name or account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "Not Found: The integration or account does not exist." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "OK: The account details for the specified integration." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The account details for the specified integration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "Bad Request: The integration name format is invalid." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "Not Found: The integration does not exist." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "OK: List of all accounts for the specified integration." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: List of all accounts for the specified integration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Bad Request: The request body is malformed or the integration name/account ID format is invalid." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 400 Bad Request: The request body is malformed or the integration name/account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Not Found: The integration or account does not exist." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "OK: The account was successfully updated." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 200 OK: The account was successfully updated.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 422 Unprocessable Entity: The account configuration does not match the integration schema.
diff --git a/src/test/resources/com/datadog/api/client/v2/api/undo.json b/src/test/resources/com/datadog/api/client/v2/api/undo.json
index a04c9b283b9..93438d32937 100644
--- a/src/test/resources/com/datadog/api/client/v2/api/undo.json
+++ b/src/test/resources/com/datadog/api/client/v2/api/undo.json
@@ -6209,6 +6209,53 @@
"type": "safe"
}
},
+ "ListWebIntegrationAccounts": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "CreateWebIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "operationId": "DeleteWebIntegrationAccount",
+ "parameters": [
+ {
+ "name": "integration_name",
+ "source": "integration_name"
+ },
+ {
+ "name": "account_id",
+ "source": "data.id"
+ }
+ ],
+ "type": "unsafe"
+ }
+ },
+ "GetWebIntegrationAccountSchema": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "DeleteWebIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "idempotent"
+ }
+ },
+ "GetWebIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "UpdateWebIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "idempotent"
+ }
+ },
"CreateWorkflow": {
"tag": "Workflow Automation",
"undo": {
diff --git a/src/test/resources/com/datadog/api/client/v2/api/web_integrations.feature b/src/test/resources/com/datadog/api/client/v2/api/web_integrations.feature
new file mode 100644
index 00000000000..067af24109a
--- /dev/null
+++ b/src/test/resources/com/datadog/api/client/v2/api/web_integrations.feature
@@ -0,0 +1,258 @@
+@endpoint(web-integrations) @endpoint(web-integrations-v2)
+Feature: Web Integrations
+ Configure and manage third-party web integrations with Datadog. This API
+ provides a unified interface for managing integration accounts across
+ various external services. Each integration has its own unique schema
+ that defines the required settings and secrets. Before creating or
+ updating an account, use the schema endpoint to retrieve the specific
+ requirements, field types, validation rules, and available configuration
+ options for your integration. Supported Integrations: - twilio -
+ snowflake-web - databricks
+
+ Background:
+ Given a valid "apiKeyAuth" key in the system
+ And a valid "appKeyAuth" key in the system
+ And an instance of "IntegrationAccounts" API
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Bad Request" response with invalid integration name
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "invalid-integration-name"
+ And body with value {"data": {"type": "Account", "attributes": {"name": "Test Account", "settings": {"api_key": "SKtest", "account_sid": "ACtest", "events": true, "messages": true, "alerts": true, "call_summaries": true, "ccm_enabled": true, "censor_logs": true}, "secrets": {"api_key_token": "test_token"}}}}
+ When the request is sent
+ Then the response status is 400 Bad Request
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Bad Request: The request body is malformed or the integration name format is invalid." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 400 Bad Request: The request body is malformed or the integration name format is invalid.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Created" response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "twilio"
+ And body with value {"data": {"type": "Account", "attributes": {"name": "{{ unique }}", "settings": {"api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "events": true, "messages": true, "alerts": true, "call_summaries": true, "ccm_enabled": true, "censor_logs": true}, "secrets": {"api_key_token": "test_secret_token"}}}}
+ When the request is sent
+ Then the response status is 201 Created
+ And the response "data.type" is equal to "Account"
+ And the response "data.attributes.name" is equal to "{{ unique }}"
+ And the response "data.attributes.settings.api_key" is equal to "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ And the response "data.attributes.settings.account_sid" is equal to "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Created: The account was successfully created." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 201 Created: The account was successfully created.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Not Found: The integration does not exist." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Unprocessable Entity" response with missing required field
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "twilio"
+ And body with value {"data": {"type": "Account", "attributes": {"name": "Test Account", "settings": {"api_key": "SKtest"}, "secrets": {"api_key_token": "test_token"}}}}
+ When the request is sent
+ Then the response status is 422 Unprocessable Entity
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Create integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "CreateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account", "secrets": {"api_key_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "settings": {"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "alerts": true, "api_key": "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "call_summaries": true, "ccm_enabled": true, "censor_logs": true, "events": true, "messages": true}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 422 Unprocessable Entity: The account configuration does not match the integration schema.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name or account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "Not Found: The integration or account does not exist." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "OK" response
+ Given there is a valid "web_integration_account" in the system
+ And new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "twilio"
+ And request contains "account_id" parameter from "web_integration_account.data.id"
+ When the request is sent
+ Then the response status is 200 OK
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Delete integration account returns "OK: The account was successfully deleted." response
+ Given new "DeleteWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The account was successfully deleted.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "Bad Request: The integration name format is invalid." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "Not Found: The integration does not exist or has no schema available." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist or has no schema available.
+
+ @replay-only @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "OK" response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter with value "twilio"
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "type" is equal to "object"
+ And the response "properties.settings.properties.api_key" has field "type"
+ And the response "properties.secrets.properties.api_key_token" has field "type"
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get account schema for an integration returns "OK: The JSON schema for the integration's account configuration." response
+ Given new "GetWebIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The JSON schema for the integration's account configuration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name or account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "Not Found: The integration or account does not exist." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "OK" response
+ Given there is a valid "web_integration_account" in the system
+ And new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "twilio"
+ And request contains "account_id" parameter from "web_integration_account.data.id"
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data.type" is equal to "Account"
+ And the response "data.attributes.name" is equal to "{{ unique }}"
+ And the response "data.attributes.settings" has field "api_key"
+ And the response "data.attributes.settings" has field "account_sid"
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Get integration account returns "OK: The account details for the specified integration." response
+ Given new "GetWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: The account details for the specified integration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "Bad Request: The integration name format is invalid." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 400 Bad Request: The integration name format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "Not Found: The integration does not exist." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 404 Not Found: The integration does not exist.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "OK" response
+ Given there is a valid "web_integration_account" in the system
+ And new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter with value "twilio"
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data[0].type" is equal to "Account"
+ And the response "data[0].attributes" has field "name"
+ And the response "data[0].attributes" has field "settings"
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: List integration accounts returns "OK: List of all accounts for the specified integration." response
+ Given new "ListWebIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ When the request is sent
+ Then the response status is 200 OK: List of all accounts for the specified integration.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Bad Request: The request body is malformed or the integration name/account ID format is invalid." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 400 Bad Request: The request body is malformed or the integration name/account ID format is invalid.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Not Found: The integration or account does not exist." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 404 Not Found: The integration or account does not exist.
+
+ @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "OK" response
+ Given there is a valid "web_integration_account" in the system
+ And new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter with value "twilio"
+ And request contains "account_id" parameter from "web_integration_account.data.id"
+ And body with value {"data": {"type": "Account", "attributes": {"name": "{{ unique }}-updated", "settings": {"events": false, "messages": false, "ccm_enabled": false}}}}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data.type" is equal to "Account"
+ And the response "data.attributes.name" is equal to "{{ unique }}-updated"
+ And the response "data.attributes.settings.events" is false
+ And the response "data.attributes.settings.messages" is false
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "OK: The account was successfully updated." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 200 OK: The account was successfully updated.
+
+ @generated @skip @team:DataDog/web-integrations
+ Scenario: Update integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "UpdateWebIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "account_id" parameter from "REPLACE.ME"
+ And body with value {"data": {"attributes": {"name": "My Production Account (Updated)", "secrets": {"api_key_token": "new_secret_token_value"}, "settings": {"ccm_enabled": true, "events": true, "messages": false}}, "type": "Account"}}
+ When the request is sent
+ Then the response status is 422 Unprocessable Entity: The account configuration does not match the integration schema.