diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml
index 65d674fb23..6424cf7188 100644
--- a/.generator/schemas/v2/openapi.yaml
+++ b/.generator/schemas/v2/openapi.yaml
@@ -1968,6 +1968,64 @@ components:
type: string
requestBodies: {}
responses:
+ AmsIntegrationAccountSchemaBadRequestResponse:
+ 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."
+ AmsIntegrationAccountSchemaForbiddenResponse:
+ 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."
+ AmsIntegrationAccountSchemaNotFoundResponse:
+ 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."
+ AmsIntegrationAccountSchemaTooManyRequestsResponse:
+ 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.
BadRequestResponse:
content:
"application/json":
@@ -2100,6 +2158,324 @@ components:
schema:
$ref: "#/components/schemas/JSONAPIErrorResponse"
description: The server cannot process the request because it contains invalid data.
+ 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.
@@ -6394,6 +6770,370 @@ components:
x-enum-varnames:
- FEATURE_GATE
- CANARY
+ AmsIntegrationAccountAttributes:
+ 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
+ AmsIntegrationAccountCreateRequest:
+ description: Payload for creating a web integration account.
+ properties:
+ data:
+ $ref: "#/components/schemas/AmsIntegrationAccountCreateRequestData"
+ required:
+ - data
+ type: object
+ AmsIntegrationAccountCreateRequestAttributes:
+ 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/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
+ AmsIntegrationAccountCreateRequestData:
+ description: Data object for creating a web integration account.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/AmsIntegrationAccountCreateRequestAttributes"
+ type:
+ $ref: "#/components/schemas/AmsIntegrationAccountType"
+ required:
+ - type
+ - attributes
+ type: object
+ AmsIntegrationAccountResponse:
+ description: Response containing a single web integration account.
+ properties:
+ data:
+ $ref: "#/components/schemas/AmsIntegrationAccountResponseData"
+ integration_name:
+ description: The name of the integration.
+ example: "twilio"
+ type: string
+ type: object
+ AmsIntegrationAccountResponseData:
+ description: Data object for a web integration account response.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/AmsIntegrationAccountAttributes"
+ id:
+ description: The unique identifier for the account.
+ example: "abc123def456"
+ type: string
+ type:
+ $ref: "#/components/schemas/AmsIntegrationAccountType"
+ required:
+ - id
+ - type
+ - attributes
+ type: object
+ AmsIntegrationAccountSchemaResponse:
+ 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:
+ properties:
+ secrets:
+ $ref: "#/components/schemas/AmsIntegrationAccountSchemaResponseExampleSecrets"
+ settings:
+ $ref: "#/components/schemas/AmsIntegrationAccountSchemaResponseExampleSettings"
+ required:
+ - settings
+ - secrets
+ type: "object"
+ properties:
+ additionalProperties:
+ description: Whether additional properties are allowed at the root level (typically false).
+ example: false
+ type: boolean
+ properties:
+ $ref: "#/components/schemas/AmsIntegrationAccountSchemaResponseProperties"
+ 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:
+ - type
+ - properties
+ - required
+ type: object
+ AmsIntegrationAccountSchemaResponseExampleSecrets:
+ additionalProperties: false
+ description: Example secrets object for a Twilio integration account schema response.
+ 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"
+ AmsIntegrationAccountSchemaResponseExampleSettings:
+ additionalProperties: false
+ description: Example settings object for a Twilio integration account schema response.
+ 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"
+ AmsIntegrationAccountSchemaResponseProperties:
+ 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/AmsIntegrationAccountSchemaResponseSecretsObject"
+ settings:
+ $ref: "#/components/schemas/AmsIntegrationAccountSchemaResponseSettingsObject"
+ required:
+ - settings
+ - secrets
+ type: object
+ AmsIntegrationAccountSchemaResponseSecretsObject:
+ 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/AmsIntegrationAccountSchemaResponseSettingsField"
+ 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
+ AmsIntegrationAccountSchemaResponseSettingsField:
+ 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
+ AmsIntegrationAccountSchemaResponseSettingsObject:
+ 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/AmsIntegrationAccountSchemaResponseSettingsField"
+ 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
+ AmsIntegrationAccountType:
+ default: Account
+ description: The JSON:API type for web integration accounts.
+ enum:
+ - Account
+ example: Account
+ type: string
+ x-enum-varnames:
+ - ACCOUNT
+ AmsIntegrationAccountUpdateRequest:
+ description: Payload for updating a web integration account.
+ properties:
+ data:
+ $ref: "#/components/schemas/AmsIntegrationAccountUpdateRequestData"
+ required:
+ - data
+ type: object
+ AmsIntegrationAccountUpdateRequestAttributes:
+ 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
+ AmsIntegrationAccountUpdateRequestData:
+ description: Data object for updating a web integration account.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/AmsIntegrationAccountUpdateRequestAttributes"
+ type:
+ $ref: "#/components/schemas/AmsIntegrationAccountType"
+ required:
+ - type
+ type: object
+ AmsIntegrationAccountsResponse:
+ description: Response containing a list of web integration accounts.
+ properties:
+ data:
+ items:
+ $ref: "#/components/schemas/AmsIntegrationAccountResponseData"
+ type: array
+ integration_name:
+ description: The name of the integration.
+ example: "twilio"
+ type: string
+ type: object
AnalysisEdit:
description: A single edit operation within a fix suggestion for a rule violation.
properties:
@@ -77612,6 +78352,48 @@ components:
page:
$ref: "#/components/schemas/Pagination"
type: object
+ ResponseSchema:
+ additionalProperties: false
+ description: Example JSON Schema document for an integration account configuration.
+ properties:
+ secrets:
+ $ref: "#/components/schemas/ResponseSchema139714313396896"
+ settings:
+ $ref: "#/components/schemas/ResponseSchema139714313396096"
+ required:
+ - settings
+ - secrets
+ type: "object"
+ ResponseSchema139714313396096:
+ additionalProperties: false
+ description: Example settings schema for an integration account configuration.
+ properties:
+ account_sid:
+ description: Twilio Account SID that uniquely identifies the Twilio account.
+ example: L
+ minLength: 1
+ type: "string"
+ api_key:
+ description: Twilio API Key SID for authentication.
+ example: L
+ minLength: 1
+ type: "string"
+ required:
+ - api_key
+ - account_sid
+ type: "object"
+ ResponseSchema139714313396896:
+ additionalProperties: false
+ description: Example secrets schema for an integration account configuration.
+ properties:
+ api_key_token:
+ description: The Twilio API Key Secret corresponding to the API Key SID.
+ example: L
+ minLength: 1
+ type: "string"
+ required:
+ - api_key_token
+ type: "object"
RestrictionPolicy:
description: Restriction policy object.
properties:
@@ -143102,6 +143884,388 @@ paths:
operator: OR
permissions:
- manage_integrations
+ /api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts:
+ get:
+ description: |-
+ Retrieve all configured accounts for a specific integration within your organization.
+
+ Rate limit: 50 requests per user every 20 seconds.
+ operationId: ListAmsIntegrationAccounts
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ - attributes:
+ name: "My Production Account"
+ settings:
+ account_sid: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ api_key: "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ id: "abc123def456"
+ type: "Account"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountsResponse"
+ 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: CreateAmsIntegrationAccount
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ examples:
+ default:
+ 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"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountCreateRequest"
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ name: "My Production Account"
+ settings:
+ account_sid: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ api_key: "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ id: "abc123def456"
+ type: "Account"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountResponse"
+ 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/integrations/{integration_name}/interfaces/{interface_id}/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: GetAmsIntegrationAccountSchema
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ $ref: "#/components/schemas/ResponseSchema"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountSchemaResponse"
+ description: "OK: The JSON schema for the integration's account configuration."
+ "400":
+ $ref: "#/components/responses/AmsIntegrationAccountSchemaBadRequestResponse"
+ "403":
+ $ref: "#/components/responses/AmsIntegrationAccountSchemaForbiddenResponse"
+ "404":
+ $ref: "#/components/responses/AmsIntegrationAccountSchemaNotFoundResponse"
+ "429":
+ $ref: "#/components/responses/AmsIntegrationAccountSchemaTooManyRequestsResponse"
+ summary: Get account schema for an integration
+ tags:
+ - Integration Accounts
+ x-permission:
+ operator: OR
+ permissions:
+ - integrations_read
+ /api/v2/integrations/{integration_name}/interfaces/{interface_id}/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: DeleteAmsIntegrationAccount
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ 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: GetAmsIntegrationAccount
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ 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:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ name: "My Production Account"
+ settings:
+ account_sid: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ api_key: "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ id: "abc123def456"
+ type: "Account"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountResponse"
+ 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: UpdateAmsIntegrationAccount
+ 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 interface.
+ example: "twilio.messaging"
+ in: path
+ name: interface_id
+ 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:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ name: "My Production Account (Updated)"
+ settings:
+ ccm_enabled: true
+ events: true
+ messages: false
+ type: "Account"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountUpdateRequest"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ name: "My Production Account (Updated)"
+ settings:
+ account_sid: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ api_key: "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ id: "abc123def456"
+ type: "Account"
+ schema:
+ $ref: "#/components/schemas/AmsIntegrationAccountResponse"
+ 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/ip_allowlist:
get:
description: Returns the IP allowlist and its enabled or disabled state.
@@ -193632,6 +194796,24 @@ tags:
name: IP Allowlist
- description: Manage incident response, as well as associated attachments, metadata, 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
+ 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/)
+ name: Integration Accounts
- description: |-
The Integrations API is used to list available integrations
and retrieve information about their installation status.
diff --git a/docs/datadog_api_client.v2.api.rst b/docs/datadog_api_client.v2.api.rst
index 972863d62b..3875ec0cff 100644
--- a/docs/datadog_api_client.v2.api.rst
+++ b/docs/datadog_api_client.v2.api.rst
@@ -424,6 +424,13 @@ datadog\_api\_client.v2.api.incidents\_api module
:members:
:show-inheritance:
+datadog\_api\_client.v2.api.integration\_accounts\_api module
+-------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.api.integration_accounts_api
+ :members:
+ :show-inheritance:
+
datadog\_api\_client.v2.api.integrations\_api module
----------------------------------------------------
diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst
index 14023429c7..58fa2a7f37 100644
--- a/docs/datadog_api_client.v2.model.rst
+++ b/docs/datadog_api_client.v2.model.rst
@@ -914,6 +914,118 @@ datadog\_api\_client.v2.model.allocation\_type module
:members:
:show-inheritance:
+datadog\_api\_client.v2.model.ams\_integration\_account\_attributes module
+--------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_create\_request module
+-------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_create_request
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_create\_request\_attributes module
+-------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_create_request_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_create\_request\_data module
+-------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_create_request_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_response module
+------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_response
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_response\_data module
+------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_response_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_schema\_response module
+--------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_schema_response
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_schema\_response\_properties module
+--------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_schema_response_properties
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_schema\_response\_secrets\_object module
+-------------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_schema_response_secrets_object
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_schema\_response\_settings\_field module
+-------------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_schema\_response\_settings\_object module
+--------------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_schema_response_settings_object
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_type module
+--------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_type
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_update\_request module
+-------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_update_request
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_update\_request\_attributes module
+-------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_update_request_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_account\_update\_request\_data module
+-------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_account_update_request_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.ams\_integration\_accounts\_response module
+-------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.ams_integration_accounts_response
+ :members:
+ :show-inheritance:
+
datadog\_api\_client.v2.model.analysis\_edit module
---------------------------------------------------
diff --git a/examples/v2/integration-accounts/CreateAmsIntegrationAccount.py b/examples/v2/integration-accounts/CreateAmsIntegrationAccount.py
new file mode 100644
index 0000000000..a414582232
--- /dev/null
+++ b/examples/v2/integration-accounts/CreateAmsIntegrationAccount.py
@@ -0,0 +1,45 @@
+"""
+Create integration account returns "Created: The account was successfully created." response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+from datadog_api_client.v2.model.ams_integration_account_create_request import AmsIntegrationAccountCreateRequest
+from datadog_api_client.v2.model.ams_integration_account_create_request_attributes import (
+ AmsIntegrationAccountCreateRequestAttributes,
+)
+from datadog_api_client.v2.model.ams_integration_account_create_request_data import (
+ AmsIntegrationAccountCreateRequestData,
+)
+from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+body = AmsIntegrationAccountCreateRequest(
+ data=AmsIntegrationAccountCreateRequestData(
+ attributes=AmsIntegrationAccountCreateRequestAttributes(
+ name="My Production Account",
+ secrets=dict([("api_key_token", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")]),
+ settings=dict(
+ [
+ ("account_sid", "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ ("alerts", "True"),
+ ("api_key", "SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
+ ("call_summaries", "True"),
+ ("ccm_enabled", "True"),
+ ("censor_logs", "True"),
+ ("events", "True"),
+ ("messages", "True"),
+ ]
+ ),
+ ),
+ type=AmsIntegrationAccountType.ACCOUNT,
+ ),
+)
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ response = api_instance.create_ams_integration_account(
+ integration_name="integration_name", interface_id="interface_id", body=body
+ )
+
+ print(response)
diff --git a/examples/v2/integration-accounts/DeleteAmsIntegrationAccount.py b/examples/v2/integration-accounts/DeleteAmsIntegrationAccount.py
new file mode 100644
index 0000000000..2e35b39472
--- /dev/null
+++ b/examples/v2/integration-accounts/DeleteAmsIntegrationAccount.py
@@ -0,0 +1,15 @@
+"""
+Delete integration account returns "OK: The account was successfully deleted." response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ api_instance.delete_ams_integration_account(
+ integration_name="integration_name",
+ interface_id="interface_id",
+ account_id="account_id",
+ )
diff --git a/examples/v2/integration-accounts/GetAmsIntegrationAccount.py b/examples/v2/integration-accounts/GetAmsIntegrationAccount.py
new file mode 100644
index 0000000000..d3eb76a4a6
--- /dev/null
+++ b/examples/v2/integration-accounts/GetAmsIntegrationAccount.py
@@ -0,0 +1,17 @@
+"""
+Get integration account returns "OK: The account details for the specified integration." response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ response = api_instance.get_ams_integration_account(
+ integration_name="integration_name",
+ interface_id="interface_id",
+ account_id="account_id",
+ )
+
+ print(response)
diff --git a/examples/v2/integration-accounts/GetAmsIntegrationAccountSchema.py b/examples/v2/integration-accounts/GetAmsIntegrationAccountSchema.py
new file mode 100644
index 0000000000..77fd53966c
--- /dev/null
+++ b/examples/v2/integration-accounts/GetAmsIntegrationAccountSchema.py
@@ -0,0 +1,17 @@
+"""
+Get account schema for an integration returns "OK: The JSON schema for the integration's account configuration."
+response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ response = api_instance.get_ams_integration_account_schema(
+ integration_name="integration_name",
+ interface_id="interface_id",
+ )
+
+ print(response)
diff --git a/examples/v2/integration-accounts/ListAmsIntegrationAccounts.py b/examples/v2/integration-accounts/ListAmsIntegrationAccounts.py
new file mode 100644
index 0000000000..69d0bccfe9
--- /dev/null
+++ b/examples/v2/integration-accounts/ListAmsIntegrationAccounts.py
@@ -0,0 +1,16 @@
+"""
+List integration accounts returns "OK: List of all accounts for the specified integration." response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ response = api_instance.list_ams_integration_accounts(
+ integration_name="integration_name",
+ interface_id="interface_id",
+ )
+
+ print(response)
diff --git a/examples/v2/integration-accounts/UpdateAmsIntegrationAccount.py b/examples/v2/integration-accounts/UpdateAmsIntegrationAccount.py
new file mode 100644
index 0000000000..b0651d88d0
--- /dev/null
+++ b/examples/v2/integration-accounts/UpdateAmsIntegrationAccount.py
@@ -0,0 +1,34 @@
+"""
+Update integration account returns "OK: The account was successfully updated." response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
+from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+from datadog_api_client.v2.model.ams_integration_account_update_request import AmsIntegrationAccountUpdateRequest
+from datadog_api_client.v2.model.ams_integration_account_update_request_attributes import (
+ AmsIntegrationAccountUpdateRequestAttributes,
+)
+from datadog_api_client.v2.model.ams_integration_account_update_request_data import (
+ AmsIntegrationAccountUpdateRequestData,
+)
+
+body = AmsIntegrationAccountUpdateRequest(
+ data=AmsIntegrationAccountUpdateRequestData(
+ attributes=AmsIntegrationAccountUpdateRequestAttributes(
+ name="My Production Account (Updated)",
+ secrets=dict([("api_key_token", "new_secret_token_value")]),
+ settings=dict([("ccm_enabled", "True"), ("events", "True"), ("messages", "False")]),
+ ),
+ type=AmsIntegrationAccountType.ACCOUNT,
+ ),
+)
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = IntegrationAccountsApi(api_client)
+ response = api_instance.update_ams_integration_account(
+ integration_name="integration_name", interface_id="interface_id", account_id="account_id", body=body
+ )
+
+ print(response)
diff --git a/src/datadog_api_client/v2/api/integration_accounts_api.py b/src/datadog_api_client/v2/api/integration_accounts_api.py
new file mode 100644
index 0000000000..8e5b28b96a
--- /dev/null
+++ b/src/datadog_api_client/v2/api/integration_accounts_api.py
@@ -0,0 +1,415 @@
+# 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.
+from __future__ import annotations
+
+from typing import Any, Dict
+
+from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint
+from datadog_api_client.configuration import Configuration
+from datadog_api_client.v2.model.ams_integration_accounts_response import AmsIntegrationAccountsResponse
+from datadog_api_client.v2.model.ams_integration_account_response import AmsIntegrationAccountResponse
+from datadog_api_client.v2.model.ams_integration_account_create_request import AmsIntegrationAccountCreateRequest
+from datadog_api_client.v2.model.ams_integration_account_schema_response import AmsIntegrationAccountSchemaResponse
+from datadog_api_client.v2.model.ams_integration_account_update_request import AmsIntegrationAccountUpdateRequest
+
+
+class IntegrationAccountsApi:
+ """
+ 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 `_
+ * `Snowflake `_
+ * `Databricks `_
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient(Configuration())
+ self.api_client = api_client
+
+ self._create_ams_integration_account_endpoint = _Endpoint(
+ settings={
+ "response_type": (AmsIntegrationAccountResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts",
+ "operation_id": "create_ams_integration_account",
+ "http_method": "POST",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ "body": {
+ "required": True,
+ "openapi_types": (AmsIntegrationAccountCreateRequest,),
+ "location": "body",
+ },
+ },
+ headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
+ api_client=api_client,
+ )
+
+ self._delete_ams_integration_account_endpoint = _Endpoint(
+ settings={
+ "response_type": None,
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts/{account_id}",
+ "operation_id": "delete_ams_integration_account",
+ "http_method": "DELETE",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ "account_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "account_id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["*/*"],
+ },
+ api_client=api_client,
+ )
+
+ self._get_ams_integration_account_endpoint = _Endpoint(
+ settings={
+ "response_type": (AmsIntegrationAccountResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts/{account_id}",
+ "operation_id": "get_ams_integration_account",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ "account_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "account_id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ self._get_ams_integration_account_schema_endpoint = _Endpoint(
+ settings={
+ "response_type": (AmsIntegrationAccountSchemaResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts/schema",
+ "operation_id": "get_ams_integration_account_schema",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ self._list_ams_integration_accounts_endpoint = _Endpoint(
+ settings={
+ "response_type": (AmsIntegrationAccountsResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts",
+ "operation_id": "list_ams_integration_accounts",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ self._update_ams_integration_account_endpoint = _Endpoint(
+ settings={
+ "response_type": (AmsIntegrationAccountResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/integrations/{integration_name}/interfaces/{interface_id}/accounts/{account_id}",
+ "operation_id": "update_ams_integration_account",
+ "http_method": "PATCH",
+ "version": "v2",
+ },
+ params_map={
+ "integration_name": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "integration_name",
+ "location": "path",
+ },
+ "interface_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "interface_id",
+ "location": "path",
+ },
+ "account_id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "account_id",
+ "location": "path",
+ },
+ "body": {
+ "required": True,
+ "openapi_types": (AmsIntegrationAccountUpdateRequest,),
+ "location": "body",
+ },
+ },
+ headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
+ api_client=api_client,
+ )
+
+ def create_ams_integration_account(
+ self,
+ integration_name: str,
+ interface_id: str,
+ body: AmsIntegrationAccountCreateRequest,
+ ) -> AmsIntegrationAccountResponse:
+ """Create integration account.
+
+ 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 integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :type body: AmsIntegrationAccountCreateRequest
+ :rtype: AmsIntegrationAccountResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ kwargs["body"] = body
+
+ return self._create_ams_integration_account_endpoint.call_with_http_info(**kwargs)
+
+ def delete_ams_integration_account(
+ self,
+ integration_name: str,
+ interface_id: str,
+ account_id: str,
+ ) -> None:
+ """Delete integration account.
+
+ 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 integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :param account_id: The unique identifier of the account.
+ :type account_id: str
+ :rtype: None
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ kwargs["account_id"] = account_id
+
+ return self._delete_ams_integration_account_endpoint.call_with_http_info(**kwargs)
+
+ def get_ams_integration_account(
+ self,
+ integration_name: str,
+ interface_id: str,
+ account_id: str,
+ ) -> AmsIntegrationAccountResponse:
+ """Get integration account.
+
+ 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 integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :param account_id: The unique identifier of the account.
+ :type account_id: str
+ :rtype: AmsIntegrationAccountResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ kwargs["account_id"] = account_id
+
+ return self._get_ams_integration_account_endpoint.call_with_http_info(**kwargs)
+
+ def get_ams_integration_account_schema(
+ self,
+ integration_name: str,
+ interface_id: str,
+ ) -> AmsIntegrationAccountSchemaResponse:
+ """Get account schema for an integration.
+
+ 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 integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :rtype: AmsIntegrationAccountSchemaResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ return self._get_ams_integration_account_schema_endpoint.call_with_http_info(**kwargs)
+
+ def list_ams_integration_accounts(
+ self,
+ integration_name: str,
+ interface_id: str,
+ ) -> AmsIntegrationAccountsResponse:
+ """List integration accounts.
+
+ Retrieve all configured accounts for a specific integration within your organization.
+
+ Rate limit: 50 requests per user every 20 seconds.
+
+ :param integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :rtype: AmsIntegrationAccountsResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ return self._list_ams_integration_accounts_endpoint.call_with_http_info(**kwargs)
+
+ def update_ams_integration_account(
+ self,
+ integration_name: str,
+ interface_id: str,
+ account_id: str,
+ body: AmsIntegrationAccountUpdateRequest,
+ ) -> AmsIntegrationAccountResponse:
+ """Update integration account.
+
+ 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 integration_name: The name of the integration.
+ :type integration_name: str
+ :param interface_id: The unique identifier of the interface.
+ :type interface_id: str
+ :param account_id: The unique identifier of the account.
+ :type account_id: str
+ :type body: AmsIntegrationAccountUpdateRequest
+ :rtype: AmsIntegrationAccountResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["integration_name"] = integration_name
+
+ kwargs["interface_id"] = interface_id
+
+ kwargs["account_id"] = account_id
+
+ kwargs["body"] = body
+
+ return self._update_ams_integration_account_endpoint.call_with_http_info(**kwargs)
diff --git a/src/datadog_api_client/v2/apis/__init__.py b/src/datadog_api_client/v2/apis/__init__.py
index f37e2eebe2..caf0f771ef 100644
--- a/src/datadog_api_client/v2/apis/__init__.py
+++ b/src/datadog_api_client/v2/apis/__init__.py
@@ -59,6 +59,7 @@
from datadog_api_client.v2.api.high_availability_multi_region_api import HighAvailabilityMultiRegionApi
from datadog_api_client.v2.api.ip_allowlist_api import IPAllowlistApi
from datadog_api_client.v2.api.incidents_api import IncidentsApi
+from datadog_api_client.v2.api.integration_accounts_api import IntegrationAccountsApi
from datadog_api_client.v2.api.integrations_api import IntegrationsApi
from datadog_api_client.v2.api.jira_integration_api import JiraIntegrationApi
from datadog_api_client.v2.api.key_management_api import KeyManagementApi
@@ -195,6 +196,7 @@
"HighAvailabilityMultiRegionApi",
"IPAllowlistApi",
"IncidentsApi",
+ "IntegrationAccountsApi",
"IntegrationsApi",
"JiraIntegrationApi",
"KeyManagementApi",
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_attributes.py b/src/datadog_api_client/v2/model/ams_integration_account_attributes.py
new file mode 100644
index 0000000000..a7e6afd622
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_attributes.py
@@ -0,0 +1,60 @@
+# 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.
+from __future__ import annotations
+
+from typing import Any, Dict
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ date,
+ datetime,
+ none_type,
+ UUID,
+)
+
+
+class AmsIntegrationAccountAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "name": (str,),
+ "settings": (
+ {
+ str: (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ )
+ },
+ ),
+ }
+
+ attribute_map = {
+ "name": "name",
+ "settings": "settings",
+ }
+
+ def __init__(self_, name: str, settings: Dict[str, Any], **kwargs):
+ """
+ Attributes for a web integration account.
+
+ :param name: The name of the account.
+ :type name: str
+
+ :param settings: 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.
+ :type settings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}
+ """
+ super().__init__(kwargs)
+
+ self_.name = name
+ self_.settings = settings
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_create_request.py b/src/datadog_api_client/v2/model/ams_integration_account_create_request.py
new file mode 100644
index 0000000000..ce74b09ac1
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_create_request.py
@@ -0,0 +1,44 @@
+# 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.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_create_request_data import (
+ AmsIntegrationAccountCreateRequestData,
+ )
+
+
+class AmsIntegrationAccountCreateRequest(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_create_request_data import (
+ AmsIntegrationAccountCreateRequestData,
+ )
+
+ return {
+ "data": (AmsIntegrationAccountCreateRequestData,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ }
+
+ def __init__(self_, data: AmsIntegrationAccountCreateRequestData, **kwargs):
+ """
+ Payload for creating a web integration account.
+
+ :param data: Data object for creating a web integration account.
+ :type data: AmsIntegrationAccountCreateRequestData
+ """
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_create_request_attributes.py b/src/datadog_api_client/v2/model/ams_integration_account_create_request_attributes.py
new file mode 100644
index 0000000000..7874d21e75
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_create_request_attributes.py
@@ -0,0 +1,83 @@
+# 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.
+from __future__ import annotations
+
+from typing import Any, Dict
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ date,
+ datetime,
+ none_type,
+ UUID,
+)
+
+
+class AmsIntegrationAccountCreateRequestAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "name": (str,),
+ "secrets": (
+ {
+ str: (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ )
+ },
+ ),
+ "settings": (
+ {
+ str: (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ )
+ },
+ ),
+ }
+
+ attribute_map = {
+ "name": "name",
+ "secrets": "secrets",
+ "settings": "settings",
+ }
+
+ def __init__(self_, name: str, secrets: Dict[str, Any], settings: Dict[str, Any], **kwargs):
+ """
+ Attributes for creating a web integration account.
+
+ :param name: The name of the account.
+ :type name: str
+
+ :param secrets: Sensitive credentials for the account. The structure and required fields vary by integration type.
+ These values are write-only and never returned in responses.
+ :type secrets: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}
+
+ :param settings: Integration-specific settings for the account. The structure and required fields vary by integration type.
+ Use the schema endpoint (GET /api/v2/integrations/{integration_name}/accounts/schema) to retrieve
+ the specific requirements for your integration before creating an account.
+ :type settings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}
+ """
+ super().__init__(kwargs)
+
+ self_.name = name
+ self_.secrets = secrets
+ self_.settings = settings
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_create_request_data.py b/src/datadog_api_client/v2/model/ams_integration_account_create_request_data.py
new file mode 100644
index 0000000000..e07ebc524c
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_create_request_data.py
@@ -0,0 +1,54 @@
+# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+# This product includes software developed at Datadog (https://www.datadoghq.com/).
+# Copyright 2019-Present Datadog, Inc.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_create_request_attributes import (
+ AmsIntegrationAccountCreateRequestAttributes,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+
+class AmsIntegrationAccountCreateRequestData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_create_request_attributes import (
+ AmsIntegrationAccountCreateRequestAttributes,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+ return {
+ "attributes": (AmsIntegrationAccountCreateRequestAttributes,),
+ "type": (AmsIntegrationAccountType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: AmsIntegrationAccountCreateRequestAttributes, type: AmsIntegrationAccountType, **kwargs
+ ):
+ """
+ Data object for creating a web integration account.
+
+ :param attributes: Attributes for creating a web integration account.
+ :type attributes: AmsIntegrationAccountCreateRequestAttributes
+
+ :param type: The JSON:API type for web integration accounts.
+ :type type: AmsIntegrationAccountType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_response.py b/src/datadog_api_client/v2/model/ams_integration_account_response.py
new file mode 100644
index 0000000000..7b3a0638ca
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_response.py
@@ -0,0 +1,54 @@
+# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+# This product includes software developed at Datadog (https://www.datadoghq.com/).
+# Copyright 2019-Present Datadog, Inc.
+from __future__ import annotations
+
+from typing import Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_response_data import AmsIntegrationAccountResponseData
+
+
+class AmsIntegrationAccountResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_response_data import AmsIntegrationAccountResponseData
+
+ return {
+ "data": (AmsIntegrationAccountResponseData,),
+ "integration_name": (str,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ "integration_name": "integration_name",
+ }
+
+ def __init__(
+ self_,
+ data: Union[AmsIntegrationAccountResponseData, UnsetType] = unset,
+ integration_name: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ Response containing a single web integration account.
+
+ :param data: Data object for a web integration account response.
+ :type data: AmsIntegrationAccountResponseData, optional
+
+ :param integration_name: The name of the integration.
+ :type integration_name: str, optional
+ """
+ if data is not unset:
+ kwargs["data"] = data
+ if integration_name is not unset:
+ kwargs["integration_name"] = integration_name
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_response_data.py b/src/datadog_api_client/v2/model/ams_integration_account_response_data.py
new file mode 100644
index 0000000000..b5318fddb0
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_response_data.py
@@ -0,0 +1,56 @@
+# 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.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_attributes import AmsIntegrationAccountAttributes
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+
+class AmsIntegrationAccountResponseData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_attributes import AmsIntegrationAccountAttributes
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+ return {
+ "attributes": (AmsIntegrationAccountAttributes,),
+ "id": (str,),
+ "type": (AmsIntegrationAccountType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "id": "id",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: AmsIntegrationAccountAttributes, id: str, type: AmsIntegrationAccountType, **kwargs
+ ):
+ """
+ Data object for a web integration account response.
+
+ :param attributes: Attributes for a web integration account.
+ :type attributes: AmsIntegrationAccountAttributes
+
+ :param id: The unique identifier for the account.
+ :type id: str
+
+ :param type: The JSON:API type for web integration accounts.
+ :type type: AmsIntegrationAccountType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.id = id
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_schema_response.py b/src/datadog_api_client/v2/model/ams_integration_account_schema_response.py
new file mode 100644
index 0000000000..6c2419a56c
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_schema_response.py
@@ -0,0 +1,79 @@
+# 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.
+from __future__ import annotations
+
+from typing import List, Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_properties import (
+ AmsIntegrationAccountSchemaResponseProperties,
+ )
+
+
+class AmsIntegrationAccountSchemaResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_properties import (
+ AmsIntegrationAccountSchemaResponseProperties,
+ )
+
+ return {
+ "additional_properties": (bool,),
+ "properties": (AmsIntegrationAccountSchemaResponseProperties,),
+ "required": ([str],),
+ "type": (str,),
+ }
+
+ attribute_map = {
+ "additional_properties": "additionalProperties",
+ "properties": "properties",
+ "required": "required",
+ "type": "type",
+ }
+
+ def __init__(
+ self_,
+ properties: AmsIntegrationAccountSchemaResponseProperties,
+ required: List[str],
+ type: str,
+ additional_properties: Union[bool, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ 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.
+
+ :param additional_properties: Whether additional properties are allowed at the root level (typically false).
+ :type additional_properties: bool, optional
+
+ :param properties: 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.
+ :type properties: AmsIntegrationAccountSchemaResponseProperties
+
+ :param required: List of required top-level properties.
+ :type required: [str]
+
+ :param type: The root type of the schema (always "object").
+ :type type: str
+ """
+ if additional_properties is not unset:
+ kwargs["additional_properties"] = additional_properties
+ super().__init__(kwargs)
+
+ self_.properties = properties
+ self_.required = required
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_schema_response_properties.py b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_properties.py
new file mode 100644
index 0000000000..f42b23fde9
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_properties.py
@@ -0,0 +1,67 @@
+# 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.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_secrets_object import (
+ AmsIntegrationAccountSchemaResponseSecretsObject,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_object import (
+ AmsIntegrationAccountSchemaResponseSettingsObject,
+ )
+
+
+class AmsIntegrationAccountSchemaResponseProperties(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_secrets_object import (
+ AmsIntegrationAccountSchemaResponseSecretsObject,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_object import (
+ AmsIntegrationAccountSchemaResponseSettingsObject,
+ )
+
+ return {
+ "secrets": (AmsIntegrationAccountSchemaResponseSecretsObject,),
+ "settings": (AmsIntegrationAccountSchemaResponseSettingsObject,),
+ }
+
+ attribute_map = {
+ "secrets": "secrets",
+ "settings": "settings",
+ }
+
+ def __init__(
+ self_,
+ secrets: AmsIntegrationAccountSchemaResponseSecretsObject,
+ settings: AmsIntegrationAccountSchemaResponseSettingsObject,
+ **kwargs,
+ ):
+ """
+ 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.
+
+ :param secrets: 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.
+ :type secrets: AmsIntegrationAccountSchemaResponseSecretsObject
+
+ :param settings: JSON Schema definition for the settings object.
+ Contains integration-specific configuration fields such as account identifiers,
+ feature toggles, and non-sensitive configuration options.
+ :type settings: AmsIntegrationAccountSchemaResponseSettingsObject
+ """
+ super().__init__(kwargs)
+
+ self_.secrets = secrets
+ self_.settings = settings
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_schema_response_secrets_object.py b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_secrets_object.py
new file mode 100644
index 0000000000..12d80430f4
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_secrets_object.py
@@ -0,0 +1,77 @@
+# 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.
+from __future__ import annotations
+
+from typing import Dict, List, Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field import (
+ AmsIntegrationAccountSchemaResponseSettingsField,
+ )
+
+
+class AmsIntegrationAccountSchemaResponseSecretsObject(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field import (
+ AmsIntegrationAccountSchemaResponseSettingsField,
+ )
+
+ return {
+ "additional_properties": (bool,),
+ "properties": ({str: (AmsIntegrationAccountSchemaResponseSettingsField,)},),
+ "required": ([str],),
+ "type": (str,),
+ }
+
+ attribute_map = {
+ "additional_properties": "additionalProperties",
+ "properties": "properties",
+ "required": "required",
+ "type": "type",
+ }
+
+ def __init__(
+ self_,
+ additional_properties: Union[bool, UnsetType] = unset,
+ properties: Union[Dict[str, AmsIntegrationAccountSchemaResponseSettingsField], UnsetType] = unset,
+ required: Union[List[str], UnsetType] = unset,
+ type: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ 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.
+
+ :param additional_properties: Whether additional properties are allowed (typically false).
+ :type additional_properties: bool, optional
+
+ :param properties: The individual secret fields for this integration.
+ Field names and types vary by integration.
+ :type properties: {str: (AmsIntegrationAccountSchemaResponseSettingsField,)}, optional
+
+ :param required: List of required secret field names.
+ :type required: [str], optional
+
+ :param type: Always "object" for the secrets container.
+ :type type: str, optional
+ """
+ if additional_properties is not unset:
+ kwargs["additional_properties"] = additional_properties
+ if properties is not unset:
+ kwargs["properties"] = properties
+ if required is not unset:
+ kwargs["required"] = required
+ if type is not unset:
+ kwargs["type"] = type
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_field.py b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_field.py
new file mode 100644
index 0000000000..9b38bfd34f
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_field.py
@@ -0,0 +1,96 @@
+# 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.
+from __future__ import annotations
+
+from typing import Any, Union
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ date,
+ datetime,
+ none_type,
+ unset,
+ UnsetType,
+ UUID,
+)
+
+
+class AmsIntegrationAccountSchemaResponseSettingsField(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "additional_properties": (bool,),
+ "default": (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ ),
+ "description": (str,),
+ "items": (dict,),
+ "min_length": (int,),
+ "type": (str,),
+ }
+
+ attribute_map = {
+ "additional_properties": "additionalProperties",
+ "default": "default",
+ "description": "description",
+ "items": "items",
+ "min_length": "minLength",
+ "type": "type",
+ }
+
+ def __init__(
+ self_,
+ additional_properties: Union[bool, UnsetType] = unset,
+ default: Union[Any, UnsetType] = unset,
+ description: Union[str, UnsetType] = unset,
+ items: Union[dict, UnsetType] = unset,
+ min_length: Union[int, UnsetType] = unset,
+ type: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ JSON Schema definition for a single field within settings or secrets.
+ The exact fields vary by integration.
+
+ :param additional_properties: Whether additional properties are allowed for this field.
+ :type additional_properties: bool, optional
+
+ :param default: Default value for the field if not provided.
+ :type default: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional
+
+ :param description: Human-readable description of the field's purpose.
+ :type description: str, optional
+
+ :param items: Schema for array items when type is "array".
+ :type items: dict, optional
+
+ :param min_length: Minimum length for string fields.
+ :type min_length: int, optional
+
+ :param type: The data type of the field (string, boolean, integer, array, object).
+ :type type: str, optional
+ """
+ if additional_properties is not unset:
+ kwargs["additional_properties"] = additional_properties
+ if default is not unset:
+ kwargs["default"] = default
+ if description is not unset:
+ kwargs["description"] = description
+ if items is not unset:
+ kwargs["items"] = items
+ if min_length is not unset:
+ kwargs["min_length"] = min_length
+ if type is not unset:
+ kwargs["type"] = type
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_object.py b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_object.py
new file mode 100644
index 0000000000..39d3446114
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_schema_response_settings_object.py
@@ -0,0 +1,77 @@
+# 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.
+from __future__ import annotations
+
+from typing import Dict, List, Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field import (
+ AmsIntegrationAccountSchemaResponseSettingsField,
+ )
+
+
+class AmsIntegrationAccountSchemaResponseSettingsObject(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field import (
+ AmsIntegrationAccountSchemaResponseSettingsField,
+ )
+
+ return {
+ "additional_properties": (bool,),
+ "properties": ({str: (AmsIntegrationAccountSchemaResponseSettingsField,)},),
+ "required": ([str],),
+ "type": (str,),
+ }
+
+ attribute_map = {
+ "additional_properties": "additionalProperties",
+ "properties": "properties",
+ "required": "required",
+ "type": "type",
+ }
+
+ def __init__(
+ self_,
+ additional_properties: Union[bool, UnsetType] = unset,
+ properties: Union[Dict[str, AmsIntegrationAccountSchemaResponseSettingsField], UnsetType] = unset,
+ required: Union[List[str], UnsetType] = unset,
+ type: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ JSON Schema definition for the settings object.
+ Contains integration-specific configuration fields such as account identifiers,
+ feature toggles, and non-sensitive configuration options.
+
+ :param additional_properties: Whether additional properties are allowed (typically false).
+ :type additional_properties: bool, optional
+
+ :param properties: The individual setting fields for this integration.
+ Field names and types vary by integration.
+ :type properties: {str: (AmsIntegrationAccountSchemaResponseSettingsField,)}, optional
+
+ :param required: List of required setting field names.
+ :type required: [str], optional
+
+ :param type: Always "object" for the settings container.
+ :type type: str, optional
+ """
+ if additional_properties is not unset:
+ kwargs["additional_properties"] = additional_properties
+ if properties is not unset:
+ kwargs["properties"] = properties
+ if required is not unset:
+ kwargs["required"] = required
+ if type is not unset:
+ kwargs["type"] = type
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_type.py b/src/datadog_api_client/v2/model/ams_integration_account_type.py
new file mode 100644
index 0000000000..30a22d02a3
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_type.py
@@ -0,0 +1,35 @@
+# 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.
+from __future__ import annotations
+
+
+from datadog_api_client.model_utils import (
+ ModelSimple,
+ cached_property,
+)
+
+from typing import ClassVar
+
+
+class AmsIntegrationAccountType(ModelSimple):
+ """
+ The JSON:API type for web integration accounts.
+
+ :param value: If omitted defaults to "Account". Must be one of ["Account"].
+ :type value: str
+ """
+
+ allowed_values = {
+ "Account",
+ }
+ ACCOUNT: ClassVar["AmsIntegrationAccountType"]
+
+ @cached_property
+ def openapi_types(_):
+ return {
+ "value": (str,),
+ }
+
+
+AmsIntegrationAccountType.ACCOUNT = AmsIntegrationAccountType("Account")
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_update_request.py b/src/datadog_api_client/v2/model/ams_integration_account_update_request.py
new file mode 100644
index 0000000000..ce1ed7bd45
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_update_request.py
@@ -0,0 +1,44 @@
+# 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.
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_update_request_data import (
+ AmsIntegrationAccountUpdateRequestData,
+ )
+
+
+class AmsIntegrationAccountUpdateRequest(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_update_request_data import (
+ AmsIntegrationAccountUpdateRequestData,
+ )
+
+ return {
+ "data": (AmsIntegrationAccountUpdateRequestData,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ }
+
+ def __init__(self_, data: AmsIntegrationAccountUpdateRequestData, **kwargs):
+ """
+ Payload for updating a web integration account.
+
+ :param data: Data object for updating a web integration account.
+ :type data: AmsIntegrationAccountUpdateRequestData
+ """
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_update_request_attributes.py b/src/datadog_api_client/v2/model/ams_integration_account_update_request_attributes.py
new file mode 100644
index 0000000000..8530adb1f7
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_update_request_attributes.py
@@ -0,0 +1,93 @@
+# 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.
+from __future__ import annotations
+
+from typing import Any, Dict, Union
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ date,
+ datetime,
+ none_type,
+ unset,
+ UnsetType,
+ UUID,
+)
+
+
+class AmsIntegrationAccountUpdateRequestAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "name": (str,),
+ "secrets": (
+ {
+ str: (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ )
+ },
+ ),
+ "settings": (
+ {
+ str: (
+ bool,
+ date,
+ datetime,
+ dict,
+ float,
+ int,
+ list,
+ str,
+ UUID,
+ none_type,
+ )
+ },
+ ),
+ }
+
+ attribute_map = {
+ "name": "name",
+ "secrets": "secrets",
+ "settings": "settings",
+ }
+
+ def __init__(
+ self_,
+ name: Union[str, UnsetType] = unset,
+ secrets: Union[Dict[str, Any], UnsetType] = unset,
+ settings: Union[Dict[str, Any], UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ Attributes for updating a web integration account. All fields are optional;
+ only provide the fields you want to update.
+
+ :param name: The name of the account.
+ :type name: str, optional
+
+ :param secrets: Sensitive credentials to update. Only the secrets provided are updated.
+ These values are write-only and never returned in responses.
+ :type secrets: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional
+
+ :param settings: 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.
+ :type settings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional
+ """
+ if name is not unset:
+ kwargs["name"] = name
+ if secrets is not unset:
+ kwargs["secrets"] = secrets
+ if settings is not unset:
+ kwargs["settings"] = settings
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/ams_integration_account_update_request_data.py b/src/datadog_api_client/v2/model/ams_integration_account_update_request_data.py
new file mode 100644
index 0000000000..00f8a1b787
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_account_update_request_data.py
@@ -0,0 +1,61 @@
+# 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.
+from __future__ import annotations
+
+from typing import Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_update_request_attributes import (
+ AmsIntegrationAccountUpdateRequestAttributes,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+
+class AmsIntegrationAccountUpdateRequestData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_update_request_attributes import (
+ AmsIntegrationAccountUpdateRequestAttributes,
+ )
+ from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+
+ return {
+ "attributes": (AmsIntegrationAccountUpdateRequestAttributes,),
+ "type": (AmsIntegrationAccountType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "type": "type",
+ }
+
+ def __init__(
+ self_,
+ type: AmsIntegrationAccountType,
+ attributes: Union[AmsIntegrationAccountUpdateRequestAttributes, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ Data object for updating a web integration account.
+
+ :param attributes: Attributes for updating a web integration account. All fields are optional;
+ only provide the fields you want to update.
+ :type attributes: AmsIntegrationAccountUpdateRequestAttributes, optional
+
+ :param type: The JSON:API type for web integration accounts.
+ :type type: AmsIntegrationAccountType
+ """
+ if attributes is not unset:
+ kwargs["attributes"] = attributes
+ super().__init__(kwargs)
+
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/ams_integration_accounts_response.py b/src/datadog_api_client/v2/model/ams_integration_accounts_response.py
new file mode 100644
index 0000000000..2d81838b76
--- /dev/null
+++ b/src/datadog_api_client/v2/model/ams_integration_accounts_response.py
@@ -0,0 +1,54 @@
+# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+# This product includes software developed at Datadog (https://www.datadoghq.com/).
+# Copyright 2019-Present Datadog, Inc.
+from __future__ import annotations
+
+from typing import List, Union, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.ams_integration_account_response_data import AmsIntegrationAccountResponseData
+
+
+class AmsIntegrationAccountsResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.ams_integration_account_response_data import AmsIntegrationAccountResponseData
+
+ return {
+ "data": ([AmsIntegrationAccountResponseData],),
+ "integration_name": (str,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ "integration_name": "integration_name",
+ }
+
+ def __init__(
+ self_,
+ data: Union[List[AmsIntegrationAccountResponseData], UnsetType] = unset,
+ integration_name: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ Response containing a list of web integration accounts.
+
+ :param data:
+ :type data: [AmsIntegrationAccountResponseData], optional
+
+ :param integration_name: The name of the integration.
+ :type integration_name: str, optional
+ """
+ if data is not unset:
+ kwargs["data"] = data
+ if integration_name is not unset:
+ kwargs["integration_name"] = integration_name
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py
index 9413425cce..22bcd88a1e 100644
--- a/src/datadog_api_client/v2/models/__init__.py
+++ b/src/datadog_api_client/v2/models/__init__.py
@@ -283,6 +283,38 @@
from datadog_api_client.v2.model.allocation_exposure_schedule_response import AllocationExposureScheduleResponse
from datadog_api_client.v2.model.allocation_response import AllocationResponse
from datadog_api_client.v2.model.allocation_type import AllocationType
+from datadog_api_client.v2.model.ams_integration_account_attributes import AmsIntegrationAccountAttributes
+from datadog_api_client.v2.model.ams_integration_account_create_request import AmsIntegrationAccountCreateRequest
+from datadog_api_client.v2.model.ams_integration_account_create_request_attributes import (
+ AmsIntegrationAccountCreateRequestAttributes,
+)
+from datadog_api_client.v2.model.ams_integration_account_create_request_data import (
+ AmsIntegrationAccountCreateRequestData,
+)
+from datadog_api_client.v2.model.ams_integration_account_response import AmsIntegrationAccountResponse
+from datadog_api_client.v2.model.ams_integration_account_response_data import AmsIntegrationAccountResponseData
+from datadog_api_client.v2.model.ams_integration_account_schema_response import AmsIntegrationAccountSchemaResponse
+from datadog_api_client.v2.model.ams_integration_account_schema_response_properties import (
+ AmsIntegrationAccountSchemaResponseProperties,
+)
+from datadog_api_client.v2.model.ams_integration_account_schema_response_secrets_object import (
+ AmsIntegrationAccountSchemaResponseSecretsObject,
+)
+from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_field import (
+ AmsIntegrationAccountSchemaResponseSettingsField,
+)
+from datadog_api_client.v2.model.ams_integration_account_schema_response_settings_object import (
+ AmsIntegrationAccountSchemaResponseSettingsObject,
+)
+from datadog_api_client.v2.model.ams_integration_account_type import AmsIntegrationAccountType
+from datadog_api_client.v2.model.ams_integration_account_update_request import AmsIntegrationAccountUpdateRequest
+from datadog_api_client.v2.model.ams_integration_account_update_request_attributes import (
+ AmsIntegrationAccountUpdateRequestAttributes,
+)
+from datadog_api_client.v2.model.ams_integration_account_update_request_data import (
+ AmsIntegrationAccountUpdateRequestData,
+)
+from datadog_api_client.v2.model.ams_integration_accounts_response import AmsIntegrationAccountsResponse
from datadog_api_client.v2.model.analysis_edit import AnalysisEdit
from datadog_api_client.v2.model.analysis_edit_type import AnalysisEditType
from datadog_api_client.v2.model.analysis_fix import AnalysisFix
@@ -9633,6 +9665,22 @@
"AllocationExposureScheduleResponse",
"AllocationResponse",
"AllocationType",
+ "AmsIntegrationAccountAttributes",
+ "AmsIntegrationAccountCreateRequest",
+ "AmsIntegrationAccountCreateRequestAttributes",
+ "AmsIntegrationAccountCreateRequestData",
+ "AmsIntegrationAccountResponse",
+ "AmsIntegrationAccountResponseData",
+ "AmsIntegrationAccountSchemaResponse",
+ "AmsIntegrationAccountSchemaResponseProperties",
+ "AmsIntegrationAccountSchemaResponseSecretsObject",
+ "AmsIntegrationAccountSchemaResponseSettingsField",
+ "AmsIntegrationAccountSchemaResponseSettingsObject",
+ "AmsIntegrationAccountType",
+ "AmsIntegrationAccountUpdateRequest",
+ "AmsIntegrationAccountUpdateRequestAttributes",
+ "AmsIntegrationAccountUpdateRequestData",
+ "AmsIntegrationAccountsResponse",
"AnalysisEdit",
"AnalysisEditType",
"AnalysisFix",
diff --git a/tests/v2/features/given.json b/tests/v2/features/given.json
index 0f9de6d48a..dab2215ce3 100644
--- a/tests/v2/features/given.json
+++ b/tests/v2/features/given.json
@@ -834,6 +834,26 @@
"tag": "Okta Integration",
"operationId": "CreateOktaAccount"
},
+ {
+ "parameters": [
+ {
+ "name": "integration_name",
+ "value": "\"twilio\""
+ },
+ {
+ "name": "interface_id",
+ "value": "\"twilio.messaging\""
+ },
+ {
+ "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": "CreateAmsIntegrationAccount"
+ },
{
"parameters": [
{
diff --git a/tests/v2/features/integration_accounts.feature b/tests/v2/features/integration_accounts.feature
new file mode 100644
index 0000000000..c0d96602bd
--- /dev/null
+++ b/tests/v2/features/integration_accounts.feature
@@ -0,0 +1,199 @@
+@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/saas-integrations
+ Scenario: Create integration account returns "Bad Request: The request body is malformed or the integration name format is invalid." response
+ Given new "CreateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Create integration account returns "Created: The account was successfully created." response
+ Given new "CreateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Create integration account returns "Not Found: The integration does not exist." response
+ Given new "CreateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Create integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "CreateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Delete integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "DeleteAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Delete integration account returns "Not Found: The integration or account does not exist." response
+ Given new "DeleteAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Delete integration account returns "OK: The account was successfully deleted." response
+ Given new "DeleteAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get account schema for an integration returns "Bad Request: The integration name format is invalid." response
+ Given new "GetAmsIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get account schema for an integration returns "Not Found: The integration does not exist or has no schema available." response
+ Given new "GetAmsIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get account schema for an integration returns "OK: The JSON schema for the integration's account configuration." response
+ Given new "GetAmsIntegrationAccountSchema" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get integration account returns "Bad Request: The integration name or account ID format is invalid." response
+ Given new "GetAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get integration account returns "Not Found: The integration or account does not exist." response
+ Given new "GetAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Get integration account returns "OK: The account details for the specified integration." response
+ Given new "GetAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: List integration accounts returns "Bad Request: The integration name format is invalid." response
+ Given new "ListAmsIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: List integration accounts returns "Not Found: The integration does not exist." response
+ Given new "ListAmsIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: List integration accounts returns "OK: List of all accounts for the specified integration." response
+ Given new "ListAmsIntegrationAccounts" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-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 "UpdateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Update integration account returns "Not Found: The integration or account does not exist." response
+ Given new "UpdateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Update integration account returns "OK: The account was successfully updated." response
+ Given new "UpdateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/saas-integrations
+ Scenario: Update integration account returns "Unprocessable Entity: The account configuration does not match the integration schema." response
+ Given new "UpdateAmsIntegrationAccount" request
+ And request contains "integration_name" parameter from "REPLACE.ME"
+ And request contains "interface_id" 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/tests/v2/features/undo.json b/tests/v2/features/undo.json
index a5c43f6c0f..33e331e2b1 100644
--- a/tests/v2/features/undo.json
+++ b/tests/v2/features/undo.json
@@ -4191,6 +4191,57 @@
"type": "idempotent"
}
},
+ "ListAmsIntegrationAccounts": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "CreateAmsIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "operationId": "DeleteAmsIntegrationAccount",
+ "parameters": [
+ {
+ "name": "integration_name",
+ "source": "integration_name"
+ },
+ {
+ "name": "interface_id",
+ "source": "interface_id"
+ },
+ {
+ "name": "account_id",
+ "source": "data.id"
+ }
+ ],
+ "type": "unsafe"
+ }
+ },
+ "GetAmsIntegrationAccountSchema": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "DeleteAmsIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "idempotent"
+ }
+ },
+ "GetAmsIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "UpdateAmsIntegrationAccount": {
+ "tag": "Integration Accounts",
+ "undo": {
+ "type": "idempotent"
+ }
+ },
"GetIPAllowlist": {
"tag": "IP Allowlist",
"undo": {