diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml
index 3013d46b7c..39454b02d9 100644
--- a/.generator/schemas/v1/openapi.yaml
+++ b/.generator/schemas/v1/openapi.yaml
@@ -38007,15 +38007,6 @@ paths:
schema:
format: int64
type: integer
- - description: |-
- Whether to return only deleted service level objective objects.
- example: true
- in: query
- name: is_deleted
- required: false
- schema:
- default: false
- type: boolean
responses:
"200":
content:
diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml
index a5b1012c5d..729e373ca0 100644
--- a/.generator/schemas/v2/openapi.yaml
+++ b/.generator/schemas/v2/openapi.yaml
@@ -1997,6 +1997,46 @@ components:
required: true
schema:
type: string
+ TeamsOwnershipFilterApplicationIdParameter:
+ description: Filter mappings by RUM application ID. Each value must be a valid UUID.
+ in: query
+ name: filter[application_id]
+ schema:
+ items:
+ format: uuid
+ type: string
+ type: array
+ TeamsOwnershipFilterServiceParameter:
+ description: Filter mappings by RUM application service name.
+ in: query
+ name: filter[service]
+ schema:
+ items:
+ type: string
+ type: array
+ TeamsOwnershipFilterTeamHandleParameter:
+ description: Filter mappings by owning team handle.
+ in: query
+ name: filter[team_handle]
+ schema:
+ items:
+ type: string
+ type: array
+ TeamsOwnershipFilterViewNameParameter:
+ description: Filter mappings by RUM view name.
+ in: query
+ name: filter[view_name]
+ schema:
+ items:
+ type: string
+ type: array
+ TeamsOwnershipMappingIdParameter:
+ description: The ID of the teams ownership mapping.
+ in: path
+ name: id
+ required: true
+ schema:
+ type: string
ToTimestamp:
description: The ending timestamp for the SLO status query in epoch seconds.
in: query
@@ -112863,6 +112903,390 @@ components:
example: "number_size"
type: string
type: object
+ TeamsOwnershipMappingBatchError:
+ description: An error encountered while validating or applying an operation.
+ properties:
+ detail:
+ description: A human-readable explanation specific to this error.
+ example: "prefix match_type is not enabled for this org"
+ type: string
+ status:
+ description: The HTTP status code applicable to this error.
+ example: "400"
+ type: string
+ title:
+ description: A short, human-readable summary of the error.
+ example: "Bad Request"
+ type: string
+ required:
+ - status
+ - title
+ type: object
+ TeamsOwnershipMappingBatchOperation:
+ description: A single add or remove operation, applied atomically with every other operation in the request.
+ properties:
+ data:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchOperationData"
+ op:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchOperationOp"
+ ref:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchOperationRef"
+ required:
+ - op
+ type: object
+ TeamsOwnershipMappingBatchOperationData:
+ description: The mapping to add. Required when `op` is `add`.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchOperationDataAttributes"
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipMappingType"
+ required:
+ - type
+ - attributes
+ type: object
+ TeamsOwnershipMappingBatchOperationDataAttributes:
+ description: |-
+ The attributes of the mapping to add. `team_handle` and `view_name` are required
+ when `op` is `add`.
+ properties:
+ application_id:
+ description: |-
+ The ID of the RUM application this mapping applies to.
+ For browser applications, provide the real application UUID — the team is applied to the view regardless of service.
+ For mobile applications, omit this field (or set it to the nil UUID `00000000-0000-0000-0000-000000000000`) — the team is applied to the view and service combination across all applications.
+ example: "11111111-2222-3333-4444-555555555555"
+ format: uuid
+ type: string
+ match_type:
+ $ref: "#/components/schemas/TeamsOwnershipMatchType"
+ service:
+ description: The RUM application's service name. For browser applications, this is optional. For mobile applications, this is required and scopes the ownership to a specific service.
+ example: "web-checkout"
+ type: string
+ team_handle:
+ description: The handle of the team that owns the matched RUM views.
+ example: "team-rum"
+ type: string
+ view_name:
+ description: The RUM view name to match, or its prefix when `match_type` is `prefix`.
+ example: "/checkout"
+ type: string
+ type: object
+ TeamsOwnershipMappingBatchOperationOp:
+ description: Whether this operation adds a new mapping or removes an existing one.
+ enum:
+ - add
+ - remove
+ example: add
+ type: string
+ x-enum-varnames: ["ADD", "REMOVE"]
+ TeamsOwnershipMappingBatchOperationRef:
+ description: Identifies an existing mapping to remove. Required when `op` is `remove`.
+ properties:
+ id:
+ description: The ID of the mapping to remove.
+ example: "456"
+ type: string
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipMappingType"
+ required:
+ - type
+ - id
+ type: object
+ TeamsOwnershipMappingBatchRequest:
+ description: The request body for bulk-creating and bulk-removing teams ownership mappings.
+ properties:
+ atomic:operations:
+ description: The ordered list of add and remove operations to apply atomically.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchOperation"
+ type: array
+ required:
+ - atomic:operations
+ type: object
+ TeamsOwnershipMappingBatchResponse:
+ description: |-
+ The response body for the bulk create and remove operation. On success, `atomic:results`
+ contains one entry per operation, in request order. On failure, no operations were applied
+ and `errors` describes what went wrong.
+ properties:
+ atomic:results:
+ description: |-
+ The result of each operation.
+ Add operations are processed first, then remove operations, so results may not appear
+ in the same order as the request. Present only on success.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchResult"
+ type: array
+ errors:
+ description: The validation or processing errors encountered. Present only when the request could not be completed.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchError"
+ type: array
+ type: object
+ TeamsOwnershipMappingBatchResult:
+ description: |-
+ The result of a single operation.
+ Add operations are processed first, then remove operations, so results may not appear
+ in the same order as the request. Empty for `remove` operations.
+ properties:
+ data:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchResultData"
+ type: object
+ TeamsOwnershipMappingBatchResultData:
+ description: The mapping created by an `add` operation.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponseAttributes"
+ id:
+ description: The unique identifier of the teams ownership mapping.
+ example: "123"
+ type: string
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipMappingType"
+ required:
+ - type
+ - id
+ - attributes
+ type: object
+ TeamsOwnershipMappingCreateData:
+ description: The JSON:API data envelope for a teams ownership mapping create request.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/TeamsOwnershipMappingCreateDataAttributes"
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipMappingType"
+ required:
+ - type
+ - attributes
+ type: object
+ TeamsOwnershipMappingCreateDataAttributes:
+ description: The attributes of the teams ownership mapping to create.
+ properties:
+ application_id:
+ description: |-
+ The ID of the RUM application this mapping applies to.
+ For browser applications, provide the real application UUID — the team is applied to the view regardless of service.
+ For mobile applications, omit this field (or set it to the nil UUID `00000000-0000-0000-0000-000000000000`) — the team is applied to the view and service combination across all applications.
+ example: "11111111-2222-3333-4444-555555555555"
+ format: uuid
+ type: string
+ match_type:
+ $ref: "#/components/schemas/TeamsOwnershipMatchType"
+ service:
+ description: The RUM application's service name. For browser applications, this is optional. For mobile applications, this is required and scopes the ownership to a specific service.
+ example: "web-checkout"
+ type: string
+ team_handle:
+ description: The handle of the team that owns the matched RUM views.
+ example: "team-rum"
+ type: string
+ view_name:
+ description: The RUM view name to match, or its prefix when `match_type` is `prefix`.
+ example: "/checkout"
+ type: string
+ required:
+ - team_handle
+ - view_name
+ type: object
+ TeamsOwnershipMappingCreateRequest:
+ description: The request body for creating a teams ownership mapping.
+ properties:
+ data:
+ $ref: "#/components/schemas/TeamsOwnershipMappingCreateData"
+ required:
+ - data
+ type: object
+ TeamsOwnershipMappingResponse:
+ description: The response body for a single teams ownership mapping.
+ properties:
+ data:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponseData"
+ required:
+ - data
+ type: object
+ TeamsOwnershipMappingResponseAttributes:
+ description: The attributes of a teams ownership mapping.
+ properties:
+ application_id:
+ description: |-
+ The ID of the RUM application this mapping applies to.
+ For browser applications, this is the real application UUID.
+ For mobile applications, this is the nil UUID `00000000-0000-0000-0000-000000000000` (wildcard), meaning the ownership applies across all applications.
+ example: "11111111-2222-3333-4444-555555555555"
+ type: string
+ created_at:
+ description: Timestamp when the mapping was created.
+ example: "2026-01-15T09:30:00.000Z"
+ format: date-time
+ type: string
+ created_by:
+ description: The UUID of the user who created the mapping.
+ example: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
+ type: string
+ match_type:
+ $ref: "#/components/schemas/TeamsOwnershipMatchType"
+ org_id:
+ description: The ID of the organization that owns this mapping.
+ example: 123456
+ format: int64
+ type: integer
+ service:
+ description: The RUM application's service name. For browser applications, may be empty. For mobile applications, this is the service that scopes the ownership.
+ example: "web-checkout"
+ type: string
+ team_handle:
+ description: The handle of the team that owns the matched RUM views.
+ example: "team-rum"
+ type: string
+ view_name:
+ description: The RUM view name to match, or its prefix when `match_type` is `prefix`.
+ example: "/checkout"
+ type: string
+ required:
+ - team_handle
+ - view_name
+ - service
+ - application_id
+ - org_id
+ - created_at
+ - created_by
+ - match_type
+ type: object
+ TeamsOwnershipMappingResponseData:
+ description: The JSON:API data envelope for a teams ownership mapping.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponseAttributes"
+ id:
+ description: The unique identifier of the teams ownership mapping.
+ example: "123"
+ type: string
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipMappingType"
+ required:
+ - id
+ - type
+ - attributes
+ type: object
+ TeamsOwnershipMappingType:
+ default: teams_ownership_mappings
+ description: The type of the resource. The value should always be teams_ownership_mappings.
+ enum:
+ - teams_ownership_mappings
+ example: teams_ownership_mappings
+ type: string
+ x-enum-varnames: ["TEAMS_OWNERSHIP_MAPPINGS"]
+ TeamsOwnershipMappingsResponse:
+ description: The response body for a list of teams ownership mappings.
+ properties:
+ data:
+ description: A list of teams ownership mappings.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponseData"
+ type: array
+ meta:
+ $ref: "#/components/schemas/ResponseMetaAttributes"
+ required:
+ - data
+ type: object
+ TeamsOwnershipMatchType:
+ default: exact
+ description: How the `view_name` is matched against RUM view names.
+ enum:
+ - exact
+ - prefix
+ example: exact
+ type: string
+ x-enum-varnames: ["EXACT", "PREFIX"]
+ TeamsOwnershipRuleResponseAttributes:
+ description: The attributes of a teams ownership rule.
+ properties:
+ application_id:
+ description: |-
+ The ID of the RUM application this mapping applies to.
+ For browser applications, this is the real application UUID.
+ For mobile applications, this is the nil UUID `00000000-0000-0000-0000-000000000000` (wildcard), meaning the ownership applies across all applications.
+ example: "11111111-2222-3333-4444-555555555555"
+ type: string
+ match_type:
+ $ref: "#/components/schemas/TeamsOwnershipMatchType"
+ service:
+ description: The RUM application's service name. For browser applications, may be empty. For mobile applications, this is the service that scopes the ownership.
+ example: "web-checkout"
+ type: string
+ teams:
+ description: The teams that own the matched views, each paired with the ID of its underlying mapping.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipRuleTeamMapping"
+ type: array
+ view_name:
+ description: The RUM view name to match, or its prefix when `match_type` is `prefix`.
+ example: "/checkout"
+ type: string
+ required:
+ - teams
+ - view_name
+ - service
+ - application_id
+ - match_type
+ type: object
+ TeamsOwnershipRuleResponseData:
+ description: The JSON:API data envelope for a teams ownership rule.
+ properties:
+ attributes:
+ $ref: "#/components/schemas/TeamsOwnershipRuleResponseAttributes"
+ id:
+ description: |-
+ A deterministic identifier derived from the rule's grouping key.
+ This ID cannot be used to delete the rule directly; delete individual mappings
+ using the `mapping_id` under `teams` instead.
+ example: "3b1e2f7a9c4d6e8f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f"
+ type: string
+ type:
+ $ref: "#/components/schemas/TeamsOwnershipRuleType"
+ required:
+ - id
+ - type
+ - attributes
+ type: object
+ TeamsOwnershipRuleTeamMapping:
+ description: An individual team's ownership entry within a teams ownership rule.
+ properties:
+ mapping_id:
+ description: The ID of the underlying mapping, used to delete this team's ownership individually.
+ example: "123"
+ type: string
+ team_handle:
+ description: The handle of the owning team.
+ example: "team-rum"
+ type: string
+ required:
+ - team_handle
+ - mapping_id
+ type: object
+ TeamsOwnershipRuleType:
+ default: teams_ownership_grouped_mappings
+ description: The type of the resource. The value should always be teams_ownership_grouped_mappings.
+ enum:
+ - teams_ownership_grouped_mappings
+ example: teams_ownership_grouped_mappings
+ type: string
+ x-enum-varnames: ["TEAMS_OWNERSHIP_GROUPED_MAPPINGS"]
+ TeamsOwnershipRulesResponse:
+ description: The response body for a list of teams ownership rules.
+ properties:
+ data:
+ description: A list of teams ownership rules.
+ items:
+ $ref: "#/components/schemas/TeamsOwnershipRuleResponseData"
+ type: array
+ meta:
+ $ref: "#/components/schemas/ResponseMetaAttributes"
+ required:
+ - data
+ type: object
TeamsResponse:
description: Response with multiple teams
properties:
@@ -183423,6 +183847,299 @@ paths:
tags:
- Rum Metrics
x-codegen-request-body-name: body
+ /api/v2/rum/config/teams-ownership/mappings:
+ get:
+ description: Get the list of teams ownership mappings for your organization, optionally filtered.
+ operationId: ListTeamsOwnershipMappings
+ parameters:
+ - $ref: "#/components/parameters/TeamsOwnershipFilterViewNameParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterTeamHandleParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterApplicationIdParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterServiceParameter"
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ - attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ created_at: "2026-01-15T09:30:00.000Z"
+ created_by: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
+ match_type: "exact"
+ org_id: 123456
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ id: "123"
+ type: teams_ownership_mappings
+ meta:
+ page:
+ total_count: 1
+ total_filtered_count: 1
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingsResponse"
+ description: OK
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: List teams ownership mappings
+ tags:
+ - Rum Teams Ownership
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+ post:
+ description: |-
+ Create a teams ownership mapping for your organization.
+ Returns the teams ownership mapping object from the request body when the request is successful.
+ operationId: CreateTeamsOwnershipMapping
+ requestBody:
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ match_type: "exact"
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ type: teams_ownership_mappings
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingCreateRequest"
+ description: The definition of the teams ownership mapping to create.
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ created_at: "2026-01-15T09:30:00.000Z"
+ created_by: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
+ match_type: "exact"
+ org_id: 123456
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ id: "123"
+ type: teams_ownership_mappings
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponse"
+ description: Created
+ "400":
+ $ref: "#/components/responses/BadRequestResponse"
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: Create a teams ownership mapping
+ tags:
+ - Rum Teams Ownership
+ x-codegen-request-body-name: body
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+ /api/v2/rum/config/teams-ownership/mappings/operations:
+ post:
+ description: |-
+ Add and remove teams ownership mappings for your organization in a single atomic request, following
+ the JSON:API [atomic operations extension](https://jsonapi.org/ext/atomic/).
+ Operations are applied together: if any operation is invalid, none of the operations are applied.
+ Add operations are processed before remove operations, so results may not appear in the same
+ order as the request.
+ operationId: CreateTeamsOwnershipMappingsBatch
+ requestBody:
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ atomic:operations:
+ - data:
+ attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ match_type: "exact"
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ type: teams_ownership_mappings
+ op: add
+ - op: remove
+ ref:
+ id: "456"
+ type: teams_ownership_mappings
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchRequest"
+ description: The ordered list of add and remove operations to apply atomically.
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ atomic:results:
+ - data:
+ attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ created_at: "2026-01-15T09:30:00.000Z"
+ created_by: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
+ match_type: "exact"
+ org_id: 123456
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ id: "123"
+ type: teams_ownership_mappings
+ - {}
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingBatchResponse"
+ description: OK
+ "400":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ errors:
+ - detail: "prefix match_type is not enabled for this org"
+ status: "400"
+ title: "Bad Request"
+ schema:
+ $ref: "#/components/schemas/JSONAPIErrorResponse"
+ description: |-
+ Bad Request. One or more operations failed validation, so none of the operations were applied.
+ Errors are returned in the JSON:API atomic operations error format rather than the standard error response.
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: Bulk create and remove teams ownership mappings
+ tags:
+ - Rum Teams Ownership
+ x-codegen-request-body-name: body
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+ /api/v2/rum/config/teams-ownership/mappings/{id}:
+ delete:
+ description: Delete a specific teams ownership mapping from your organization.
+ operationId: DeleteTeamsOwnershipMapping
+ parameters:
+ - $ref: "#/components/parameters/TeamsOwnershipMappingIdParameter"
+ responses:
+ "204":
+ description: No Content
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "404":
+ $ref: "#/components/responses/NotFoundResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: Delete a teams ownership mapping
+ tags:
+ - Rum Teams Ownership
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+ get:
+ description: Get a specific teams ownership mapping from your organization.
+ operationId: GetTeamsOwnershipMapping
+ parameters:
+ - $ref: "#/components/parameters/TeamsOwnershipMappingIdParameter"
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ created_at: "2026-01-15T09:30:00.000Z"
+ created_by: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
+ match_type: "exact"
+ org_id: 123456
+ service: "web-checkout"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ id: "123"
+ type: teams_ownership_mappings
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipMappingResponse"
+ description: OK
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "404":
+ $ref: "#/components/responses/NotFoundResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: Get a teams ownership mapping
+ tags:
+ - Rum Teams Ownership
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+ /api/v2/rum/config/teams-ownership/rules:
+ get:
+ description: |-
+ Get the list of teams ownership rules for your organization, optionally filtered.
+ Rules group the underlying mappings by `view_name`, `application_id`, `service`, and `match_type`,
+ collapsing every team that owns the same view into a single entry.
+ operationId: ListTeamsOwnershipRules
+ parameters:
+ - $ref: "#/components/parameters/TeamsOwnershipFilterViewNameParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterTeamHandleParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterApplicationIdParameter"
+ - $ref: "#/components/parameters/TeamsOwnershipFilterServiceParameter"
+ responses:
+ "200":
+ content:
+ application/json:
+ examples:
+ default:
+ value:
+ data:
+ - attributes:
+ application_id: "11111111-2222-3333-4444-555555555555"
+ match_type: "exact"
+ service: "web-checkout"
+ teams:
+ - mapping_id: "123"
+ team_handle: "team-rum"
+ view_name: "/checkout"
+ id: "3b1e2f7a9c4d6e8f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f"
+ type: teams_ownership_grouped_mappings
+ meta:
+ page:
+ total_count: 1
+ total_filtered_count: 1
+ schema:
+ $ref: "#/components/schemas/TeamsOwnershipRulesResponse"
+ description: OK
+ "403":
+ $ref: "#/components/responses/NotAuthorizedResponse"
+ "429":
+ $ref: "#/components/responses/TooManyRequestsResponse"
+ summary: List teams ownership rules
+ tags:
+ - Rum Teams Ownership
+ x-unstable: |-
+ **Note**: This endpoint is in preview and is subject to change.
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
/api/v2/rum/events:
get:
description: |-
@@ -213932,6 +214649,10 @@ tags:
- description: |-
Manage retention filters through [Manage Applications](https://app.datadoghq.com/rum/list) of RUM for your organization.
name: Rum Retention Filters
+ - description: |-
+ Manage [teams ownership](https://docs.datadoghq.com/real_user_monitoring/platform/ownership/) mappings
+ between RUM views and the teams that own them.
+ name: Rum Teams Ownership
- description: |-
Configure your [Datadog Salesforce integration](https://docs.datadoghq.com/integrations/salesforce/)
directly through the Datadog API.
diff --git a/docs/datadog_api_client.v2.api.rst b/docs/datadog_api_client.v2.api.rst
index c4aa3dd164..7873594934 100644
--- a/docs/datadog_api_client.v2.api.rst
+++ b/docs/datadog_api_client.v2.api.rst
@@ -774,6 +774,13 @@ datadog\_api\_client.v2.api.rum\_retention\_filters\_api module
:members:
:show-inheritance:
+datadog\_api\_client.v2.api.rum\_teams\_ownership\_api module
+-------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.api.rum_teams_ownership_api
+ :members:
+ :show-inheritance:
+
datadog\_api\_client.v2.api.salesforce\_integration\_api module
---------------------------------------------------------------
diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst
index c2a5e5aa47..e086af9c28 100644
--- a/docs/datadog_api_client.v2.model.rst
+++ b/docs/datadog_api_client.v2.model.rst
@@ -48297,6 +48297,174 @@ datadog\_api\_client.v2.model.teams\_hierarchy\_links\_response\_meta\_page modu
:members:
:show-inheritance:
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_error module
+----------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_error
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_operation module
+--------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_operation
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_operation\_data module
+--------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_operation\_data\_attributes module
+--------------------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_operation\_op module
+------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_op
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_operation\_ref module
+-------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_ref
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_request module
+------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_request
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_response module
+-------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_response
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_result module
+-----------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_result
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_batch\_result\_data module
+-----------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_batch_result_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_create\_data module
+----------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_create_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_create\_data\_attributes module
+----------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_create_data_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_create\_request module
+-------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_create_request
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_response module
+------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_response
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_response\_attributes module
+------------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_response_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_response\_data module
+------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_response_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mapping\_type module
+--------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mapping_type
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_mappings\_response module
+-------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_mappings_response
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_match\_type module
+------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_match_type
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_rule\_response\_attributes module
+---------------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_rule_response_attributes
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_rule\_response\_data module
+---------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_rule_response_data
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_rule\_team\_mapping module
+--------------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_rule_team_mapping
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_rule\_type module
+-----------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_rule_type
+ :members:
+ :show-inheritance:
+
+datadog\_api\_client.v2.model.teams\_ownership\_rules\_response module
+----------------------------------------------------------------------
+
+.. automodule:: datadog_api_client.v2.model.teams_ownership_rules_response
+ :members:
+ :show-inheritance:
+
datadog\_api\_client.v2.model.teams\_response module
----------------------------------------------------
diff --git a/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping.py b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping.py
new file mode 100644
index 0000000000..f41fb780f6
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping.py
@@ -0,0 +1,35 @@
+"""
+Create a teams ownership mapping returns "Created" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data import TeamsOwnershipMappingCreateData
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data_attributes import (
+ TeamsOwnershipMappingCreateDataAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_create_request import TeamsOwnershipMappingCreateRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+from uuid import UUID
+
+body = TeamsOwnershipMappingCreateRequest(
+ data=TeamsOwnershipMappingCreateData(
+ attributes=TeamsOwnershipMappingCreateDataAttributes(
+ application_id=UUID("11111111-2222-3333-4444-555555555555"),
+ match_type=TeamsOwnershipMatchType.EXACT,
+ service="web-checkout",
+ team_handle="team-rum",
+ view_name="/checkout",
+ ),
+ type=TeamsOwnershipMappingType.TEAMS_OWNERSHIP_MAPPINGS,
+ ),
+)
+
+configuration = Configuration()
+configuration.unstable_operations["create_teams_ownership_mapping"] = True
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.create_teams_ownership_mapping(body=body)
+
+ print(response)
diff --git a/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping_1881412984.py b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping_1881412984.py
new file mode 100644
index 0000000000..287860f9bc
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMapping_1881412984.py
@@ -0,0 +1,34 @@
+"""
+Create teams ownership mapping returns "Created" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data import TeamsOwnershipMappingCreateData
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data_attributes import (
+ TeamsOwnershipMappingCreateDataAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_create_request import TeamsOwnershipMappingCreateRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+from uuid import UUID
+
+body = TeamsOwnershipMappingCreateRequest(
+ data=TeamsOwnershipMappingCreateData(
+ type=TeamsOwnershipMappingType.TEAMS_OWNERSHIP_MAPPINGS,
+ attributes=TeamsOwnershipMappingCreateDataAttributes(
+ team_handle="team-rum",
+ view_name="/checkout",
+ service="web-checkout",
+ application_id=UUID("11111111-2222-3333-4444-555555555555"),
+ match_type=TeamsOwnershipMatchType.EXACT,
+ ),
+ ),
+)
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.create_teams_ownership_mapping(body=body)
+
+ print(response)
diff --git a/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMappingsBatch.py b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMappingsBatch.py
new file mode 100644
index 0000000000..53d59125ae
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/CreateTeamsOwnershipMappingsBatch.py
@@ -0,0 +1,53 @@
+"""
+Bulk create and remove teams ownership mappings returns "OK" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation import TeamsOwnershipMappingBatchOperation
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data import (
+ TeamsOwnershipMappingBatchOperationData,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data_attributes import (
+ TeamsOwnershipMappingBatchOperationDataAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_op import TeamsOwnershipMappingBatchOperationOp
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_ref import (
+ TeamsOwnershipMappingBatchOperationRef,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_request import TeamsOwnershipMappingBatchRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+from uuid import UUID
+
+body = TeamsOwnershipMappingBatchRequest(
+ atomic_operations=[
+ TeamsOwnershipMappingBatchOperation(
+ op=TeamsOwnershipMappingBatchOperationOp.ADD,
+ data=TeamsOwnershipMappingBatchOperationData(
+ type=TeamsOwnershipMappingType.TEAMS_OWNERSHIP_MAPPINGS,
+ attributes=TeamsOwnershipMappingBatchOperationDataAttributes(
+ team_handle="team-rum",
+ view_name="/checkout",
+ service="web-checkout",
+ application_id=UUID("11111111-2222-3333-4444-555555555555"),
+ match_type=TeamsOwnershipMatchType.EXACT,
+ ),
+ ),
+ ),
+ TeamsOwnershipMappingBatchOperation(
+ op=TeamsOwnershipMappingBatchOperationOp.REMOVE,
+ ref=TeamsOwnershipMappingBatchOperationRef(
+ type=TeamsOwnershipMappingType.TEAMS_OWNERSHIP_MAPPINGS,
+ id="456",
+ ),
+ ),
+ ],
+)
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.create_teams_ownership_mappings_batch(body=body)
+
+ print(response)
diff --git a/examples/v2/rum-teams-ownership/DeleteTeamsOwnershipMapping.py b/examples/v2/rum-teams-ownership/DeleteTeamsOwnershipMapping.py
new file mode 100644
index 0000000000..fc3709546a
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/DeleteTeamsOwnershipMapping.py
@@ -0,0 +1,13 @@
+"""
+Delete a teams ownership mapping returns "No Content" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ api_instance.delete_teams_ownership_mapping(
+ id="123",
+ )
diff --git a/examples/v2/rum-teams-ownership/GetTeamsOwnershipMapping.py b/examples/v2/rum-teams-ownership/GetTeamsOwnershipMapping.py
new file mode 100644
index 0000000000..08cdc2d0f5
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/GetTeamsOwnershipMapping.py
@@ -0,0 +1,15 @@
+"""
+Get a teams ownership mapping returns "OK" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.get_teams_ownership_mapping(
+ id="123",
+ )
+
+ print(response)
diff --git a/examples/v2/rum-teams-ownership/ListTeamsOwnershipMappings.py b/examples/v2/rum-teams-ownership/ListTeamsOwnershipMappings.py
new file mode 100644
index 0000000000..9b34339e97
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/ListTeamsOwnershipMappings.py
@@ -0,0 +1,13 @@
+"""
+List teams ownership mappings returns "OK" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.list_teams_ownership_mappings()
+
+ print(response)
diff --git a/examples/v2/rum-teams-ownership/ListTeamsOwnershipRules.py b/examples/v2/rum-teams-ownership/ListTeamsOwnershipRules.py
new file mode 100644
index 0000000000..1662aa8069
--- /dev/null
+++ b/examples/v2/rum-teams-ownership/ListTeamsOwnershipRules.py
@@ -0,0 +1,13 @@
+"""
+List teams ownership rules returns "OK" response
+"""
+
+from datadog_api_client import ApiClient, Configuration
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
+
+configuration = Configuration()
+with ApiClient(configuration) as api_client:
+ api_instance = RumTeamsOwnershipApi(api_client)
+ response = api_instance.list_teams_ownership_rules()
+
+ print(response)
diff --git a/src/datadog_api_client/configuration.py b/src/datadog_api_client/configuration.py
index 9c01331488..6228298002 100644
--- a/src/datadog_api_client/configuration.py
+++ b/src/datadog_api_client/configuration.py
@@ -731,6 +731,12 @@ def __init__(
"v2.create_rum_config": False,
"v2.get_rum_config": False,
"v2.update_rum_config": False,
+ "v2.create_teams_ownership_mapping": False,
+ "v2.create_teams_ownership_mappings_batch": False,
+ "v2.delete_teams_ownership_mapping": False,
+ "v2.get_teams_ownership_mapping": False,
+ "v2.list_teams_ownership_mappings": False,
+ "v2.list_teams_ownership_rules": False,
"v2.create_rum_operation": False,
"v2.create_rum_operation_strong_link": False,
"v2.delete_rum_operation": False,
diff --git a/src/datadog_api_client/v1/api/service_level_objectives_api.py b/src/datadog_api_client/v1/api/service_level_objectives_api.py
index f8641ce541..6b2fb8f22d 100644
--- a/src/datadog_api_client/v1/api/service_level_objectives_api.py
+++ b/src/datadog_api_client/v1/api/service_level_objectives_api.py
@@ -273,11 +273,6 @@ def __init__(self, api_client=None):
"attribute": "offset",
"location": "query",
},
- "is_deleted": {
- "openapi_types": (bool,),
- "attribute": "is_deleted",
- "location": "query",
- },
},
headers_map={
"accept": ["application/json"],
@@ -529,7 +524,6 @@ def list_slos(
metrics_query: Union[str, UnsetType] = unset,
limit: Union[int, UnsetType] = unset,
offset: Union[int, UnsetType] = unset,
- is_deleted: Union[bool, UnsetType] = unset,
) -> SLOListResponse:
"""Get all SLOs.
@@ -547,8 +541,6 @@ def list_slos(
:type limit: int, optional
:param offset: The specific offset to use as the beginning of the returned response.
:type offset: int, optional
- :param is_deleted: Whether to return only deleted service level objective objects.
- :type is_deleted: bool, optional
:rtype: SLOListResponse
"""
kwargs: Dict[str, Any] = {}
@@ -570,9 +562,6 @@ def list_slos(
if offset is not unset:
kwargs["offset"] = offset
- if is_deleted is not unset:
- kwargs["is_deleted"] = is_deleted
-
return self._list_slos_endpoint.call_with_http_info(**kwargs)
def list_slos_with_pagination(
@@ -584,7 +573,6 @@ def list_slos_with_pagination(
metrics_query: Union[str, UnsetType] = unset,
limit: Union[int, UnsetType] = unset,
offset: Union[int, UnsetType] = unset,
- is_deleted: Union[bool, UnsetType] = unset,
) -> collections.abc.Iterable[ServiceLevelObjective]:
"""Get all SLOs.
@@ -602,8 +590,6 @@ def list_slos_with_pagination(
:type limit: int, optional
:param offset: The specific offset to use as the beginning of the returned response.
:type offset: int, optional
- :param is_deleted: Whether to return only deleted service level objective objects.
- :type is_deleted: bool, optional
:return: A generator of paginated results.
:rtype: collections.abc.Iterable[ServiceLevelObjective]
@@ -627,9 +613,6 @@ def list_slos_with_pagination(
if offset is not unset:
kwargs["offset"] = offset
- if is_deleted is not unset:
- kwargs["is_deleted"] = is_deleted
-
local_page_size = get_attribute_from_path(kwargs, "limit", 1000)
endpoint = self._list_slos_endpoint
set_attribute_from_path(kwargs, "limit", local_page_size, endpoint.params_map)
diff --git a/src/datadog_api_client/v2/api/rum_teams_ownership_api.py b/src/datadog_api_client/v2/api/rum_teams_ownership_api.py
new file mode 100644
index 0000000000..2e008148de
--- /dev/null
+++ b/src/datadog_api_client/v2/api/rum_teams_ownership_api.py
@@ -0,0 +1,349 @@
+# 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, List, Union
+
+from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint
+from datadog_api_client.configuration import Configuration
+from datadog_api_client.model_utils import (
+ UnsetType,
+ unset,
+ UUID,
+)
+from datadog_api_client.v2.model.teams_ownership_mappings_response import TeamsOwnershipMappingsResponse
+from datadog_api_client.v2.model.teams_ownership_mapping_response import TeamsOwnershipMappingResponse
+from datadog_api_client.v2.model.teams_ownership_mapping_create_request import TeamsOwnershipMappingCreateRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_response import TeamsOwnershipMappingBatchResponse
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_request import TeamsOwnershipMappingBatchRequest
+from datadog_api_client.v2.model.teams_ownership_rules_response import TeamsOwnershipRulesResponse
+
+
+class RumTeamsOwnershipApi:
+ """
+ Manage `teams ownership `_ mappings
+ between RUM views and the teams that own them.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient(Configuration())
+ self.api_client = api_client
+
+ self._create_teams_ownership_mapping_endpoint = _Endpoint(
+ settings={
+ "response_type": (TeamsOwnershipMappingResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/mappings",
+ "operation_id": "create_teams_ownership_mapping",
+ "http_method": "POST",
+ "version": "v2",
+ },
+ params_map={
+ "body": {
+ "required": True,
+ "openapi_types": (TeamsOwnershipMappingCreateRequest,),
+ "location": "body",
+ },
+ },
+ headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
+ api_client=api_client,
+ )
+
+ self._create_teams_ownership_mappings_batch_endpoint = _Endpoint(
+ settings={
+ "response_type": (TeamsOwnershipMappingBatchResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/mappings/operations",
+ "operation_id": "create_teams_ownership_mappings_batch",
+ "http_method": "POST",
+ "version": "v2",
+ },
+ params_map={
+ "body": {
+ "required": True,
+ "openapi_types": (TeamsOwnershipMappingBatchRequest,),
+ "location": "body",
+ },
+ },
+ headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
+ api_client=api_client,
+ )
+
+ self._delete_teams_ownership_mapping_endpoint = _Endpoint(
+ settings={
+ "response_type": None,
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/mappings/{id}",
+ "operation_id": "delete_teams_ownership_mapping",
+ "http_method": "DELETE",
+ "version": "v2",
+ },
+ params_map={
+ "id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["*/*"],
+ },
+ api_client=api_client,
+ )
+
+ self._get_teams_ownership_mapping_endpoint = _Endpoint(
+ settings={
+ "response_type": (TeamsOwnershipMappingResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/mappings/{id}",
+ "operation_id": "get_teams_ownership_mapping",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "id": {
+ "required": True,
+ "openapi_types": (str,),
+ "attribute": "id",
+ "location": "path",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ self._list_teams_ownership_mappings_endpoint = _Endpoint(
+ settings={
+ "response_type": (TeamsOwnershipMappingsResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/mappings",
+ "operation_id": "list_teams_ownership_mappings",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "filter_view_name": {
+ "openapi_types": ([str],),
+ "attribute": "filter[view_name]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_team_handle": {
+ "openapi_types": ([str],),
+ "attribute": "filter[team_handle]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_application_id": {
+ "openapi_types": ([UUID],),
+ "attribute": "filter[application_id]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_service": {
+ "openapi_types": ([str],),
+ "attribute": "filter[service]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ self._list_teams_ownership_rules_endpoint = _Endpoint(
+ settings={
+ "response_type": (TeamsOwnershipRulesResponse,),
+ "auth": ["apiKeyAuth", "appKeyAuth"],
+ "endpoint_path": "/api/v2/rum/config/teams-ownership/rules",
+ "operation_id": "list_teams_ownership_rules",
+ "http_method": "GET",
+ "version": "v2",
+ },
+ params_map={
+ "filter_view_name": {
+ "openapi_types": ([str],),
+ "attribute": "filter[view_name]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_team_handle": {
+ "openapi_types": ([str],),
+ "attribute": "filter[team_handle]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_application_id": {
+ "openapi_types": ([UUID],),
+ "attribute": "filter[application_id]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ "filter_service": {
+ "openapi_types": ([str],),
+ "attribute": "filter[service]",
+ "location": "query",
+ "collection_format": "multi",
+ },
+ },
+ headers_map={
+ "accept": ["application/json"],
+ },
+ api_client=api_client,
+ )
+
+ def create_teams_ownership_mapping(
+ self,
+ body: TeamsOwnershipMappingCreateRequest,
+ ) -> TeamsOwnershipMappingResponse:
+ """Create a teams ownership mapping.
+
+ Create a teams ownership mapping for your organization.
+ Returns the teams ownership mapping object from the request body when the request is successful.
+
+ :param body: The definition of the teams ownership mapping to create.
+ :type body: TeamsOwnershipMappingCreateRequest
+ :rtype: TeamsOwnershipMappingResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["body"] = body
+
+ return self._create_teams_ownership_mapping_endpoint.call_with_http_info(**kwargs)
+
+ def create_teams_ownership_mappings_batch(
+ self,
+ body: TeamsOwnershipMappingBatchRequest,
+ ) -> TeamsOwnershipMappingBatchResponse:
+ """Bulk create and remove teams ownership mappings.
+
+ Add and remove teams ownership mappings for your organization in a single atomic request, following
+ the JSON:API `atomic operations extension `_.
+ Operations are applied together: if any operation is invalid, none of the operations are applied.
+ Add operations are processed before remove operations, so results may not appear in the same
+ order as the request.
+
+ :param body: The ordered list of add and remove operations to apply atomically.
+ :type body: TeamsOwnershipMappingBatchRequest
+ :rtype: TeamsOwnershipMappingBatchResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["body"] = body
+
+ return self._create_teams_ownership_mappings_batch_endpoint.call_with_http_info(**kwargs)
+
+ def delete_teams_ownership_mapping(
+ self,
+ id: str,
+ ) -> None:
+ """Delete a teams ownership mapping.
+
+ Delete a specific teams ownership mapping from your organization.
+
+ :param id: The ID of the teams ownership mapping.
+ :type id: str
+ :rtype: None
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["id"] = id
+
+ return self._delete_teams_ownership_mapping_endpoint.call_with_http_info(**kwargs)
+
+ def get_teams_ownership_mapping(
+ self,
+ id: str,
+ ) -> TeamsOwnershipMappingResponse:
+ """Get a teams ownership mapping.
+
+ Get a specific teams ownership mapping from your organization.
+
+ :param id: The ID of the teams ownership mapping.
+ :type id: str
+ :rtype: TeamsOwnershipMappingResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ kwargs["id"] = id
+
+ return self._get_teams_ownership_mapping_endpoint.call_with_http_info(**kwargs)
+
+ def list_teams_ownership_mappings(
+ self,
+ *,
+ filter_view_name: Union[List[str], UnsetType] = unset,
+ filter_team_handle: Union[List[str], UnsetType] = unset,
+ filter_application_id: Union[List[UUID], UnsetType] = unset,
+ filter_service: Union[List[str], UnsetType] = unset,
+ ) -> TeamsOwnershipMappingsResponse:
+ """List teams ownership mappings.
+
+ Get the list of teams ownership mappings for your organization, optionally filtered.
+
+ :param filter_view_name: Filter mappings by RUM view name.
+ :type filter_view_name: [str], optional
+ :param filter_team_handle: Filter mappings by owning team handle.
+ :type filter_team_handle: [str], optional
+ :param filter_application_id: Filter mappings by RUM application ID. Each value must be a valid UUID.
+ :type filter_application_id: [UUID], optional
+ :param filter_service: Filter mappings by RUM application service name.
+ :type filter_service: [str], optional
+ :rtype: TeamsOwnershipMappingsResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ if filter_view_name is not unset:
+ kwargs["filter_view_name"] = filter_view_name
+
+ if filter_team_handle is not unset:
+ kwargs["filter_team_handle"] = filter_team_handle
+
+ if filter_application_id is not unset:
+ kwargs["filter_application_id"] = filter_application_id
+
+ if filter_service is not unset:
+ kwargs["filter_service"] = filter_service
+
+ return self._list_teams_ownership_mappings_endpoint.call_with_http_info(**kwargs)
+
+ def list_teams_ownership_rules(
+ self,
+ *,
+ filter_view_name: Union[List[str], UnsetType] = unset,
+ filter_team_handle: Union[List[str], UnsetType] = unset,
+ filter_application_id: Union[List[UUID], UnsetType] = unset,
+ filter_service: Union[List[str], UnsetType] = unset,
+ ) -> TeamsOwnershipRulesResponse:
+ """List teams ownership rules.
+
+ Get the list of teams ownership rules for your organization, optionally filtered.
+ Rules group the underlying mappings by ``view_name`` , ``application_id`` , ``service`` , and ``match_type`` ,
+ collapsing every team that owns the same view into a single entry.
+
+ :param filter_view_name: Filter mappings by RUM view name.
+ :type filter_view_name: [str], optional
+ :param filter_team_handle: Filter mappings by owning team handle.
+ :type filter_team_handle: [str], optional
+ :param filter_application_id: Filter mappings by RUM application ID. Each value must be a valid UUID.
+ :type filter_application_id: [UUID], optional
+ :param filter_service: Filter mappings by RUM application service name.
+ :type filter_service: [str], optional
+ :rtype: TeamsOwnershipRulesResponse
+ """
+ kwargs: Dict[str, Any] = {}
+ if filter_view_name is not unset:
+ kwargs["filter_view_name"] = filter_view_name
+
+ if filter_team_handle is not unset:
+ kwargs["filter_team_handle"] = filter_team_handle
+
+ if filter_application_id is not unset:
+ kwargs["filter_application_id"] = filter_application_id
+
+ if filter_service is not unset:
+ kwargs["filter_service"] = filter_service
+
+ return self._list_teams_ownership_rules_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 4b206c9efa..71402d2d7f 100644
--- a/src/datadog_api_client/v2/apis/__init__.py
+++ b/src/datadog_api_client/v2/apis/__init__.py
@@ -108,6 +108,7 @@
from datadog_api_client.v2.api.rum_replay_sessions_api import RumReplaySessionsApi
from datadog_api_client.v2.api.rum_replay_viewership_api import RumReplayViewershipApi
from datadog_api_client.v2.api.rum_retention_filters_api import RumRetentionFiltersApi
+from datadog_api_client.v2.api.rum_teams_ownership_api import RumTeamsOwnershipApi
from datadog_api_client.v2.api.salesforce_integration_api import SalesforceIntegrationApi
from datadog_api_client.v2.api.scorecards_api import ScorecardsApi
from datadog_api_client.v2.api.seats_api import SeatsApi
@@ -251,6 +252,7 @@
"RumReplaySessionsApi",
"RumReplayViewershipApi",
"RumRetentionFiltersApi",
+ "RumTeamsOwnershipApi",
"SalesforceIntegrationApi",
"ScorecardsApi",
"SeatsApi",
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_error.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_error.py
new file mode 100644
index 0000000000..4d7a1dee94
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_error.py
@@ -0,0 +1,49 @@
+# 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
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ unset,
+ UnsetType,
+)
+
+
+class TeamsOwnershipMappingBatchError(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "detail": (str,),
+ "status": (str,),
+ "title": (str,),
+ }
+
+ attribute_map = {
+ "detail": "detail",
+ "status": "status",
+ "title": "title",
+ }
+
+ def __init__(self_, status: str, title: str, detail: Union[str, UnsetType] = unset, **kwargs):
+ """
+ An error encountered while validating or applying an operation.
+
+ :param detail: A human-readable explanation specific to this error.
+ :type detail: str, optional
+
+ :param status: The HTTP status code applicable to this error.
+ :type status: str
+
+ :param title: A short, human-readable summary of the error.
+ :type title: str
+ """
+ if detail is not unset:
+ kwargs["detail"] = detail
+ super().__init__(kwargs)
+
+ self_.status = status
+ self_.title = title
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation.py
new file mode 100644
index 0000000000..f6a2609b41
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation.py
@@ -0,0 +1,78 @@
+# 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.teams_ownership_mapping_batch_operation_data import (
+ TeamsOwnershipMappingBatchOperationData,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_op import (
+ TeamsOwnershipMappingBatchOperationOp,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_ref import (
+ TeamsOwnershipMappingBatchOperationRef,
+ )
+
+
+class TeamsOwnershipMappingBatchOperation(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data import (
+ TeamsOwnershipMappingBatchOperationData,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_op import (
+ TeamsOwnershipMappingBatchOperationOp,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_ref import (
+ TeamsOwnershipMappingBatchOperationRef,
+ )
+
+ return {
+ "data": (TeamsOwnershipMappingBatchOperationData,),
+ "op": (TeamsOwnershipMappingBatchOperationOp,),
+ "ref": (TeamsOwnershipMappingBatchOperationRef,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ "op": "op",
+ "ref": "ref",
+ }
+
+ def __init__(
+ self_,
+ op: TeamsOwnershipMappingBatchOperationOp,
+ data: Union[TeamsOwnershipMappingBatchOperationData, UnsetType] = unset,
+ ref: Union[TeamsOwnershipMappingBatchOperationRef, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ A single add or remove operation, applied atomically with every other operation in the request.
+
+ :param data: The mapping to add. Required when ``op`` is ``add``.
+ :type data: TeamsOwnershipMappingBatchOperationData, optional
+
+ :param op: Whether this operation adds a new mapping or removes an existing one.
+ :type op: TeamsOwnershipMappingBatchOperationOp
+
+ :param ref: Identifies an existing mapping to remove. Required when ``op`` is ``remove``.
+ :type ref: TeamsOwnershipMappingBatchOperationRef, optional
+ """
+ if data is not unset:
+ kwargs["data"] = data
+ if ref is not unset:
+ kwargs["ref"] = ref
+ super().__init__(kwargs)
+
+ self_.op = op
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data.py
new file mode 100644
index 0000000000..3340c2bb9d
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data.py
@@ -0,0 +1,55 @@
+# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+# This product includes software developed at Datadog (https://www.datadoghq.com/).
+# Copyright 2019-Present Datadog, Inc.
+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.teams_ownership_mapping_batch_operation_data_attributes import (
+ TeamsOwnershipMappingBatchOperationDataAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+
+class TeamsOwnershipMappingBatchOperationData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data_attributes import (
+ TeamsOwnershipMappingBatchOperationDataAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+ return {
+ "attributes": (TeamsOwnershipMappingBatchOperationDataAttributes,),
+ "type": (TeamsOwnershipMappingType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: TeamsOwnershipMappingBatchOperationDataAttributes, type: TeamsOwnershipMappingType, **kwargs
+ ):
+ """
+ The mapping to add. Required when ``op`` is ``add``.
+
+ :param attributes: The attributes of the mapping to add. ``team_handle`` and ``view_name`` are required
+ when ``op`` is ``add``.
+ :type attributes: TeamsOwnershipMappingBatchOperationDataAttributes
+
+ :param type: The type of the resource. The value should always be teams_ownership_mappings.
+ :type type: TeamsOwnershipMappingType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data_attributes.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data_attributes.py
new file mode 100644
index 0000000000..150b615ee0
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_data_attributes.py
@@ -0,0 +1,82 @@
+# 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,
+ UUID,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+
+class TeamsOwnershipMappingBatchOperationDataAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+ return {
+ "application_id": (UUID,),
+ "match_type": (TeamsOwnershipMatchType,),
+ "service": (str,),
+ "team_handle": (str,),
+ "view_name": (str,),
+ }
+
+ attribute_map = {
+ "application_id": "application_id",
+ "match_type": "match_type",
+ "service": "service",
+ "team_handle": "team_handle",
+ "view_name": "view_name",
+ }
+
+ def __init__(
+ self_,
+ application_id: Union[UUID, UnsetType] = unset,
+ match_type: Union[TeamsOwnershipMatchType, UnsetType] = unset,
+ service: Union[str, UnsetType] = unset,
+ team_handle: Union[str, UnsetType] = unset,
+ view_name: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ The attributes of the mapping to add. ``team_handle`` and ``view_name`` are required
+ when ``op`` is ``add``.
+
+ :param application_id: The ID of the RUM application this mapping applies to.
+ For browser applications, provide the real application UUID — the team is applied to the view regardless of service.
+ For mobile applications, omit this field (or set it to the nil UUID ``00000000-0000-0000-0000-000000000000`` ) — the team is applied to the view and service combination across all applications.
+ :type application_id: UUID, optional
+
+ :param match_type: How the ``view_name`` is matched against RUM view names.
+ :type match_type: TeamsOwnershipMatchType, optional
+
+ :param service: The RUM application's service name. For browser applications, this is optional. For mobile applications, this is required and scopes the ownership to a specific service.
+ :type service: str, optional
+
+ :param team_handle: The handle of the team that owns the matched RUM views.
+ :type team_handle: str, optional
+
+ :param view_name: The RUM view name to match, or its prefix when ``match_type`` is ``prefix``.
+ :type view_name: str, optional
+ """
+ if application_id is not unset:
+ kwargs["application_id"] = application_id
+ if match_type is not unset:
+ kwargs["match_type"] = match_type
+ if service is not unset:
+ kwargs["service"] = service
+ if team_handle is not unset:
+ kwargs["team_handle"] = team_handle
+ if view_name is not unset:
+ kwargs["view_name"] = view_name
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_op.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_op.py
new file mode 100644
index 0000000000..b1aeaab081
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_op.py
@@ -0,0 +1,38 @@
+# 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 TeamsOwnershipMappingBatchOperationOp(ModelSimple):
+ """
+ Whether this operation adds a new mapping or removes an existing one.
+
+ :param value: Must be one of ["add", "remove"].
+ :type value: str
+ """
+
+ allowed_values = {
+ "add",
+ "remove",
+ }
+ ADD: ClassVar["TeamsOwnershipMappingBatchOperationOp"]
+ REMOVE: ClassVar["TeamsOwnershipMappingBatchOperationOp"]
+
+ @cached_property
+ def openapi_types(_):
+ return {
+ "value": (str,),
+ }
+
+
+TeamsOwnershipMappingBatchOperationOp.ADD = TeamsOwnershipMappingBatchOperationOp("add")
+TeamsOwnershipMappingBatchOperationOp.REMOVE = TeamsOwnershipMappingBatchOperationOp("remove")
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_ref.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_ref.py
new file mode 100644
index 0000000000..c3fa68440f
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_operation_ref.py
@@ -0,0 +1,46 @@
+# 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.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+
+class TeamsOwnershipMappingBatchOperationRef(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+ return {
+ "id": (str,),
+ "type": (TeamsOwnershipMappingType,),
+ }
+
+ attribute_map = {
+ "id": "id",
+ "type": "type",
+ }
+
+ def __init__(self_, id: str, type: TeamsOwnershipMappingType, **kwargs):
+ """
+ Identifies an existing mapping to remove. Required when ``op`` is ``remove``.
+
+ :param id: The ID of the mapping to remove.
+ :type id: str
+
+ :param type: The type of the resource. The value should always be teams_ownership_mappings.
+ :type type: TeamsOwnershipMappingType
+ """
+ super().__init__(kwargs)
+
+ self_.id = id
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_request.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_request.py
new file mode 100644
index 0000000000..3d75d58bdf
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_request.py
@@ -0,0 +1,42 @@
+# 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, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation import TeamsOwnershipMappingBatchOperation
+
+
+class TeamsOwnershipMappingBatchRequest(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation import (
+ TeamsOwnershipMappingBatchOperation,
+ )
+
+ return {
+ "atomic_operations": ([TeamsOwnershipMappingBatchOperation],),
+ }
+
+ attribute_map = {
+ "atomic_operations": "atomic:operations",
+ }
+
+ def __init__(self_, atomic_operations: List[TeamsOwnershipMappingBatchOperation], **kwargs):
+ """
+ The request body for bulk-creating and bulk-removing teams ownership mappings.
+
+ :param atomic_operations: The ordered list of add and remove operations to apply atomically.
+ :type atomic_operations: [TeamsOwnershipMappingBatchOperation]
+ """
+ super().__init__(kwargs)
+
+ self_.atomic_operations = atomic_operations
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_response.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_response.py
new file mode 100644
index 0000000000..eff2e62f54
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_response.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 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.teams_ownership_mapping_batch_result import TeamsOwnershipMappingBatchResult
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_error import TeamsOwnershipMappingBatchError
+
+
+class TeamsOwnershipMappingBatchResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_result import TeamsOwnershipMappingBatchResult
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_error import TeamsOwnershipMappingBatchError
+
+ return {
+ "atomic_results": ([TeamsOwnershipMappingBatchResult],),
+ "errors": ([TeamsOwnershipMappingBatchError],),
+ }
+
+ attribute_map = {
+ "atomic_results": "atomic:results",
+ "errors": "errors",
+ }
+
+ def __init__(
+ self_,
+ atomic_results: Union[List[TeamsOwnershipMappingBatchResult], UnsetType] = unset,
+ errors: Union[List[TeamsOwnershipMappingBatchError], UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ The response body for the bulk create and remove operation. On success, ``atomic:results``
+ contains one entry per operation, in request order. On failure, no operations were applied
+ and ``errors`` describes what went wrong.
+
+ :param atomic_results: The result of each operation.
+ Add operations are processed first, then remove operations, so results may not appear
+ in the same order as the request. Present only on success.
+ :type atomic_results: [TeamsOwnershipMappingBatchResult], optional
+
+ :param errors: The validation or processing errors encountered. Present only when the request could not be completed.
+ :type errors: [TeamsOwnershipMappingBatchError], optional
+ """
+ if atomic_results is not unset:
+ kwargs["atomic_results"] = atomic_results
+ if errors is not unset:
+ kwargs["errors"] = errors
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result.py
new file mode 100644
index 0000000000..305980c73c
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result.py
@@ -0,0 +1,48 @@
+# 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.teams_ownership_mapping_batch_result_data import (
+ TeamsOwnershipMappingBatchResultData,
+ )
+
+
+class TeamsOwnershipMappingBatchResult(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_batch_result_data import (
+ TeamsOwnershipMappingBatchResultData,
+ )
+
+ return {
+ "data": (TeamsOwnershipMappingBatchResultData,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ }
+
+ def __init__(self_, data: Union[TeamsOwnershipMappingBatchResultData, UnsetType] = unset, **kwargs):
+ """
+ The result of a single operation.
+ Add operations are processed first, then remove operations, so results may not appear
+ in the same order as the request. Empty for ``remove`` operations.
+
+ :param data: The mapping created by an ``add`` operation.
+ :type data: TeamsOwnershipMappingBatchResultData, optional
+ """
+ if data is not unset:
+ kwargs["data"] = data
+ super().__init__(kwargs)
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result_data.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result_data.py
new file mode 100644
index 0000000000..b1be632dcb
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_batch_result_data.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 TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_attributes import (
+ TeamsOwnershipMappingResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+
+class TeamsOwnershipMappingBatchResultData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_attributes import (
+ TeamsOwnershipMappingResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+ return {
+ "attributes": (TeamsOwnershipMappingResponseAttributes,),
+ "id": (str,),
+ "type": (TeamsOwnershipMappingType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "id": "id",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: TeamsOwnershipMappingResponseAttributes, id: str, type: TeamsOwnershipMappingType, **kwargs
+ ):
+ """
+ The mapping created by an ``add`` operation.
+
+ :param attributes: The attributes of a teams ownership mapping.
+ :type attributes: TeamsOwnershipMappingResponseAttributes
+
+ :param id: The unique identifier of the teams ownership mapping.
+ :type id: str
+
+ :param type: The type of the resource. The value should always be teams_ownership_mappings.
+ :type type: TeamsOwnershipMappingType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.id = id
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_create_data.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_data.py
new file mode 100644
index 0000000000..d69ca07ee2
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_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.teams_ownership_mapping_create_data_attributes import (
+ TeamsOwnershipMappingCreateDataAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+
+class TeamsOwnershipMappingCreateData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_create_data_attributes import (
+ TeamsOwnershipMappingCreateDataAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+ return {
+ "attributes": (TeamsOwnershipMappingCreateDataAttributes,),
+ "type": (TeamsOwnershipMappingType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: TeamsOwnershipMappingCreateDataAttributes, type: TeamsOwnershipMappingType, **kwargs
+ ):
+ """
+ The JSON:API data envelope for a teams ownership mapping create request.
+
+ :param attributes: The attributes of the teams ownership mapping to create.
+ :type attributes: TeamsOwnershipMappingCreateDataAttributes
+
+ :param type: The type of the resource. The value should always be teams_ownership_mappings.
+ :type type: TeamsOwnershipMappingType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_create_data_attributes.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_data_attributes.py
new file mode 100644
index 0000000000..928c383307
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_data_attributes.py
@@ -0,0 +1,80 @@
+# 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,
+ UUID,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+
+class TeamsOwnershipMappingCreateDataAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+ return {
+ "application_id": (UUID,),
+ "match_type": (TeamsOwnershipMatchType,),
+ "service": (str,),
+ "team_handle": (str,),
+ "view_name": (str,),
+ }
+
+ attribute_map = {
+ "application_id": "application_id",
+ "match_type": "match_type",
+ "service": "service",
+ "team_handle": "team_handle",
+ "view_name": "view_name",
+ }
+
+ def __init__(
+ self_,
+ team_handle: str,
+ view_name: str,
+ application_id: Union[UUID, UnsetType] = unset,
+ match_type: Union[TeamsOwnershipMatchType, UnsetType] = unset,
+ service: Union[str, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ The attributes of the teams ownership mapping to create.
+
+ :param application_id: The ID of the RUM application this mapping applies to.
+ For browser applications, provide the real application UUID — the team is applied to the view regardless of service.
+ For mobile applications, omit this field (or set it to the nil UUID ``00000000-0000-0000-0000-000000000000`` ) — the team is applied to the view and service combination across all applications.
+ :type application_id: UUID, optional
+
+ :param match_type: How the ``view_name`` is matched against RUM view names.
+ :type match_type: TeamsOwnershipMatchType, optional
+
+ :param service: The RUM application's service name. For browser applications, this is optional. For mobile applications, this is required and scopes the ownership to a specific service.
+ :type service: str, optional
+
+ :param team_handle: The handle of the team that owns the matched RUM views.
+ :type team_handle: str
+
+ :param view_name: The RUM view name to match, or its prefix when ``match_type`` is ``prefix``.
+ :type view_name: str
+ """
+ if application_id is not unset:
+ kwargs["application_id"] = application_id
+ if match_type is not unset:
+ kwargs["match_type"] = match_type
+ if service is not unset:
+ kwargs["service"] = service
+ super().__init__(kwargs)
+
+ self_.team_handle = team_handle
+ self_.view_name = view_name
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_create_request.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_request.py
new file mode 100644
index 0000000000..82223dfbfa
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_create_request.py
@@ -0,0 +1,40 @@
+# 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.teams_ownership_mapping_create_data import TeamsOwnershipMappingCreateData
+
+
+class TeamsOwnershipMappingCreateRequest(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_create_data import TeamsOwnershipMappingCreateData
+
+ return {
+ "data": (TeamsOwnershipMappingCreateData,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ }
+
+ def __init__(self_, data: TeamsOwnershipMappingCreateData, **kwargs):
+ """
+ The request body for creating a teams ownership mapping.
+
+ :param data: The JSON:API data envelope for a teams ownership mapping create request.
+ :type data: TeamsOwnershipMappingCreateData
+ """
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_response.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_response.py
new file mode 100644
index 0000000000..d823f72cf0
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_response.py
@@ -0,0 +1,40 @@
+# 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.teams_ownership_mapping_response_data import TeamsOwnershipMappingResponseData
+
+
+class TeamsOwnershipMappingResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_data import TeamsOwnershipMappingResponseData
+
+ return {
+ "data": (TeamsOwnershipMappingResponseData,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ }
+
+ def __init__(self_, data: TeamsOwnershipMappingResponseData, **kwargs):
+ """
+ The response body for a single teams ownership mapping.
+
+ :param data: The JSON:API data envelope for a teams ownership mapping.
+ :type data: TeamsOwnershipMappingResponseData
+ """
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_response_attributes.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_response_attributes.py
new file mode 100644
index 0000000000..3a598c375b
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_response_attributes.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 TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+ datetime,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+
+class TeamsOwnershipMappingResponseAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+
+ return {
+ "application_id": (str,),
+ "created_at": (datetime,),
+ "created_by": (str,),
+ "match_type": (TeamsOwnershipMatchType,),
+ "org_id": (int,),
+ "service": (str,),
+ "team_handle": (str,),
+ "view_name": (str,),
+ }
+
+ attribute_map = {
+ "application_id": "application_id",
+ "created_at": "created_at",
+ "created_by": "created_by",
+ "match_type": "match_type",
+ "org_id": "org_id",
+ "service": "service",
+ "team_handle": "team_handle",
+ "view_name": "view_name",
+ }
+
+ def __init__(
+ self_,
+ application_id: str,
+ created_at: datetime,
+ created_by: str,
+ match_type: TeamsOwnershipMatchType,
+ org_id: int,
+ service: str,
+ team_handle: str,
+ view_name: str,
+ **kwargs,
+ ):
+ """
+ The attributes of a teams ownership mapping.
+
+ :param application_id: The ID of the RUM application this mapping applies to.
+ For browser applications, this is the real application UUID.
+ For mobile applications, this is the nil UUID ``00000000-0000-0000-0000-000000000000`` (wildcard), meaning the ownership applies across all applications.
+ :type application_id: str
+
+ :param created_at: Timestamp when the mapping was created.
+ :type created_at: datetime
+
+ :param created_by: The UUID of the user who created the mapping.
+ :type created_by: str
+
+ :param match_type: How the ``view_name`` is matched against RUM view names.
+ :type match_type: TeamsOwnershipMatchType
+
+ :param org_id: The ID of the organization that owns this mapping.
+ :type org_id: int
+
+ :param service: The RUM application's service name. For browser applications, may be empty. For mobile applications, this is the service that scopes the ownership.
+ :type service: str
+
+ :param team_handle: The handle of the team that owns the matched RUM views.
+ :type team_handle: str
+
+ :param view_name: The RUM view name to match, or its prefix when ``match_type`` is ``prefix``.
+ :type view_name: str
+ """
+ super().__init__(kwargs)
+
+ self_.application_id = application_id
+ self_.created_at = created_at
+ self_.created_by = created_by
+ self_.match_type = match_type
+ self_.org_id = org_id
+ self_.service = service
+ self_.team_handle = team_handle
+ self_.view_name = view_name
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_response_data.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_response_data.py
new file mode 100644
index 0000000000..89d6c62331
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_response_data.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 TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_attributes import (
+ TeamsOwnershipMappingResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+
+class TeamsOwnershipMappingResponseData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_attributes import (
+ TeamsOwnershipMappingResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+
+ return {
+ "attributes": (TeamsOwnershipMappingResponseAttributes,),
+ "id": (str,),
+ "type": (TeamsOwnershipMappingType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "id": "id",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: TeamsOwnershipMappingResponseAttributes, id: str, type: TeamsOwnershipMappingType, **kwargs
+ ):
+ """
+ The JSON:API data envelope for a teams ownership mapping.
+
+ :param attributes: The attributes of a teams ownership mapping.
+ :type attributes: TeamsOwnershipMappingResponseAttributes
+
+ :param id: The unique identifier of the teams ownership mapping.
+ :type id: str
+
+ :param type: The type of the resource. The value should always be teams_ownership_mappings.
+ :type type: TeamsOwnershipMappingType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.id = id
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mapping_type.py b/src/datadog_api_client/v2/model/teams_ownership_mapping_type.py
new file mode 100644
index 0000000000..f4550a702e
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mapping_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 TeamsOwnershipMappingType(ModelSimple):
+ """
+ The type of the resource. The value should always be teams_ownership_mappings.
+
+ :param value: If omitted defaults to "teams_ownership_mappings". Must be one of ["teams_ownership_mappings"].
+ :type value: str
+ """
+
+ allowed_values = {
+ "teams_ownership_mappings",
+ }
+ TEAMS_OWNERSHIP_MAPPINGS: ClassVar["TeamsOwnershipMappingType"]
+
+ @cached_property
+ def openapi_types(_):
+ return {
+ "value": (str,),
+ }
+
+
+TeamsOwnershipMappingType.TEAMS_OWNERSHIP_MAPPINGS = TeamsOwnershipMappingType("teams_ownership_mappings")
diff --git a/src/datadog_api_client/v2/model/teams_ownership_mappings_response.py b/src/datadog_api_client/v2/model/teams_ownership_mappings_response.py
new file mode 100644
index 0000000000..f5d6d708f0
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_mappings_response.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 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.teams_ownership_mapping_response_data import TeamsOwnershipMappingResponseData
+ from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes
+
+
+class TeamsOwnershipMappingsResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_mapping_response_data import TeamsOwnershipMappingResponseData
+ from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes
+
+ return {
+ "data": ([TeamsOwnershipMappingResponseData],),
+ "meta": (ResponseMetaAttributes,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ "meta": "meta",
+ }
+
+ def __init__(
+ self_,
+ data: List[TeamsOwnershipMappingResponseData],
+ meta: Union[ResponseMetaAttributes, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ The response body for a list of teams ownership mappings.
+
+ :param data: A list of teams ownership mappings.
+ :type data: [TeamsOwnershipMappingResponseData]
+
+ :param meta: Object describing meta attributes of response.
+ :type meta: ResponseMetaAttributes, optional
+ """
+ if meta is not unset:
+ kwargs["meta"] = meta
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/model/teams_ownership_match_type.py b/src/datadog_api_client/v2/model/teams_ownership_match_type.py
new file mode 100644
index 0000000000..7f9932c8b7
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_match_type.py
@@ -0,0 +1,38 @@
+# 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 TeamsOwnershipMatchType(ModelSimple):
+ """
+ How the `view_name` is matched against RUM view names.
+
+ :param value: If omitted defaults to "exact". Must be one of ["exact", "prefix"].
+ :type value: str
+ """
+
+ allowed_values = {
+ "exact",
+ "prefix",
+ }
+ EXACT: ClassVar["TeamsOwnershipMatchType"]
+ PREFIX: ClassVar["TeamsOwnershipMatchType"]
+
+ @cached_property
+ def openapi_types(_):
+ return {
+ "value": (str,),
+ }
+
+
+TeamsOwnershipMatchType.EXACT = TeamsOwnershipMatchType("exact")
+TeamsOwnershipMatchType.PREFIX = TeamsOwnershipMatchType("prefix")
diff --git a/src/datadog_api_client/v2/model/teams_ownership_rule_response_attributes.py b/src/datadog_api_client/v2/model/teams_ownership_rule_response_attributes.py
new file mode 100644
index 0000000000..429d936161
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_rule_response_attributes.py
@@ -0,0 +1,76 @@
+# 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, TYPE_CHECKING
+
+from datadog_api_client.model_utils import (
+ ModelNormal,
+ cached_property,
+)
+
+
+if TYPE_CHECKING:
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+ from datadog_api_client.v2.model.teams_ownership_rule_team_mapping import TeamsOwnershipRuleTeamMapping
+
+
+class TeamsOwnershipRuleResponseAttributes(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+ from datadog_api_client.v2.model.teams_ownership_rule_team_mapping import TeamsOwnershipRuleTeamMapping
+
+ return {
+ "application_id": (str,),
+ "match_type": (TeamsOwnershipMatchType,),
+ "service": (str,),
+ "teams": ([TeamsOwnershipRuleTeamMapping],),
+ "view_name": (str,),
+ }
+
+ attribute_map = {
+ "application_id": "application_id",
+ "match_type": "match_type",
+ "service": "service",
+ "teams": "teams",
+ "view_name": "view_name",
+ }
+
+ def __init__(
+ self_,
+ application_id: str,
+ match_type: TeamsOwnershipMatchType,
+ service: str,
+ teams: List[TeamsOwnershipRuleTeamMapping],
+ view_name: str,
+ **kwargs,
+ ):
+ """
+ The attributes of a teams ownership rule.
+
+ :param application_id: The ID of the RUM application this mapping applies to.
+ For browser applications, this is the real application UUID.
+ For mobile applications, this is the nil UUID ``00000000-0000-0000-0000-000000000000`` (wildcard), meaning the ownership applies across all applications.
+ :type application_id: str
+
+ :param match_type: How the ``view_name`` is matched against RUM view names.
+ :type match_type: TeamsOwnershipMatchType
+
+ :param service: The RUM application's service name. For browser applications, may be empty. For mobile applications, this is the service that scopes the ownership.
+ :type service: str
+
+ :param teams: The teams that own the matched views, each paired with the ID of its underlying mapping.
+ :type teams: [TeamsOwnershipRuleTeamMapping]
+
+ :param view_name: The RUM view name to match, or its prefix when ``match_type`` is ``prefix``.
+ :type view_name: str
+ """
+ super().__init__(kwargs)
+
+ self_.application_id = application_id
+ self_.match_type = match_type
+ self_.service = service
+ self_.teams = teams
+ self_.view_name = view_name
diff --git a/src/datadog_api_client/v2/model/teams_ownership_rule_response_data.py b/src/datadog_api_client/v2/model/teams_ownership_rule_response_data.py
new file mode 100644
index 0000000000..f72feee7f5
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_rule_response_data.py
@@ -0,0 +1,62 @@
+# 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.teams_ownership_rule_response_attributes import (
+ TeamsOwnershipRuleResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_rule_type import TeamsOwnershipRuleType
+
+
+class TeamsOwnershipRuleResponseData(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_rule_response_attributes import (
+ TeamsOwnershipRuleResponseAttributes,
+ )
+ from datadog_api_client.v2.model.teams_ownership_rule_type import TeamsOwnershipRuleType
+
+ return {
+ "attributes": (TeamsOwnershipRuleResponseAttributes,),
+ "id": (str,),
+ "type": (TeamsOwnershipRuleType,),
+ }
+
+ attribute_map = {
+ "attributes": "attributes",
+ "id": "id",
+ "type": "type",
+ }
+
+ def __init__(
+ self_, attributes: TeamsOwnershipRuleResponseAttributes, id: str, type: TeamsOwnershipRuleType, **kwargs
+ ):
+ """
+ The JSON:API data envelope for a teams ownership rule.
+
+ :param attributes: The attributes of a teams ownership rule.
+ :type attributes: TeamsOwnershipRuleResponseAttributes
+
+ :param id: A deterministic identifier derived from the rule's grouping key.
+ This ID cannot be used to delete the rule directly; delete individual mappings
+ using the ``mapping_id`` under ``teams`` instead.
+ :type id: str
+
+ :param type: The type of the resource. The value should always be teams_ownership_grouped_mappings.
+ :type type: TeamsOwnershipRuleType
+ """
+ super().__init__(kwargs)
+
+ self_.attributes = attributes
+ self_.id = id
+ self_.type = type
diff --git a/src/datadog_api_client/v2/model/teams_ownership_rule_team_mapping.py b/src/datadog_api_client/v2/model/teams_ownership_rule_team_mapping.py
new file mode 100644
index 0000000000..9c94e63321
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_rule_team_mapping.py
@@ -0,0 +1,39 @@
+# 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 (
+ ModelNormal,
+ cached_property,
+)
+
+
+class TeamsOwnershipRuleTeamMapping(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ return {
+ "mapping_id": (str,),
+ "team_handle": (str,),
+ }
+
+ attribute_map = {
+ "mapping_id": "mapping_id",
+ "team_handle": "team_handle",
+ }
+
+ def __init__(self_, mapping_id: str, team_handle: str, **kwargs):
+ """
+ An individual team's ownership entry within a teams ownership rule.
+
+ :param mapping_id: The ID of the underlying mapping, used to delete this team's ownership individually.
+ :type mapping_id: str
+
+ :param team_handle: The handle of the owning team.
+ :type team_handle: str
+ """
+ super().__init__(kwargs)
+
+ self_.mapping_id = mapping_id
+ self_.team_handle = team_handle
diff --git a/src/datadog_api_client/v2/model/teams_ownership_rule_type.py b/src/datadog_api_client/v2/model/teams_ownership_rule_type.py
new file mode 100644
index 0000000000..bd0e5de9c6
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_rule_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 TeamsOwnershipRuleType(ModelSimple):
+ """
+ The type of the resource. The value should always be teams_ownership_grouped_mappings.
+
+ :param value: If omitted defaults to "teams_ownership_grouped_mappings". Must be one of ["teams_ownership_grouped_mappings"].
+ :type value: str
+ """
+
+ allowed_values = {
+ "teams_ownership_grouped_mappings",
+ }
+ TEAMS_OWNERSHIP_GROUPED_MAPPINGS: ClassVar["TeamsOwnershipRuleType"]
+
+ @cached_property
+ def openapi_types(_):
+ return {
+ "value": (str,),
+ }
+
+
+TeamsOwnershipRuleType.TEAMS_OWNERSHIP_GROUPED_MAPPINGS = TeamsOwnershipRuleType("teams_ownership_grouped_mappings")
diff --git a/src/datadog_api_client/v2/model/teams_ownership_rules_response.py b/src/datadog_api_client/v2/model/teams_ownership_rules_response.py
new file mode 100644
index 0000000000..588ef07b89
--- /dev/null
+++ b/src/datadog_api_client/v2/model/teams_ownership_rules_response.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 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.teams_ownership_rule_response_data import TeamsOwnershipRuleResponseData
+ from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes
+
+
+class TeamsOwnershipRulesResponse(ModelNormal):
+ @cached_property
+ def openapi_types(_):
+ from datadog_api_client.v2.model.teams_ownership_rule_response_data import TeamsOwnershipRuleResponseData
+ from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes
+
+ return {
+ "data": ([TeamsOwnershipRuleResponseData],),
+ "meta": (ResponseMetaAttributes,),
+ }
+
+ attribute_map = {
+ "data": "data",
+ "meta": "meta",
+ }
+
+ def __init__(
+ self_,
+ data: List[TeamsOwnershipRuleResponseData],
+ meta: Union[ResponseMetaAttributes, UnsetType] = unset,
+ **kwargs,
+ ):
+ """
+ The response body for a list of teams ownership rules.
+
+ :param data: A list of teams ownership rules.
+ :type data: [TeamsOwnershipRuleResponseData]
+
+ :param meta: Object describing meta attributes of response.
+ :type meta: ResponseMetaAttributes, optional
+ """
+ if meta is not unset:
+ kwargs["meta"] = meta
+ super().__init__(kwargs)
+
+ self_.data = data
diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py
index 7200f76674..5a29b9767d 100644
--- a/src/datadog_api_client/v2/models/__init__.py
+++ b/src/datadog_api_client/v2/models/__init__.py
@@ -9911,6 +9911,40 @@
from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks
from datadog_api_client.v2.model.teams_hierarchy_links_response_meta import TeamsHierarchyLinksResponseMeta
from datadog_api_client.v2.model.teams_hierarchy_links_response_meta_page import TeamsHierarchyLinksResponseMetaPage
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_error import TeamsOwnershipMappingBatchError
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation import TeamsOwnershipMappingBatchOperation
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data import (
+ TeamsOwnershipMappingBatchOperationData,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_data_attributes import (
+ TeamsOwnershipMappingBatchOperationDataAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_op import TeamsOwnershipMappingBatchOperationOp
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_operation_ref import (
+ TeamsOwnershipMappingBatchOperationRef,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_request import TeamsOwnershipMappingBatchRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_response import TeamsOwnershipMappingBatchResponse
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_result import TeamsOwnershipMappingBatchResult
+from datadog_api_client.v2.model.teams_ownership_mapping_batch_result_data import TeamsOwnershipMappingBatchResultData
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data import TeamsOwnershipMappingCreateData
+from datadog_api_client.v2.model.teams_ownership_mapping_create_data_attributes import (
+ TeamsOwnershipMappingCreateDataAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_create_request import TeamsOwnershipMappingCreateRequest
+from datadog_api_client.v2.model.teams_ownership_mapping_response import TeamsOwnershipMappingResponse
+from datadog_api_client.v2.model.teams_ownership_mapping_response_attributes import (
+ TeamsOwnershipMappingResponseAttributes,
+)
+from datadog_api_client.v2.model.teams_ownership_mapping_response_data import TeamsOwnershipMappingResponseData
+from datadog_api_client.v2.model.teams_ownership_mapping_type import TeamsOwnershipMappingType
+from datadog_api_client.v2.model.teams_ownership_mappings_response import TeamsOwnershipMappingsResponse
+from datadog_api_client.v2.model.teams_ownership_match_type import TeamsOwnershipMatchType
+from datadog_api_client.v2.model.teams_ownership_rule_response_attributes import TeamsOwnershipRuleResponseAttributes
+from datadog_api_client.v2.model.teams_ownership_rule_response_data import TeamsOwnershipRuleResponseData
+from datadog_api_client.v2.model.teams_ownership_rule_team_mapping import TeamsOwnershipRuleTeamMapping
+from datadog_api_client.v2.model.teams_ownership_rule_type import TeamsOwnershipRuleType
+from datadog_api_client.v2.model.teams_ownership_rules_response import TeamsOwnershipRulesResponse
from datadog_api_client.v2.model.teams_response import TeamsResponse
from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks
from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta
@@ -17503,6 +17537,30 @@
"TeamsHierarchyLinksResponseLinks",
"TeamsHierarchyLinksResponseMeta",
"TeamsHierarchyLinksResponseMetaPage",
+ "TeamsOwnershipMappingBatchError",
+ "TeamsOwnershipMappingBatchOperation",
+ "TeamsOwnershipMappingBatchOperationData",
+ "TeamsOwnershipMappingBatchOperationDataAttributes",
+ "TeamsOwnershipMappingBatchOperationOp",
+ "TeamsOwnershipMappingBatchOperationRef",
+ "TeamsOwnershipMappingBatchRequest",
+ "TeamsOwnershipMappingBatchResponse",
+ "TeamsOwnershipMappingBatchResult",
+ "TeamsOwnershipMappingBatchResultData",
+ "TeamsOwnershipMappingCreateData",
+ "TeamsOwnershipMappingCreateDataAttributes",
+ "TeamsOwnershipMappingCreateRequest",
+ "TeamsOwnershipMappingResponse",
+ "TeamsOwnershipMappingResponseAttributes",
+ "TeamsOwnershipMappingResponseData",
+ "TeamsOwnershipMappingType",
+ "TeamsOwnershipMappingsResponse",
+ "TeamsOwnershipMatchType",
+ "TeamsOwnershipRuleResponseAttributes",
+ "TeamsOwnershipRuleResponseData",
+ "TeamsOwnershipRuleTeamMapping",
+ "TeamsOwnershipRuleType",
+ "TeamsOwnershipRulesResponse",
"TeamsResponse",
"TeamsResponseLinks",
"TeamsResponseMeta",
diff --git a/tests/v2/features/rum_teams_ownership.feature b/tests/v2/features/rum_teams_ownership.feature
new file mode 100644
index 0000000000..5455d1af85
--- /dev/null
+++ b/tests/v2/features/rum_teams_ownership.feature
@@ -0,0 +1,127 @@
+@endpoint(rum-teams-ownership) @endpoint(rum-teams-ownership-v2)
+Feature: Rum Teams Ownership
+ Manage [teams ownership](https://docs.datadoghq.com/real_user_monitoring/p
+ latform/ownership/) mappings between RUM views and the teams that own
+ them.
+
+ Background:
+ Given a valid "apiKeyAuth" key in the system
+ And a valid "appKeyAuth" key in the system
+ And an instance of "RumTeamsOwnership" API
+
+ @team:DataDog/rum-backend
+ Scenario: Bulk create and remove teams ownership mappings returns "Bad Request" response
+ Given new "CreateTeamsOwnershipMappingsBatch" request
+ And body with value {"atomic:operations":[{"op":"add","data":{"type":"teams_ownership_mappings","attributes":{"team_handle":"team-rum","view_name":"/checkout","service":"web-checkout","application_id":"invalid-uuid","match_type":"exact"}}}]}
+ When the request is sent
+ Then the response status is 400 Bad Request
+
+ @generated @skip @team:DataDog/rum-backend
+ Scenario: Bulk create and remove teams ownership mappings returns "Bad Request. One or more operations failed validation, so none of the operations were applied." response
+ Given operation "CreateTeamsOwnershipMappingsBatch" enabled
+ And new "CreateTeamsOwnershipMappingsBatch" request
+ And body with value {"atomic:operations": [{"data": {"attributes": {"application_id": "11111111-2222-3333-4444-555555555555", "match_type": "exact", "service": "web-checkout", "team_handle": "team-rum", "view_name": "/checkout"}, "type": "teams_ownership_mappings"}, "op": "add", "ref": {"id": "456", "type": "teams_ownership_mappings"}}]}
+ When the request is sent
+ Then the response status is 400 Bad Request. One or more operations failed validation, so none of the operations were applied.
+
+ @team:DataDog/rum-backend
+ Scenario: Bulk create and remove teams ownership mappings returns "OK" response
+ Given new "CreateTeamsOwnershipMappingsBatch" request
+ And body with value {"atomic:operations":[{"op":"add","data":{"type":"teams_ownership_mappings","attributes":{"team_handle":"team-rum","view_name":"/checkout","service":"web-checkout","application_id":"11111111-2222-3333-4444-555555555555","match_type":"exact"}}},{"op":"remove","ref":{"type":"teams_ownership_mappings","id":"456"}}]}
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "atomic:results[0].data.type" is equal to "teams_ownership_mappings"
+ And the response "atomic:results[0].data.attributes.team_handle" is equal to "team-rum"
+ And the response "atomic:results[0].data.attributes.match_type" is equal to "exact"
+
+ @generated @skip @team:DataDog/rum-backend
+ Scenario: Create a teams ownership mapping returns "Bad Request" response
+ Given operation "CreateTeamsOwnershipMapping" enabled
+ And new "CreateTeamsOwnershipMapping" request
+ And body with value {"data": {"attributes": {"application_id": "11111111-2222-3333-4444-555555555555", "match_type": "exact", "service": "web-checkout", "team_handle": "team-rum", "view_name": "/checkout"}, "type": "teams_ownership_mappings"}}
+ When the request is sent
+ Then the response status is 400 Bad Request
+
+ @generated @skip @team:DataDog/rum-backend
+ Scenario: Create a teams ownership mapping returns "Created" response
+ Given operation "CreateTeamsOwnershipMapping" enabled
+ And new "CreateTeamsOwnershipMapping" request
+ And body with value {"data": {"attributes": {"application_id": "11111111-2222-3333-4444-555555555555", "match_type": "exact", "service": "web-checkout", "team_handle": "team-rum", "view_name": "/checkout"}, "type": "teams_ownership_mappings"}}
+ When the request is sent
+ Then the response status is 201 Created
+
+ @team:DataDog/rum-backend
+ Scenario: Create teams ownership mapping returns "Bad Request" response
+ Given new "CreateTeamsOwnershipMapping" request
+ And body with value {"data":{"type":"teams_ownership_mappings","attributes":{"team_handle":"team-rum","view_name":"/checkout","service":"web-checkout","application_id":"invalid-uuid","match_type":"exact"}}}
+ When the request is sent
+ Then the response status is 400 Bad Request
+
+ @team:DataDog/rum-backend
+ Scenario: Create teams ownership mapping returns "Created" response
+ Given new "CreateTeamsOwnershipMapping" request
+ And body with value {"data":{"type":"teams_ownership_mappings","attributes":{"team_handle":"team-rum","view_name":"/checkout","service":"web-checkout","application_id":"11111111-2222-3333-4444-555555555555","match_type":"exact"}}}
+ When the request is sent
+ Then the response status is 201 Created
+ And the response "data.type" is equal to "teams_ownership_mappings"
+ And the response "data.attributes.team_handle" is equal to "team-rum"
+ And the response "data.attributes.view_name" is equal to "/checkout"
+ And the response "data.attributes.service" is equal to "web-checkout"
+ And the response "data.attributes.application_id" is equal to "11111111-2222-3333-4444-555555555555"
+ And the response "data.attributes.match_type" is equal to "exact"
+
+ @team:DataDog/rum-backend
+ Scenario: Delete a teams ownership mapping returns "No Content" response
+ Given new "DeleteTeamsOwnershipMapping" request
+ And request contains "id" parameter with value "123"
+ When the request is sent
+ Then the response status is 204 No Content
+
+ @team:DataDog/rum-backend
+ Scenario: Delete a teams ownership mapping returns "Not Found" response
+ Given new "DeleteTeamsOwnershipMapping" request
+ And request contains "id" parameter with value "{{ unique }}"
+ When the request is sent
+ Then the response status is 404 Not Found
+
+ @team:DataDog/rum-backend
+ Scenario: Get a teams ownership mapping returns "Not Found" response
+ Given new "GetTeamsOwnershipMapping" request
+ And request contains "id" parameter with value "{{ unique }}"
+ When the request is sent
+ Then the response status is 404 Not Found
+
+ @team:DataDog/rum-backend
+ Scenario: Get a teams ownership mapping returns "OK" response
+ Given new "GetTeamsOwnershipMapping" request
+ And request contains "id" parameter with value "123"
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data.id" is equal to "123"
+ And the response "data.type" is equal to "teams_ownership_mappings"
+ And the response "data.attributes.team_handle" is equal to "team-rum"
+ And the response "data.attributes.view_name" is equal to "/checkout"
+ And the response "data.attributes.match_type" is equal to "exact"
+
+ @team:DataDog/rum-backend
+ Scenario: List teams ownership mappings returns "OK" response
+ Given new "ListTeamsOwnershipMappings" request
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data" has length 1
+ And the response "data[0].type" is equal to "teams_ownership_mappings"
+ And the response "data[0].attributes.team_handle" is equal to "team-rum"
+ And the response "data[0].attributes.view_name" is equal to "/checkout"
+ And the response "data[0].attributes.service" is equal to "web-checkout"
+ And the response "data[0].attributes.application_id" is equal to "11111111-2222-3333-4444-555555555555"
+ And the response "data[0].attributes.match_type" is equal to "exact"
+
+ @team:DataDog/rum-backend
+ Scenario: List teams ownership rules returns "OK" response
+ Given new "ListTeamsOwnershipRules" request
+ When the request is sent
+ Then the response status is 200 OK
+ And the response "data" has length 1
+ And the response "data[0].type" is equal to "teams_ownership_grouped_mappings"
+ And the response "data[0].attributes.view_name" is equal to "/checkout"
+ And the response "data[0].attributes.match_type" is equal to "exact"
diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json
index df961ee10c..118bc7179d 100644
--- a/tests/v2/features/undo.json
+++ b/tests/v2/features/undo.json
@@ -7057,6 +7057,51 @@
"type": "idempotent"
}
},
+ "ListTeamsOwnershipMappings": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "CreateTeamsOwnershipMapping": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "operationId": "DeleteTeamsOwnershipMapping",
+ "parameters": [
+ {
+ "name": "id",
+ "source": "data.id"
+ }
+ ],
+ "type": "unsafe"
+ }
+ },
+ "CreateTeamsOwnershipMappingsBatch": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "operationId": "CreateTeamsOwnershipMappingsBatch",
+ "parameters": [],
+ "type": "unsafe"
+ }
+ },
+ "DeleteTeamsOwnershipMapping": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "type": "idempotent"
+ }
+ },
+ "GetTeamsOwnershipMapping": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "type": "safe"
+ }
+ },
+ "ListTeamsOwnershipRules": {
+ "tag": "Rum Teams Ownership",
+ "undo": {
+ "type": "safe"
+ }
+ },
"ListRUMEvents": {
"tag": "RUM",
"undo": {