diff --git a/.apigentools-info b/.apigentools-info
index 2fd95d4c965..44a29ebc038 100644
--- a/.apigentools-info
+++ b/.apigentools-info
@@ -4,13 +4,13 @@
     "spec_versions": {
         "v1": {
             "apigentools_version": "1.2.0",
-            "regenerated": "2020-06-03 07:12:44.642879",
-            "spec_repo_commit": "80b557a"
+            "regenerated": "2020-06-04 13:37:39.934098",
+            "spec_repo_commit": "343cf1b"
         },
         "v2": {
             "apigentools_version": "1.2.0",
-            "regenerated": "2020-06-03 07:12:49.322758",
-            "spec_repo_commit": "80b557a"
+            "regenerated": "2020-06-04 13:37:44.452832",
+            "spec_repo_commit": "343cf1b"
         }
     }
 }
\ No newline at end of file
diff --git a/api/v2/datadog/.openapi-generator/FILES b/api/v2/datadog/.openapi-generator/FILES
index e0f4a61ae3d..b334760faa1 100644
--- a/api/v2/datadog/.openapi-generator/FILES
+++ b/api/v2/datadog/.openapi-generator/FILES
@@ -4,6 +4,7 @@
 README.md
 api/openapi.yaml
 api_dashboard_lists.go
+api_logs_archives.go
 api_roles.go
 api_security_monitoring.go
 api_users.go
@@ -23,6 +24,26 @@ docs/DashboardListUpdateItemsRequest.md
 docs/DashboardListUpdateItemsResponse.md
 docs/DashboardListsApi.md
 docs/DashboardType.md
+docs/LogsArchive.md
+docs/LogsArchiveAttributes.md
+docs/LogsArchiveCreateRequest.md
+docs/LogsArchiveCreateRequestAttributes.md
+docs/LogsArchiveCreateRequestDefinition.md
+docs/LogsArchiveCreateRequestDestination.md
+docs/LogsArchiveDefinition.md
+docs/LogsArchiveDestination.md
+docs/LogsArchiveDestinationAzure.md
+docs/LogsArchiveDestinationAzureType.md
+docs/LogsArchiveDestinationGCS.md
+docs/LogsArchiveDestinationGCSType.md
+docs/LogsArchiveDestinationS3.md
+docs/LogsArchiveDestinationS3Type.md
+docs/LogsArchiveIntegrationAzure.md
+docs/LogsArchiveIntegrationGCS.md
+docs/LogsArchiveIntegrationS3.md
+docs/LogsArchiveState.md
+docs/LogsArchives.md
+docs/LogsArchivesApi.md
 docs/Organization.md
 docs/OrganizationAttributes.md
 docs/OrganizationsType.md
@@ -38,6 +59,7 @@ docs/RelationshipToOrganizations.md
 docs/RelationshipToPermission.md
 docs/RelationshipToPermissionData.md
 docs/RelationshipToPermissions.md
+docs/RelationshipToRole.md
 docs/RelationshipToRoleData.md
 docs/RelationshipToRoles.md
 docs/RelationshipToUser.md
@@ -110,6 +132,25 @@ model_dashboard_list_items.go
 model_dashboard_list_update_items_request.go
 model_dashboard_list_update_items_response.go
 model_dashboard_type.go
+model_logs_archive.go
+model_logs_archive_attributes.go
+model_logs_archive_create_request.go
+model_logs_archive_create_request_attributes.go
+model_logs_archive_create_request_definition.go
+model_logs_archive_create_request_destination.go
+model_logs_archive_definition.go
+model_logs_archive_destination.go
+model_logs_archive_destination_azure.go
+model_logs_archive_destination_azure_type.go
+model_logs_archive_destination_gcs.go
+model_logs_archive_destination_gcs_type.go
+model_logs_archive_destination_s3.go
+model_logs_archive_destination_s3_type.go
+model_logs_archive_integration_azure.go
+model_logs_archive_integration_gcs.go
+model_logs_archive_integration_s3.go
+model_logs_archive_state.go
+model_logs_archives.go
 model_organization.go
 model_organization_attributes.go
 model_organizations_type.go
@@ -125,6 +166,7 @@ model_relationship_to_organizations.go
 model_relationship_to_permission.go
 model_relationship_to_permission_data.go
 model_relationship_to_permissions.go
+model_relationship_to_role.go
 model_relationship_to_role_data.go
 model_relationship_to_roles.go
 model_relationship_to_user.go
diff --git a/api/v2/datadog/README.md b/api/v2/datadog/README.md
index 1202fada4d4..842526cfc00 100644
--- a/api/v2/datadog/README.md
+++ b/api/v2/datadog/README.md
@@ -77,6 +77,14 @@ Class | Method | HTTP request | Description
 *DashboardListsApi* | [**DeleteDashboardListItems**](docs/DashboardListsApi.md#deletedashboardlistitems) | **Delete** /api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards | Delete items from a dashboard list
 *DashboardListsApi* | [**GetDashboardListItems**](docs/DashboardListsApi.md#getdashboardlistitems) | **Get** /api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards | Get a Dashboard List
 *DashboardListsApi* | [**UpdateDashboardListItems**](docs/DashboardListsApi.md#updatedashboardlistitems) | **Put** /api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards | Update items of a dashboard list
+*LogsArchivesApi* | [**AddReadRoleToArchive**](docs/LogsArchivesApi.md#addreadroletoarchive) | **Post** /api/v2/logs/config/archives/{archive_id}/readers | Grant role to an archive
+*LogsArchivesApi* | [**CreateLogsArchive**](docs/LogsArchivesApi.md#createlogsarchive) | **Post** /api/v2/logs/config/archives | Create an archive
+*LogsArchivesApi* | [**DeleteLogsArchive**](docs/LogsArchivesApi.md#deletelogsarchive) | **Delete** /api/v2/logs/config/archives/{archive_id} | Delete an archive
+*LogsArchivesApi* | [**GetLogsArchive**](docs/LogsArchivesApi.md#getlogsarchive) | **Get** /api/v2/logs/config/archives/{archive_id} | Get an archive
+*LogsArchivesApi* | [**ListArchiveReadRoles**](docs/LogsArchivesApi.md#listarchivereadroles) | **Get** /api/v2/logs/config/archives/{archive_id}/readers | List read roles for an archive
+*LogsArchivesApi* | [**ListLogsArchives**](docs/LogsArchivesApi.md#listlogsarchives) | **Get** /api/v2/logs/config/archives | Get all archives
+*LogsArchivesApi* | [**RemoveRoleFromArchive**](docs/LogsArchivesApi.md#removerolefromarchive) | **Delete** /api/v2/logs/config/archives/{archive_id}/readers | Revoke role from an archive
+*LogsArchivesApi* | [**UpdateLogsArchive**](docs/LogsArchivesApi.md#updatelogsarchive) | **Put** /api/v2/logs/config/archives/{archive_id} | Update an archive
 *RolesApi* | [**AddPermissionToRole**](docs/RolesApi.md#addpermissiontorole) | **Post** /api/v2/roles/{role_id}/permissions | Grant permission to a role
 *RolesApi* | [**AddUserToRole**](docs/RolesApi.md#addusertorole) | **Post** /api/v2/roles/{role_id}/users | Add a user to a role
 *RolesApi* | [**CreateRole**](docs/RolesApi.md#createrole) | **Post** /api/v2/roles | Create role
@@ -120,6 +128,25 @@ Class | Method | HTTP request | Description
  - [DashboardListUpdateItemsRequest](docs/DashboardListUpdateItemsRequest.md)
  - [DashboardListUpdateItemsResponse](docs/DashboardListUpdateItemsResponse.md)
  - [DashboardType](docs/DashboardType.md)
+ - [LogsArchive](docs/LogsArchive.md)
+ - [LogsArchiveAttributes](docs/LogsArchiveAttributes.md)
+ - [LogsArchiveCreateRequest](docs/LogsArchiveCreateRequest.md)
+ - [LogsArchiveCreateRequestAttributes](docs/LogsArchiveCreateRequestAttributes.md)
+ - [LogsArchiveCreateRequestDefinition](docs/LogsArchiveCreateRequestDefinition.md)
+ - [LogsArchiveCreateRequestDestination](docs/LogsArchiveCreateRequestDestination.md)
+ - [LogsArchiveDefinition](docs/LogsArchiveDefinition.md)
+ - [LogsArchiveDestination](docs/LogsArchiveDestination.md)
+ - [LogsArchiveDestinationAzure](docs/LogsArchiveDestinationAzure.md)
+ - [LogsArchiveDestinationAzureType](docs/LogsArchiveDestinationAzureType.md)
+ - [LogsArchiveDestinationGCS](docs/LogsArchiveDestinationGCS.md)
+ - [LogsArchiveDestinationGCSType](docs/LogsArchiveDestinationGCSType.md)
+ - [LogsArchiveDestinationS3](docs/LogsArchiveDestinationS3.md)
+ - [LogsArchiveDestinationS3Type](docs/LogsArchiveDestinationS3Type.md)
+ - [LogsArchiveIntegrationAzure](docs/LogsArchiveIntegrationAzure.md)
+ - [LogsArchiveIntegrationGCS](docs/LogsArchiveIntegrationGCS.md)
+ - [LogsArchiveIntegrationS3](docs/LogsArchiveIntegrationS3.md)
+ - [LogsArchiveState](docs/LogsArchiveState.md)
+ - [LogsArchives](docs/LogsArchives.md)
  - [Organization](docs/Organization.md)
  - [OrganizationAttributes](docs/OrganizationAttributes.md)
  - [OrganizationsType](docs/OrganizationsType.md)
@@ -135,6 +162,7 @@ Class | Method | HTTP request | Description
  - [RelationshipToPermission](docs/RelationshipToPermission.md)
  - [RelationshipToPermissionData](docs/RelationshipToPermissionData.md)
  - [RelationshipToPermissions](docs/RelationshipToPermissions.md)
+ - [RelationshipToRole](docs/RelationshipToRole.md)
  - [RelationshipToRoleData](docs/RelationshipToRoleData.md)
  - [RelationshipToRoles](docs/RelationshipToRoles.md)
  - [RelationshipToUser](docs/RelationshipToUser.md)
diff --git a/api/v2/datadog/api/openapi.yaml b/api/v2/datadog/api/openapi.yaml
index a7af8a2cae6..d755289477b 100644
--- a/api/v2/datadog/api/openapi.yaml
+++ b/api/v2/datadog/api/openapi.yaml
@@ -36,6 +36,15 @@ tags:
     organize, find, and share all of your dashboards with your team and
     organization.
   name: Dashboard Lists
+- description: |-
+    Archives forward all the logs ingested to a cloud storage system.
+
+    See the [Archives Page](https://app.datadoghq.com/logs/pipelines/archives)
+    for a list of the archives currently configured in our UI.
+  externalDocs:
+    description: Find out more at
+    url: https://docs.datadoghq.com/logs/archives/
+  name: Logs Archives
 - description: |-
     The Roles API is used to create and manage Datadog roles, what
     [global permissions](https://docs.datadoghq.com/account_management/rbac/)
@@ -236,6 +245,323 @@ paths:
       tags:
       - Dashboard Lists
       x-codegen-request-body-name: body
+  /api/v2/logs/config/archives:
+    get:
+      description: Get the list of configured logs archives with their definitions.
+      operationId: ListLogsArchives
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LogsArchives'
+          description: OK
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+      summary: Get all archives
+      tags:
+      - Logs Archives
+    post:
+      description: Create an archive in your organization.
+      operationId: CreateLogsArchive
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LogsArchiveCreateRequest'
+        description: The definition of the new archive.
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LogsArchive'
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+      summary: Create an archive
+      tags:
+      - Logs Archives
+      x-codegen-request-body-name: body
+  /api/v2/logs/config/archives/{archive_id}:
+    delete:
+      description: Delete a given archive from your organization.
+      operationId: DeleteLogsArchive
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "204":
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: Delete an archive
+      tags:
+      - Logs Archives
+    get:
+      description: Get a specific archive from your organization.
+      operationId: GetLogsArchive
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LogsArchive'
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: Get an archive
+      tags:
+      - Logs Archives
+    put:
+      description: |-
+        Update a given archive configuration.
+
+        **Note**: Using this method updates your archive configuration by **replacing**
+        your current configuration with the new one sent to your Datadog organization.
+      operationId: UpdateLogsArchive
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LogsArchiveCreateRequest'
+        description: New definition of the archive.
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LogsArchive'
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: Update an archive
+      tags:
+      - Logs Archives
+      x-codegen-request-body-name: body
+  /api/v2/logs/config/archives/{archive_id}/readers:
+    delete:
+      description: Removes a role from an archive. ([Roles API](https://docs.datadoghq.com/api/v2/roles/))
+      operationId: RemoveRoleFromArchive
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RelationshipToRole'
+      responses:
+        "204":
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: Revoke role from an archive
+      tags:
+      - Logs Archives
+      x-codegen-request-body-name: body
+      x-unstable: |-
+        **Note**: This endpoint is in public beta.
+        If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+    get:
+      description: Returns all read roles a given archive is restricted to.
+      operationId: ListArchiveReadRoles
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RolesResponse'
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: List read roles for an archive
+      tags:
+      - Logs Archives
+      x-codegen-request-body-name: body
+      x-unstable: |-
+        **Note**: This endpoint is in public beta.
+        If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
+    post:
+      description: Adds a read role to an archive. ([Roles API](https://docs.datadoghq.com/api/v2/roles/))
+      operationId: AddReadRoleToArchive
+      parameters:
+      - description: The ID of the archive.
+        explode: false
+        in: path
+        name: archive_id
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RelationshipToRole'
+      responses:
+        "204":
+          description: OK
+        "400":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Bad Request
+        "403":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Forbidden
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIErrorResponse'
+          description: Not found
+      summary: Grant role to an archive
+      tags:
+      - Logs Archives
+      x-codegen-request-body-name: body
+      x-unstable: |-
+        **Note**: This endpoint is in public beta.
+        If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
   /api/v2/permissions:
     get:
       description: Returns a list of all permissions, including name, description,
@@ -1338,6 +1664,15 @@ components:
   headers: {}
   links: {}
   parameters:
+    ArchiveID:
+      description: The ID of the archive.
+      explode: false
+      in: path
+      name: archive_id
+      required: true
+      schema:
+        type: string
+      style: simple
     PageNumber:
       description: Specific page number to return.
       explode: true
@@ -1685,6 +2020,318 @@ components:
       - INTEGRATION_SCREENBOARD
       - INTEGRATION_TIMEBOARD
       - HOST_TIMEBOARD
+    LogsArchive:
+      description: The logs archive.
+      example:
+        data:
+          attributes:
+            query: source:nginx
+            name: Nginx Archive
+            state: WORKING
+          id: a2zcMylnM4OCHpYusxIi3g
+          type: archives
+      properties:
+        data:
+          $ref: '#/components/schemas/LogsArchiveDefinition'
+      type: object
+    LogsArchiveAttributes:
+      description: The attributes associated with the archive.
+      example:
+        query: source:nginx
+        name: Nginx Archive
+        state: WORKING
+      properties:
+        destination:
+          $ref: '#/components/schemas/LogsArchiveDestination'
+        name:
+          description: The archive name.
+          example: Nginx Archive
+          type: string
+        query:
+          description: The archive query/filter. Logs matching this query are included
+            in the archive.
+          example: source:nginx
+          type: string
+        state:
+          $ref: '#/components/schemas/LogsArchiveState'
+      required:
+      - destination
+      - name
+      - query
+      type: object
+    LogsArchiveCreateRequest:
+      description: The logs archive.
+      example:
+        data:
+          attributes:
+            query: source:nginx
+            name: Nginx Archive
+          type: archives
+      properties:
+        data:
+          $ref: '#/components/schemas/LogsArchiveCreateRequestDefinition'
+      type: object
+    LogsArchiveCreateRequestAttributes:
+      description: The attributes associated with the archive.
+      example:
+        query: source:nginx
+        name: Nginx Archive
+      properties:
+        destination:
+          $ref: '#/components/schemas/LogsArchiveCreateRequestDestination'
+        name:
+          description: The archive name.
+          example: Nginx Archive
+          type: string
+        query:
+          description: The archive query/filter. Logs matching this query are included
+            in the archive.
+          example: source:nginx
+          type: string
+      required:
+      - destination
+      - name
+      - query
+      type: object
+    LogsArchiveCreateRequestDefinition:
+      description: The definition of an archive.
+      example:
+        attributes:
+          query: source:nginx
+          name: Nginx Archive
+        type: archives
+      properties:
+        attributes:
+          $ref: '#/components/schemas/LogsArchiveCreateRequestAttributes'
+        type:
+          default: archives
+          description: The type of the resource. The value should always be archives.
+          example: archives
+          type: string
+      required:
+      - type
+      type: object
+    LogsArchiveCreateRequestDestination:
+      description: An archive's destination.
+      oneOf:
+      - $ref: '#/components/schemas/LogsArchiveDestinationAzure'
+      - $ref: '#/components/schemas/LogsArchiveDestinationGCS'
+      - $ref: '#/components/schemas/LogsArchiveDestinationS3'
+      required:
+      - integration
+      - type
+      type: object
+    LogsArchiveDefinition:
+      description: The definition of an archive.
+      example:
+        attributes:
+          query: source:nginx
+          name: Nginx Archive
+          state: WORKING
+        id: a2zcMylnM4OCHpYusxIi3g
+        type: archives
+      properties:
+        attributes:
+          $ref: '#/components/schemas/LogsArchiveAttributes'
+        id:
+          description: The archive ID.
+          example: a2zcMylnM4OCHpYusxIi3g
+          readOnly: true
+          type: string
+        type:
+          default: archives
+          description: The type of the resource. The value should always be archives.
+          example: archives
+          readOnly: true
+          type: string
+      required:
+      - type
+      type: object
+    LogsArchiveDestination:
+      description: An archive's destination.
+      nullable: true
+      oneOf:
+      - $ref: '#/components/schemas/LogsArchiveDestinationAzure'
+      - $ref: '#/components/schemas/LogsArchiveDestinationGCS'
+      - $ref: '#/components/schemas/LogsArchiveDestinationS3'
+      required:
+      - integration
+      - type
+      type: object
+    LogsArchiveDestinationAzure:
+      description: The Azure archive destination.
+      properties:
+        container:
+          description: The container where the archive will be stored.
+          example: container-name
+          type: string
+        integration:
+          $ref: '#/components/schemas/LogsArchiveIntegrationAzure'
+        path:
+          description: The archive path.
+          type: string
+        region:
+          description: The region where the archive will be stored.
+          type: string
+        storage_account:
+          description: The associated storage account.
+          example: account-name
+          type: string
+        type:
+          $ref: '#/components/schemas/LogsArchiveDestinationAzureType'
+      required:
+      - container
+      - integration
+      - storage_account
+      - type
+      type: object
+    LogsArchiveDestinationAzureType:
+      default: azure
+      description: Type of the Azure archive destination.
+      enum:
+      - azure
+      example: azure
+      type: string
+      x-enum-varnames:
+      - AZURE
+    LogsArchiveDestinationGCS:
+      description: The GCS archive destination.
+      properties:
+        bucket:
+          description: The bucket where the archive will be stored.
+          example: bucket-name
+          type: string
+        integration:
+          $ref: '#/components/schemas/LogsArchiveIntegrationGCS'
+        path:
+          description: The archive path.
+          type: string
+        type:
+          $ref: '#/components/schemas/LogsArchiveDestinationGCSType'
+      required:
+      - bucket
+      - integration
+      - type
+      type: object
+    LogsArchiveDestinationGCSType:
+      default: gcs
+      description: Type of the GCS archive destination.
+      enum:
+      - gcs
+      example: gcs
+      type: string
+      x-enum-varnames:
+      - GCS
+    LogsArchiveDestinationS3:
+      description: The S3 archive destination.
+      properties:
+        bucket:
+          description: The bucket where the archive will be stored.
+          example: bucket-name
+          type: string
+        integration:
+          $ref: '#/components/schemas/LogsArchiveIntegrationS3'
+        path:
+          description: The archive path.
+          type: string
+        type:
+          $ref: '#/components/schemas/LogsArchiveDestinationS3Type'
+      required:
+      - bucket
+      - integration
+      - type
+      type: object
+    LogsArchiveDestinationS3Type:
+      default: s3
+      description: Type of the S3 archive destination.
+      enum:
+      - s3
+      example: s3
+      type: string
+      x-enum-varnames:
+      - S3
+    LogsArchiveIntegrationAzure:
+      description: The Azure archive's integration destination.
+      properties:
+        client_id:
+          description: A client ID.
+          example: aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa
+          type: string
+        tenant_id:
+          description: A tenant ID.
+          example: aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa
+          type: string
+      required:
+      - client_id
+      - tenant_id
+      type: object
+    LogsArchiveIntegrationGCS:
+      description: The GCS archive's integration destination.
+      properties:
+        client_email:
+          description: A client email.
+          example: youremail@example.com
+          type: string
+        project_id:
+          description: A project ID.
+          example: project-id
+          type: string
+      required:
+      - client_email
+      - project_id
+      type: object
+    LogsArchiveIntegrationS3:
+      description: The S3 Archive's integration destination.
+      properties:
+        account_id:
+          description: The account ID for the integration.
+          example: "123456789012"
+          type: string
+        role_name:
+          description: The path of the integration.
+          example: role-name
+          type: string
+      required:
+      - account_id
+      - role_name
+      type: object
+    LogsArchiveState:
+      description: The state of the archive.
+      enum:
+      - UNKNOWN
+      - WORKING
+      - FAILING
+      - WORKING_AUTH_LEGACY
+      example: WORKING
+      type: string
+      x-enum-varnames:
+      - UNKNOWN
+      - WORKING
+      - FAILING
+      - WORKING_AUTH_LEGACY
+    LogsArchives:
+      description: The available archives.
+      example:
+        data:
+        - attributes:
+            query: source:nginx
+            name: Nginx Archive
+            state: WORKING
+          id: a2zcMylnM4OCHpYusxIi3g
+          type: archives
+        - attributes:
+            query: source:nginx
+            name: Nginx Archive
+            state: WORKING
+          id: a2zcMylnM4OCHpYusxIi3g
+          type: archives
+      properties:
+        data:
+          description: A list of archives.
+          items:
+            $ref: '#/components/schemas/LogsArchiveDefinition'
+          type: array
+      type: object
     Organization:
       description: Organization object.
       properties:
@@ -1934,6 +2581,16 @@ components:
             $ref: '#/components/schemas/RelationshipToPermissionData'
           type: array
       type: object
+    RelationshipToRole:
+      description: Relationship to role.
+      example:
+        data:
+          id: 3653d3c6-0c75-11ea-ad28-fb5701eabc7d
+          type: roles
+      properties:
+        data:
+          $ref: '#/components/schemas/RelationshipToRoleData'
+      type: object
     RelationshipToRoleData:
       description: Relationship to role object.
       example:
diff --git a/api/v2/datadog/api_logs_archives.go b/api/v2/datadog/api_logs_archives.go
new file mode 100644
index 00000000000..7528a8c9f3f
--- /dev/null
+++ b/api/v2/datadog/api_logs_archives.go
@@ -0,0 +1,1308 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	_context "context"
+	_fmt "fmt"
+	_ioutil "io/ioutil"
+	_log "log"
+	_nethttp "net/http"
+	_neturl "net/url"
+	"strings"
+)
+
+// Linger please
+var (
+	_ _context.Context
+)
+
+// LogsArchivesApiService LogsArchivesApi service
+type LogsArchivesApiService service
+
+type apiAddReadRoleToArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+	body       *RelationshipToRole
+}
+
+func (r apiAddReadRoleToArchiveRequest) Body(body RelationshipToRole) apiAddReadRoleToArchiveRequest {
+	r.body = &body
+	return r
+}
+
+/*
+AddReadRoleToArchive Grant role to an archive
+Adds a read role to an archive. ([Roles API](https://docs.datadoghq.com/api/v2/roles/))
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiAddReadRoleToArchiveRequest
+*/
+func (a *LogsArchivesApiService) AddReadRoleToArchive(ctx _context.Context, archiveId string) apiAddReadRoleToArchiveRequest {
+	return apiAddReadRoleToArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+
+*/
+func (r apiAddReadRoleToArchiveRequest) Execute() (*_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodPost
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+	)
+	operationId := "AddReadRoleToArchive"
+	if r.apiService.client.cfg.IsUnstableOperationEnabled(operationId) {
+		_log.Printf("WARNING: Using unstable operation '%s'", operationId)
+	} else {
+		return nil, GenericOpenAPIError{error: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)}
+	}
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.AddReadRoleToArchive")
+	if err != nil {
+		return nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}/readers"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "AddReadRoleToArchive"
+
+	// body params
+	localVarPostBody = r.body
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type apiCreateLogsArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	body       *LogsArchiveCreateRequest
+}
+
+func (r apiCreateLogsArchiveRequest) Body(body LogsArchiveCreateRequest) apiCreateLogsArchiveRequest {
+	r.body = &body
+	return r
+}
+
+/*
+CreateLogsArchive Create an archive
+Create an archive in your organization.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+@return apiCreateLogsArchiveRequest
+*/
+func (a *LogsArchivesApiService) CreateLogsArchive(ctx _context.Context) apiCreateLogsArchiveRequest {
+	return apiCreateLogsArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+	}
+}
+
+/*
+Execute executes the request
+ @return LogsArchive
+*/
+func (r apiCreateLogsArchiveRequest) Execute() (LogsArchive, *_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodPost
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+		localVarReturnValue  LogsArchive
+	)
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.CreateLogsArchive")
+	if err != nil {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	if r.body == nil {
+		return localVarReturnValue, nil, reportError("body is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "CreateLogsArchive"
+
+	// body params
+	localVarPostBody = r.body
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = r.apiService.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type apiDeleteLogsArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+}
+
+/*
+DeleteLogsArchive Delete an archive
+Delete a given archive from your organization.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiDeleteLogsArchiveRequest
+*/
+func (a *LogsArchivesApiService) DeleteLogsArchive(ctx _context.Context, archiveId string) apiDeleteLogsArchiveRequest {
+	return apiDeleteLogsArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+
+*/
+func (r apiDeleteLogsArchiveRequest) Execute() (*_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodDelete
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+	)
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.DeleteLogsArchive")
+	if err != nil {
+		return nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "DeleteLogsArchive"
+
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type apiGetLogsArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+}
+
+/*
+GetLogsArchive Get an archive
+Get a specific archive from your organization.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiGetLogsArchiveRequest
+*/
+func (a *LogsArchivesApiService) GetLogsArchive(ctx _context.Context, archiveId string) apiGetLogsArchiveRequest {
+	return apiGetLogsArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+ @return LogsArchive
+*/
+func (r apiGetLogsArchiveRequest) Execute() (LogsArchive, *_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodGet
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+		localVarReturnValue  LogsArchive
+	)
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.GetLogsArchive")
+	if err != nil {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "GetLogsArchive"
+
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = r.apiService.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type apiListArchiveReadRolesRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+}
+
+/*
+ListArchiveReadRoles List read roles for an archive
+Returns all read roles a given archive is restricted to.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiListArchiveReadRolesRequest
+*/
+func (a *LogsArchivesApiService) ListArchiveReadRoles(ctx _context.Context, archiveId string) apiListArchiveReadRolesRequest {
+	return apiListArchiveReadRolesRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+ @return RolesResponse
+*/
+func (r apiListArchiveReadRolesRequest) Execute() (RolesResponse, *_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodGet
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+		localVarReturnValue  RolesResponse
+	)
+	operationId := "ListArchiveReadRoles"
+	if r.apiService.client.cfg.IsUnstableOperationEnabled(operationId) {
+		_log.Printf("WARNING: Using unstable operation '%s'", operationId)
+	} else {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)}
+	}
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.ListArchiveReadRoles")
+	if err != nil {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}/readers"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "ListArchiveReadRoles"
+
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = r.apiService.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type apiListLogsArchivesRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+}
+
+/*
+ListLogsArchives Get all archives
+Get the list of configured logs archives with their definitions.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+@return apiListLogsArchivesRequest
+*/
+func (a *LogsArchivesApiService) ListLogsArchives(ctx _context.Context) apiListLogsArchivesRequest {
+	return apiListLogsArchivesRequest{
+		apiService: a,
+		ctx:        ctx,
+	}
+}
+
+/*
+Execute executes the request
+ @return LogsArchives
+*/
+func (r apiListLogsArchivesRequest) Execute() (LogsArchives, *_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodGet
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+		localVarReturnValue  LogsArchives
+	)
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.ListLogsArchives")
+	if err != nil {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "ListLogsArchives"
+
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = r.apiService.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type apiRemoveRoleFromArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+	body       *RelationshipToRole
+}
+
+func (r apiRemoveRoleFromArchiveRequest) Body(body RelationshipToRole) apiRemoveRoleFromArchiveRequest {
+	r.body = &body
+	return r
+}
+
+/*
+RemoveRoleFromArchive Revoke role from an archive
+Removes a role from an archive. ([Roles API](https://docs.datadoghq.com/api/v2/roles/))
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiRemoveRoleFromArchiveRequest
+*/
+func (a *LogsArchivesApiService) RemoveRoleFromArchive(ctx _context.Context, archiveId string) apiRemoveRoleFromArchiveRequest {
+	return apiRemoveRoleFromArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+
+*/
+func (r apiRemoveRoleFromArchiveRequest) Execute() (*_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodDelete
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+	)
+	operationId := "RemoveRoleFromArchive"
+	if r.apiService.client.cfg.IsUnstableOperationEnabled(operationId) {
+		_log.Printf("WARNING: Using unstable operation '%s'", operationId)
+	} else {
+		return nil, GenericOpenAPIError{error: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)}
+	}
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.RemoveRoleFromArchive")
+	if err != nil {
+		return nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}/readers"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "RemoveRoleFromArchive"
+
+	// body params
+	localVarPostBody = r.body
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type apiUpdateLogsArchiveRequest struct {
+	ctx        _context.Context
+	apiService *LogsArchivesApiService
+	archiveId  string
+	body       *LogsArchiveCreateRequest
+}
+
+func (r apiUpdateLogsArchiveRequest) Body(body LogsArchiveCreateRequest) apiUpdateLogsArchiveRequest {
+	r.body = &body
+	return r
+}
+
+/*
+UpdateLogsArchive Update an archive
+Update a given archive configuration.
+
+**Note**: Using this method updates your archive configuration by **replacing**
+your current configuration with the new one sent to your Datadog organization.
+ * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param archiveId The ID of the archive.
+@return apiUpdateLogsArchiveRequest
+*/
+func (a *LogsArchivesApiService) UpdateLogsArchive(ctx _context.Context, archiveId string) apiUpdateLogsArchiveRequest {
+	return apiUpdateLogsArchiveRequest{
+		apiService: a,
+		ctx:        ctx,
+		archiveId:  archiveId,
+	}
+}
+
+/*
+Execute executes the request
+ @return LogsArchive
+*/
+func (r apiUpdateLogsArchiveRequest) Execute() (LogsArchive, *_nethttp.Response, error) {
+	var (
+		localVarHTTPMethod   = _nethttp.MethodPut
+		localVarPostBody     interface{}
+		localVarFormFileName string
+		localVarFileName     string
+		localVarFileBytes    []byte
+		localVarReturnValue  LogsArchive
+	)
+
+	localBasePath, err := r.apiService.client.cfg.ServerURLWithContext(r.ctx, "LogsArchivesApiService.UpdateLogsArchive")
+	if err != nil {
+		return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/api/v2/logs/config/archives/{archive_id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"archive_id"+"}", _neturl.QueryEscape(parameterToString(r.archiveId, "")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := _neturl.Values{}
+	localVarFormParams := _neturl.Values{}
+
+	if r.body == nil {
+		return localVarReturnValue, nil, reportError("body is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+
+	// Set Operation-ID header for telemetry
+	localVarHeaderParams["DD-OPERATION-ID"] = "UpdateLogsArchive"
+
+	// body params
+	localVarPostBody = r.body
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["apiKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-API-KEY"] = key
+			}
+		}
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if auth, ok := auth["appKeyAuth"]; ok {
+				var key string
+				if auth.Prefix != "" {
+					key = auth.Prefix + " " + auth.Key
+				} else {
+					key = auth.Key
+				}
+				localVarHeaderParams["DD-APPLICATION-KEY"] = key
+			}
+		}
+	}
+	req, err := r.apiService.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := r.apiService.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v APIErrorResponse
+			err = r.apiService.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = r.apiService.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/api/v2/datadog/client.go b/api/v2/datadog/client.go
index 9ff702611a8..1fa54f216c6 100644
--- a/api/v2/datadog/client.go
+++ b/api/v2/datadog/client.go
@@ -48,6 +48,8 @@ type APIClient struct {
 
 	DashboardListsApi *DashboardListsApiService
 
+	LogsArchivesApi *LogsArchivesApiService
+
 	RolesApi *RolesApiService
 
 	SecurityMonitoringApi *SecurityMonitoringApiService
@@ -72,6 +74,7 @@ func NewAPIClient(cfg *Configuration) *APIClient {
 
 	// API Services
 	c.DashboardListsApi = (*DashboardListsApiService)(&c.common)
+	c.LogsArchivesApi = (*LogsArchivesApiService)(&c.common)
 	c.RolesApi = (*RolesApiService)(&c.common)
 	c.SecurityMonitoringApi = (*SecurityMonitoringApiService)(&c.common)
 	c.UsersApi = (*UsersApiService)(&c.common)
diff --git a/api/v2/datadog/configuration.go b/api/v2/datadog/configuration.go
index 362f6d4e1b8..756eea929aa 100644
--- a/api/v2/datadog/configuration.go
+++ b/api/v2/datadog/configuration.go
@@ -140,8 +140,12 @@ func NewConfiguration() *Configuration {
 				},
 			},
 		},
-		OperationServers:   map[string]ServerConfigurations{},
-		unstableOperations: map[string]bool{},
+		OperationServers: map[string]ServerConfigurations{},
+		unstableOperations: map[string]bool{
+			"AddReadRoleToArchive":  false,
+			"ListArchiveReadRoles":  false,
+			"RemoveRoleFromArchive": false,
+		},
 	}
 	return cfg
 }
diff --git a/api/v2/datadog/docs/LogsArchive.md b/api/v2/datadog/docs/LogsArchive.md
new file mode 100644
index 00000000000..43cd2f314c8
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchive.md
@@ -0,0 +1,56 @@
+# LogsArchive
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Data** | Pointer to [**LogsArchiveDefinition**](LogsArchiveDefinition.md) |  | [optional] 
+
+## Methods
+
+### NewLogsArchive
+
+`func NewLogsArchive() *LogsArchive`
+
+NewLogsArchive instantiates a new LogsArchive object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveWithDefaults
+
+`func NewLogsArchiveWithDefaults() *LogsArchive`
+
+NewLogsArchiveWithDefaults instantiates a new LogsArchive object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetData
+
+`func (o *LogsArchive) GetData() LogsArchiveDefinition`
+
+GetData returns the Data field if non-nil, zero value otherwise.
+
+### GetDataOk
+
+`func (o *LogsArchive) GetDataOk() (*LogsArchiveDefinition, bool)`
+
+GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetData
+
+`func (o *LogsArchive) SetData(v LogsArchiveDefinition)`
+
+SetData sets Data field to given value.
+
+### HasData
+
+`func (o *LogsArchive) HasData() bool`
+
+HasData returns a boolean if a field has been set.
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveAttributes.md b/api/v2/datadog/docs/LogsArchiveAttributes.md
new file mode 100644
index 00000000000..6360f17ace7
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveAttributes.md
@@ -0,0 +1,129 @@
+# LogsArchiveAttributes
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Destination** | Pointer to [**NullableLogsArchiveDestination**](LogsArchiveDestination.md) |  | 
+**Name** | Pointer to **string** | The archive name. | 
+**Query** | Pointer to **string** | The archive query/filter. Logs matching this query are included in the archive. | 
+**State** | Pointer to [**LogsArchiveState**](LogsArchiveState.md) |  | [optional] 
+
+## Methods
+
+### NewLogsArchiveAttributes
+
+`func NewLogsArchiveAttributes(destination NullableLogsArchiveDestination, name string, query string, ) *LogsArchiveAttributes`
+
+NewLogsArchiveAttributes instantiates a new LogsArchiveAttributes object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveAttributesWithDefaults
+
+`func NewLogsArchiveAttributesWithDefaults() *LogsArchiveAttributes`
+
+NewLogsArchiveAttributesWithDefaults instantiates a new LogsArchiveAttributes object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetDestination
+
+`func (o *LogsArchiveAttributes) GetDestination() LogsArchiveDestination`
+
+GetDestination returns the Destination field if non-nil, zero value otherwise.
+
+### GetDestinationOk
+
+`func (o *LogsArchiveAttributes) GetDestinationOk() (*LogsArchiveDestination, bool)`
+
+GetDestinationOk returns a tuple with the Destination field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetDestination
+
+`func (o *LogsArchiveAttributes) SetDestination(v LogsArchiveDestination)`
+
+SetDestination sets Destination field to given value.
+
+
+### SetDestinationNil
+
+`func (o *LogsArchiveAttributes) SetDestinationNil(b bool)`
+
+ SetDestinationNil sets the value for Destination to be an explicit nil
+
+### UnsetDestination
+`func (o *LogsArchiveAttributes) UnsetDestination()`
+
+UnsetDestination ensures that no value is present for Destination, not even an explicit nil
+### GetName
+
+`func (o *LogsArchiveAttributes) GetName() string`
+
+GetName returns the Name field if non-nil, zero value otherwise.
+
+### GetNameOk
+
+`func (o *LogsArchiveAttributes) GetNameOk() (*string, bool)`
+
+GetNameOk returns a tuple with the Name field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetName
+
+`func (o *LogsArchiveAttributes) SetName(v string)`
+
+SetName sets Name field to given value.
+
+
+### GetQuery
+
+`func (o *LogsArchiveAttributes) GetQuery() string`
+
+GetQuery returns the Query field if non-nil, zero value otherwise.
+
+### GetQueryOk
+
+`func (o *LogsArchiveAttributes) GetQueryOk() (*string, bool)`
+
+GetQueryOk returns a tuple with the Query field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetQuery
+
+`func (o *LogsArchiveAttributes) SetQuery(v string)`
+
+SetQuery sets Query field to given value.
+
+
+### GetState
+
+`func (o *LogsArchiveAttributes) GetState() LogsArchiveState`
+
+GetState returns the State field if non-nil, zero value otherwise.
+
+### GetStateOk
+
+`func (o *LogsArchiveAttributes) GetStateOk() (*LogsArchiveState, bool)`
+
+GetStateOk returns a tuple with the State field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetState
+
+`func (o *LogsArchiveAttributes) SetState(v LogsArchiveState)`
+
+SetState sets State field to given value.
+
+### HasState
+
+`func (o *LogsArchiveAttributes) HasState() bool`
+
+HasState returns a boolean if a field has been set.
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveCreateRequest.md b/api/v2/datadog/docs/LogsArchiveCreateRequest.md
new file mode 100644
index 00000000000..19bc65c2465
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveCreateRequest.md
@@ -0,0 +1,56 @@
+# LogsArchiveCreateRequest
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Data** | Pointer to [**LogsArchiveCreateRequestDefinition**](LogsArchiveCreateRequestDefinition.md) |  | [optional] 
+
+## Methods
+
+### NewLogsArchiveCreateRequest
+
+`func NewLogsArchiveCreateRequest() *LogsArchiveCreateRequest`
+
+NewLogsArchiveCreateRequest instantiates a new LogsArchiveCreateRequest object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveCreateRequestWithDefaults
+
+`func NewLogsArchiveCreateRequestWithDefaults() *LogsArchiveCreateRequest`
+
+NewLogsArchiveCreateRequestWithDefaults instantiates a new LogsArchiveCreateRequest object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetData
+
+`func (o *LogsArchiveCreateRequest) GetData() LogsArchiveCreateRequestDefinition`
+
+GetData returns the Data field if non-nil, zero value otherwise.
+
+### GetDataOk
+
+`func (o *LogsArchiveCreateRequest) GetDataOk() (*LogsArchiveCreateRequestDefinition, bool)`
+
+GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetData
+
+`func (o *LogsArchiveCreateRequest) SetData(v LogsArchiveCreateRequestDefinition)`
+
+SetData sets Data field to given value.
+
+### HasData
+
+`func (o *LogsArchiveCreateRequest) HasData() bool`
+
+HasData returns a boolean if a field has been set.
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveCreateRequestAttributes.md b/api/v2/datadog/docs/LogsArchiveCreateRequestAttributes.md
new file mode 100644
index 00000000000..e3464a38091
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveCreateRequestAttributes.md
@@ -0,0 +1,93 @@
+# LogsArchiveCreateRequestAttributes
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Destination** | Pointer to [**LogsArchiveCreateRequestDestination**](LogsArchiveCreateRequestDestination.md) |  | 
+**Name** | Pointer to **string** | The archive name. | 
+**Query** | Pointer to **string** | The archive query/filter. Logs matching this query are included in the archive. | 
+
+## Methods
+
+### NewLogsArchiveCreateRequestAttributes
+
+`func NewLogsArchiveCreateRequestAttributes(destination LogsArchiveCreateRequestDestination, name string, query string, ) *LogsArchiveCreateRequestAttributes`
+
+NewLogsArchiveCreateRequestAttributes instantiates a new LogsArchiveCreateRequestAttributes object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveCreateRequestAttributesWithDefaults
+
+`func NewLogsArchiveCreateRequestAttributesWithDefaults() *LogsArchiveCreateRequestAttributes`
+
+NewLogsArchiveCreateRequestAttributesWithDefaults instantiates a new LogsArchiveCreateRequestAttributes object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetDestination
+
+`func (o *LogsArchiveCreateRequestAttributes) GetDestination() LogsArchiveCreateRequestDestination`
+
+GetDestination returns the Destination field if non-nil, zero value otherwise.
+
+### GetDestinationOk
+
+`func (o *LogsArchiveCreateRequestAttributes) GetDestinationOk() (*LogsArchiveCreateRequestDestination, bool)`
+
+GetDestinationOk returns a tuple with the Destination field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetDestination
+
+`func (o *LogsArchiveCreateRequestAttributes) SetDestination(v LogsArchiveCreateRequestDestination)`
+
+SetDestination sets Destination field to given value.
+
+
+### GetName
+
+`func (o *LogsArchiveCreateRequestAttributes) GetName() string`
+
+GetName returns the Name field if non-nil, zero value otherwise.
+
+### GetNameOk
+
+`func (o *LogsArchiveCreateRequestAttributes) GetNameOk() (*string, bool)`
+
+GetNameOk returns a tuple with the Name field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetName
+
+`func (o *LogsArchiveCreateRequestAttributes) SetName(v string)`
+
+SetName sets Name field to given value.
+
+
+### GetQuery
+
+`func (o *LogsArchiveCreateRequestAttributes) GetQuery() string`
+
+GetQuery returns the Query field if non-nil, zero value otherwise.
+
+### GetQueryOk
+
+`func (o *LogsArchiveCreateRequestAttributes) GetQueryOk() (*string, bool)`
+
+GetQueryOk returns a tuple with the Query field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetQuery
+
+`func (o *LogsArchiveCreateRequestAttributes) SetQuery(v string)`
+
+SetQuery sets Query field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveCreateRequestDefinition.md b/api/v2/datadog/docs/LogsArchiveCreateRequestDefinition.md
new file mode 100644
index 00000000000..7711a4ec426
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveCreateRequestDefinition.md
@@ -0,0 +1,77 @@
+# LogsArchiveCreateRequestDefinition
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Attributes** | Pointer to [**LogsArchiveCreateRequestAttributes**](LogsArchiveCreateRequestAttributes.md) |  | [optional] 
+**Type** | Pointer to **string** | The type of the resource. The value should always be archives. | [default to "archives"]
+
+## Methods
+
+### NewLogsArchiveCreateRequestDefinition
+
+`func NewLogsArchiveCreateRequestDefinition(type_ string, ) *LogsArchiveCreateRequestDefinition`
+
+NewLogsArchiveCreateRequestDefinition instantiates a new LogsArchiveCreateRequestDefinition object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveCreateRequestDefinitionWithDefaults
+
+`func NewLogsArchiveCreateRequestDefinitionWithDefaults() *LogsArchiveCreateRequestDefinition`
+
+NewLogsArchiveCreateRequestDefinitionWithDefaults instantiates a new LogsArchiveCreateRequestDefinition object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetAttributes
+
+`func (o *LogsArchiveCreateRequestDefinition) GetAttributes() LogsArchiveCreateRequestAttributes`
+
+GetAttributes returns the Attributes field if non-nil, zero value otherwise.
+
+### GetAttributesOk
+
+`func (o *LogsArchiveCreateRequestDefinition) GetAttributesOk() (*LogsArchiveCreateRequestAttributes, bool)`
+
+GetAttributesOk returns a tuple with the Attributes field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetAttributes
+
+`func (o *LogsArchiveCreateRequestDefinition) SetAttributes(v LogsArchiveCreateRequestAttributes)`
+
+SetAttributes sets Attributes field to given value.
+
+### HasAttributes
+
+`func (o *LogsArchiveCreateRequestDefinition) HasAttributes() bool`
+
+HasAttributes returns a boolean if a field has been set.
+
+### GetType
+
+`func (o *LogsArchiveCreateRequestDefinition) GetType() string`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveCreateRequestDefinition) GetTypeOk() (*string, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveCreateRequestDefinition) SetType(v string)`
+
+SetType sets Type field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveCreateRequestDestination.md b/api/v2/datadog/docs/LogsArchiveCreateRequestDestination.md
new file mode 100644
index 00000000000..3c5f9bff2de
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveCreateRequestDestination.md
@@ -0,0 +1,187 @@
+# LogsArchiveCreateRequestDestination
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Container** | Pointer to **string** | The container where the archive will be stored. | 
+**Integration** | Pointer to [**LogsArchiveIntegrationS3**](LogsArchiveIntegrationS3.md) |  | 
+**Path** | Pointer to **string** | The archive path. | [optional] 
+**Region** | Pointer to **string** | The region where the archive will be stored. | [optional] 
+**StorageAccount** | Pointer to **string** | The associated storage account. | 
+**Type** | Pointer to [**LogsArchiveDestinationS3Type**](LogsArchiveDestinationS3Type.md) |  | [default to "s3"]
+**Bucket** | Pointer to **string** | The bucket where the archive will be stored. | 
+
+## Methods
+
+### NewLogsArchiveCreateRequestDestination
+
+`func NewLogsArchiveCreateRequestDestination(container string, integration LogsArchiveIntegrationS3, storageAccount string, type_ LogsArchiveDestinationS3Type, bucket string, ) *LogsArchiveCreateRequestDestination`
+
+NewLogsArchiveCreateRequestDestination instantiates a new LogsArchiveCreateRequestDestination object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveCreateRequestDestinationWithDefaults
+
+`func NewLogsArchiveCreateRequestDestinationWithDefaults() *LogsArchiveCreateRequestDestination`
+
+NewLogsArchiveCreateRequestDestinationWithDefaults instantiates a new LogsArchiveCreateRequestDestination object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetContainer
+
+`func (o *LogsArchiveCreateRequestDestination) GetContainer() string`
+
+GetContainer returns the Container field if non-nil, zero value otherwise.
+
+### GetContainerOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetContainerOk() (*string, bool)`
+
+GetContainerOk returns a tuple with the Container field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetContainer
+
+`func (o *LogsArchiveCreateRequestDestination) SetContainer(v string)`
+
+SetContainer sets Container field to given value.
+
+
+### GetIntegration
+
+`func (o *LogsArchiveCreateRequestDestination) GetIntegration() LogsArchiveIntegrationS3`
+
+GetIntegration returns the Integration field if non-nil, zero value otherwise.
+
+### GetIntegrationOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetIntegrationOk() (*LogsArchiveIntegrationS3, bool)`
+
+GetIntegrationOk returns a tuple with the Integration field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetIntegration
+
+`func (o *LogsArchiveCreateRequestDestination) SetIntegration(v LogsArchiveIntegrationS3)`
+
+SetIntegration sets Integration field to given value.
+
+
+### GetPath
+
+`func (o *LogsArchiveCreateRequestDestination) GetPath() string`
+
+GetPath returns the Path field if non-nil, zero value otherwise.
+
+### GetPathOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetPathOk() (*string, bool)`
+
+GetPathOk returns a tuple with the Path field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetPath
+
+`func (o *LogsArchiveCreateRequestDestination) SetPath(v string)`
+
+SetPath sets Path field to given value.
+
+### HasPath
+
+`func (o *LogsArchiveCreateRequestDestination) HasPath() bool`
+
+HasPath returns a boolean if a field has been set.
+
+### GetRegion
+
+`func (o *LogsArchiveCreateRequestDestination) GetRegion() string`
+
+GetRegion returns the Region field if non-nil, zero value otherwise.
+
+### GetRegionOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetRegionOk() (*string, bool)`
+
+GetRegionOk returns a tuple with the Region field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetRegion
+
+`func (o *LogsArchiveCreateRequestDestination) SetRegion(v string)`
+
+SetRegion sets Region field to given value.
+
+### HasRegion
+
+`func (o *LogsArchiveCreateRequestDestination) HasRegion() bool`
+
+HasRegion returns a boolean if a field has been set.
+
+### GetStorageAccount
+
+`func (o *LogsArchiveCreateRequestDestination) GetStorageAccount() string`
+
+GetStorageAccount returns the StorageAccount field if non-nil, zero value otherwise.
+
+### GetStorageAccountOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetStorageAccountOk() (*string, bool)`
+
+GetStorageAccountOk returns a tuple with the StorageAccount field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetStorageAccount
+
+`func (o *LogsArchiveCreateRequestDestination) SetStorageAccount(v string)`
+
+SetStorageAccount sets StorageAccount field to given value.
+
+
+### GetType
+
+`func (o *LogsArchiveCreateRequestDestination) GetType() LogsArchiveDestinationS3Type`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetTypeOk() (*LogsArchiveDestinationS3Type, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveCreateRequestDestination) SetType(v LogsArchiveDestinationS3Type)`
+
+SetType sets Type field to given value.
+
+
+### GetBucket
+
+`func (o *LogsArchiveCreateRequestDestination) GetBucket() string`
+
+GetBucket returns the Bucket field if non-nil, zero value otherwise.
+
+### GetBucketOk
+
+`func (o *LogsArchiveCreateRequestDestination) GetBucketOk() (*string, bool)`
+
+GetBucketOk returns a tuple with the Bucket field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetBucket
+
+`func (o *LogsArchiveCreateRequestDestination) SetBucket(v string)`
+
+SetBucket sets Bucket field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDefinition.md b/api/v2/datadog/docs/LogsArchiveDefinition.md
new file mode 100644
index 00000000000..ed28d4118e1
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDefinition.md
@@ -0,0 +1,103 @@
+# LogsArchiveDefinition
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Attributes** | Pointer to [**LogsArchiveAttributes**](LogsArchiveAttributes.md) |  | [optional] 
+**Id** | Pointer to **string** | The archive ID. | [optional] [readonly] 
+**Type** | Pointer to **string** | The type of the resource. The value should always be archives. | [readonly] [default to "archives"]
+
+## Methods
+
+### NewLogsArchiveDefinition
+
+`func NewLogsArchiveDefinition(type_ string, ) *LogsArchiveDefinition`
+
+NewLogsArchiveDefinition instantiates a new LogsArchiveDefinition object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveDefinitionWithDefaults
+
+`func NewLogsArchiveDefinitionWithDefaults() *LogsArchiveDefinition`
+
+NewLogsArchiveDefinitionWithDefaults instantiates a new LogsArchiveDefinition object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetAttributes
+
+`func (o *LogsArchiveDefinition) GetAttributes() LogsArchiveAttributes`
+
+GetAttributes returns the Attributes field if non-nil, zero value otherwise.
+
+### GetAttributesOk
+
+`func (o *LogsArchiveDefinition) GetAttributesOk() (*LogsArchiveAttributes, bool)`
+
+GetAttributesOk returns a tuple with the Attributes field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetAttributes
+
+`func (o *LogsArchiveDefinition) SetAttributes(v LogsArchiveAttributes)`
+
+SetAttributes sets Attributes field to given value.
+
+### HasAttributes
+
+`func (o *LogsArchiveDefinition) HasAttributes() bool`
+
+HasAttributes returns a boolean if a field has been set.
+
+### GetId
+
+`func (o *LogsArchiveDefinition) GetId() string`
+
+GetId returns the Id field if non-nil, zero value otherwise.
+
+### GetIdOk
+
+`func (o *LogsArchiveDefinition) GetIdOk() (*string, bool)`
+
+GetIdOk returns a tuple with the Id field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetId
+
+`func (o *LogsArchiveDefinition) SetId(v string)`
+
+SetId sets Id field to given value.
+
+### HasId
+
+`func (o *LogsArchiveDefinition) HasId() bool`
+
+HasId returns a boolean if a field has been set.
+
+### GetType
+
+`func (o *LogsArchiveDefinition) GetType() string`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveDefinition) GetTypeOk() (*string, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveDefinition) SetType(v string)`
+
+SetType sets Type field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestination.md b/api/v2/datadog/docs/LogsArchiveDestination.md
new file mode 100644
index 00000000000..4120b8886fa
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestination.md
@@ -0,0 +1,187 @@
+# LogsArchiveDestination
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Container** | Pointer to **string** | The container where the archive will be stored. | 
+**Integration** | Pointer to [**LogsArchiveIntegrationS3**](LogsArchiveIntegrationS3.md) |  | 
+**Path** | Pointer to **string** | The archive path. | [optional] 
+**Region** | Pointer to **string** | The region where the archive will be stored. | [optional] 
+**StorageAccount** | Pointer to **string** | The associated storage account. | 
+**Type** | Pointer to [**LogsArchiveDestinationS3Type**](LogsArchiveDestinationS3Type.md) |  | [default to "s3"]
+**Bucket** | Pointer to **string** | The bucket where the archive will be stored. | 
+
+## Methods
+
+### NewLogsArchiveDestination
+
+`func NewLogsArchiveDestination(container string, integration LogsArchiveIntegrationS3, storageAccount string, type_ LogsArchiveDestinationS3Type, bucket string, ) *LogsArchiveDestination`
+
+NewLogsArchiveDestination instantiates a new LogsArchiveDestination object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveDestinationWithDefaults
+
+`func NewLogsArchiveDestinationWithDefaults() *LogsArchiveDestination`
+
+NewLogsArchiveDestinationWithDefaults instantiates a new LogsArchiveDestination object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetContainer
+
+`func (o *LogsArchiveDestination) GetContainer() string`
+
+GetContainer returns the Container field if non-nil, zero value otherwise.
+
+### GetContainerOk
+
+`func (o *LogsArchiveDestination) GetContainerOk() (*string, bool)`
+
+GetContainerOk returns a tuple with the Container field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetContainer
+
+`func (o *LogsArchiveDestination) SetContainer(v string)`
+
+SetContainer sets Container field to given value.
+
+
+### GetIntegration
+
+`func (o *LogsArchiveDestination) GetIntegration() LogsArchiveIntegrationS3`
+
+GetIntegration returns the Integration field if non-nil, zero value otherwise.
+
+### GetIntegrationOk
+
+`func (o *LogsArchiveDestination) GetIntegrationOk() (*LogsArchiveIntegrationS3, bool)`
+
+GetIntegrationOk returns a tuple with the Integration field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetIntegration
+
+`func (o *LogsArchiveDestination) SetIntegration(v LogsArchiveIntegrationS3)`
+
+SetIntegration sets Integration field to given value.
+
+
+### GetPath
+
+`func (o *LogsArchiveDestination) GetPath() string`
+
+GetPath returns the Path field if non-nil, zero value otherwise.
+
+### GetPathOk
+
+`func (o *LogsArchiveDestination) GetPathOk() (*string, bool)`
+
+GetPathOk returns a tuple with the Path field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetPath
+
+`func (o *LogsArchiveDestination) SetPath(v string)`
+
+SetPath sets Path field to given value.
+
+### HasPath
+
+`func (o *LogsArchiveDestination) HasPath() bool`
+
+HasPath returns a boolean if a field has been set.
+
+### GetRegion
+
+`func (o *LogsArchiveDestination) GetRegion() string`
+
+GetRegion returns the Region field if non-nil, zero value otherwise.
+
+### GetRegionOk
+
+`func (o *LogsArchiveDestination) GetRegionOk() (*string, bool)`
+
+GetRegionOk returns a tuple with the Region field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetRegion
+
+`func (o *LogsArchiveDestination) SetRegion(v string)`
+
+SetRegion sets Region field to given value.
+
+### HasRegion
+
+`func (o *LogsArchiveDestination) HasRegion() bool`
+
+HasRegion returns a boolean if a field has been set.
+
+### GetStorageAccount
+
+`func (o *LogsArchiveDestination) GetStorageAccount() string`
+
+GetStorageAccount returns the StorageAccount field if non-nil, zero value otherwise.
+
+### GetStorageAccountOk
+
+`func (o *LogsArchiveDestination) GetStorageAccountOk() (*string, bool)`
+
+GetStorageAccountOk returns a tuple with the StorageAccount field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetStorageAccount
+
+`func (o *LogsArchiveDestination) SetStorageAccount(v string)`
+
+SetStorageAccount sets StorageAccount field to given value.
+
+
+### GetType
+
+`func (o *LogsArchiveDestination) GetType() LogsArchiveDestinationS3Type`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveDestination) GetTypeOk() (*LogsArchiveDestinationS3Type, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveDestination) SetType(v LogsArchiveDestinationS3Type)`
+
+SetType sets Type field to given value.
+
+
+### GetBucket
+
+`func (o *LogsArchiveDestination) GetBucket() string`
+
+GetBucket returns the Bucket field if non-nil, zero value otherwise.
+
+### GetBucketOk
+
+`func (o *LogsArchiveDestination) GetBucketOk() (*string, bool)`
+
+GetBucketOk returns a tuple with the Bucket field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetBucket
+
+`func (o *LogsArchiveDestination) SetBucket(v string)`
+
+SetBucket sets Bucket field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationAzure.md b/api/v2/datadog/docs/LogsArchiveDestinationAzure.md
new file mode 100644
index 00000000000..2e26eae4334
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationAzure.md
@@ -0,0 +1,166 @@
+# LogsArchiveDestinationAzure
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Container** | Pointer to **string** | The container where the archive will be stored. | 
+**Integration** | Pointer to [**LogsArchiveIntegrationAzure**](LogsArchiveIntegrationAzure.md) |  | 
+**Path** | Pointer to **string** | The archive path. | [optional] 
+**Region** | Pointer to **string** | The region where the archive will be stored. | [optional] 
+**StorageAccount** | Pointer to **string** | The associated storage account. | 
+**Type** | Pointer to [**LogsArchiveDestinationAzureType**](LogsArchiveDestinationAzureType.md) |  | [default to "azure"]
+
+## Methods
+
+### NewLogsArchiveDestinationAzure
+
+`func NewLogsArchiveDestinationAzure(container string, integration LogsArchiveIntegrationAzure, storageAccount string, type_ LogsArchiveDestinationAzureType, ) *LogsArchiveDestinationAzure`
+
+NewLogsArchiveDestinationAzure instantiates a new LogsArchiveDestinationAzure object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveDestinationAzureWithDefaults
+
+`func NewLogsArchiveDestinationAzureWithDefaults() *LogsArchiveDestinationAzure`
+
+NewLogsArchiveDestinationAzureWithDefaults instantiates a new LogsArchiveDestinationAzure object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetContainer
+
+`func (o *LogsArchiveDestinationAzure) GetContainer() string`
+
+GetContainer returns the Container field if non-nil, zero value otherwise.
+
+### GetContainerOk
+
+`func (o *LogsArchiveDestinationAzure) GetContainerOk() (*string, bool)`
+
+GetContainerOk returns a tuple with the Container field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetContainer
+
+`func (o *LogsArchiveDestinationAzure) SetContainer(v string)`
+
+SetContainer sets Container field to given value.
+
+
+### GetIntegration
+
+`func (o *LogsArchiveDestinationAzure) GetIntegration() LogsArchiveIntegrationAzure`
+
+GetIntegration returns the Integration field if non-nil, zero value otherwise.
+
+### GetIntegrationOk
+
+`func (o *LogsArchiveDestinationAzure) GetIntegrationOk() (*LogsArchiveIntegrationAzure, bool)`
+
+GetIntegrationOk returns a tuple with the Integration field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetIntegration
+
+`func (o *LogsArchiveDestinationAzure) SetIntegration(v LogsArchiveIntegrationAzure)`
+
+SetIntegration sets Integration field to given value.
+
+
+### GetPath
+
+`func (o *LogsArchiveDestinationAzure) GetPath() string`
+
+GetPath returns the Path field if non-nil, zero value otherwise.
+
+### GetPathOk
+
+`func (o *LogsArchiveDestinationAzure) GetPathOk() (*string, bool)`
+
+GetPathOk returns a tuple with the Path field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetPath
+
+`func (o *LogsArchiveDestinationAzure) SetPath(v string)`
+
+SetPath sets Path field to given value.
+
+### HasPath
+
+`func (o *LogsArchiveDestinationAzure) HasPath() bool`
+
+HasPath returns a boolean if a field has been set.
+
+### GetRegion
+
+`func (o *LogsArchiveDestinationAzure) GetRegion() string`
+
+GetRegion returns the Region field if non-nil, zero value otherwise.
+
+### GetRegionOk
+
+`func (o *LogsArchiveDestinationAzure) GetRegionOk() (*string, bool)`
+
+GetRegionOk returns a tuple with the Region field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetRegion
+
+`func (o *LogsArchiveDestinationAzure) SetRegion(v string)`
+
+SetRegion sets Region field to given value.
+
+### HasRegion
+
+`func (o *LogsArchiveDestinationAzure) HasRegion() bool`
+
+HasRegion returns a boolean if a field has been set.
+
+### GetStorageAccount
+
+`func (o *LogsArchiveDestinationAzure) GetStorageAccount() string`
+
+GetStorageAccount returns the StorageAccount field if non-nil, zero value otherwise.
+
+### GetStorageAccountOk
+
+`func (o *LogsArchiveDestinationAzure) GetStorageAccountOk() (*string, bool)`
+
+GetStorageAccountOk returns a tuple with the StorageAccount field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetStorageAccount
+
+`func (o *LogsArchiveDestinationAzure) SetStorageAccount(v string)`
+
+SetStorageAccount sets StorageAccount field to given value.
+
+
+### GetType
+
+`func (o *LogsArchiveDestinationAzure) GetType() LogsArchiveDestinationAzureType`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveDestinationAzure) GetTypeOk() (*LogsArchiveDestinationAzureType, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveDestinationAzure) SetType(v LogsArchiveDestinationAzureType)`
+
+SetType sets Type field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationAzureType.md b/api/v2/datadog/docs/LogsArchiveDestinationAzureType.md
new file mode 100644
index 00000000000..d14850c2510
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationAzureType.md
@@ -0,0 +1,11 @@
+# LogsArchiveDestinationAzureType
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationGCS.md b/api/v2/datadog/docs/LogsArchiveDestinationGCS.md
new file mode 100644
index 00000000000..135943fb89f
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationGCS.md
@@ -0,0 +1,119 @@
+# LogsArchiveDestinationGCS
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Bucket** | Pointer to **string** | The bucket where the archive will be stored. | 
+**Integration** | Pointer to [**LogsArchiveIntegrationGCS**](LogsArchiveIntegrationGCS.md) |  | 
+**Path** | Pointer to **string** | The archive path. | [optional] 
+**Type** | Pointer to [**LogsArchiveDestinationGCSType**](LogsArchiveDestinationGCSType.md) |  | [default to "gcs"]
+
+## Methods
+
+### NewLogsArchiveDestinationGCS
+
+`func NewLogsArchiveDestinationGCS(bucket string, integration LogsArchiveIntegrationGCS, type_ LogsArchiveDestinationGCSType, ) *LogsArchiveDestinationGCS`
+
+NewLogsArchiveDestinationGCS instantiates a new LogsArchiveDestinationGCS object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveDestinationGCSWithDefaults
+
+`func NewLogsArchiveDestinationGCSWithDefaults() *LogsArchiveDestinationGCS`
+
+NewLogsArchiveDestinationGCSWithDefaults instantiates a new LogsArchiveDestinationGCS object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetBucket
+
+`func (o *LogsArchiveDestinationGCS) GetBucket() string`
+
+GetBucket returns the Bucket field if non-nil, zero value otherwise.
+
+### GetBucketOk
+
+`func (o *LogsArchiveDestinationGCS) GetBucketOk() (*string, bool)`
+
+GetBucketOk returns a tuple with the Bucket field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetBucket
+
+`func (o *LogsArchiveDestinationGCS) SetBucket(v string)`
+
+SetBucket sets Bucket field to given value.
+
+
+### GetIntegration
+
+`func (o *LogsArchiveDestinationGCS) GetIntegration() LogsArchiveIntegrationGCS`
+
+GetIntegration returns the Integration field if non-nil, zero value otherwise.
+
+### GetIntegrationOk
+
+`func (o *LogsArchiveDestinationGCS) GetIntegrationOk() (*LogsArchiveIntegrationGCS, bool)`
+
+GetIntegrationOk returns a tuple with the Integration field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetIntegration
+
+`func (o *LogsArchiveDestinationGCS) SetIntegration(v LogsArchiveIntegrationGCS)`
+
+SetIntegration sets Integration field to given value.
+
+
+### GetPath
+
+`func (o *LogsArchiveDestinationGCS) GetPath() string`
+
+GetPath returns the Path field if non-nil, zero value otherwise.
+
+### GetPathOk
+
+`func (o *LogsArchiveDestinationGCS) GetPathOk() (*string, bool)`
+
+GetPathOk returns a tuple with the Path field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetPath
+
+`func (o *LogsArchiveDestinationGCS) SetPath(v string)`
+
+SetPath sets Path field to given value.
+
+### HasPath
+
+`func (o *LogsArchiveDestinationGCS) HasPath() bool`
+
+HasPath returns a boolean if a field has been set.
+
+### GetType
+
+`func (o *LogsArchiveDestinationGCS) GetType() LogsArchiveDestinationGCSType`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveDestinationGCS) GetTypeOk() (*LogsArchiveDestinationGCSType, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveDestinationGCS) SetType(v LogsArchiveDestinationGCSType)`
+
+SetType sets Type field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationGCSType.md b/api/v2/datadog/docs/LogsArchiveDestinationGCSType.md
new file mode 100644
index 00000000000..d1944d90dd7
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationGCSType.md
@@ -0,0 +1,11 @@
+# LogsArchiveDestinationGCSType
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationS3.md b/api/v2/datadog/docs/LogsArchiveDestinationS3.md
new file mode 100644
index 00000000000..e7c21fd9477
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationS3.md
@@ -0,0 +1,119 @@
+# LogsArchiveDestinationS3
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Bucket** | Pointer to **string** | The bucket where the archive will be stored. | 
+**Integration** | Pointer to [**LogsArchiveIntegrationS3**](LogsArchiveIntegrationS3.md) |  | 
+**Path** | Pointer to **string** | The archive path. | [optional] 
+**Type** | Pointer to [**LogsArchiveDestinationS3Type**](LogsArchiveDestinationS3Type.md) |  | [default to "s3"]
+
+## Methods
+
+### NewLogsArchiveDestinationS3
+
+`func NewLogsArchiveDestinationS3(bucket string, integration LogsArchiveIntegrationS3, type_ LogsArchiveDestinationS3Type, ) *LogsArchiveDestinationS3`
+
+NewLogsArchiveDestinationS3 instantiates a new LogsArchiveDestinationS3 object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveDestinationS3WithDefaults
+
+`func NewLogsArchiveDestinationS3WithDefaults() *LogsArchiveDestinationS3`
+
+NewLogsArchiveDestinationS3WithDefaults instantiates a new LogsArchiveDestinationS3 object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetBucket
+
+`func (o *LogsArchiveDestinationS3) GetBucket() string`
+
+GetBucket returns the Bucket field if non-nil, zero value otherwise.
+
+### GetBucketOk
+
+`func (o *LogsArchiveDestinationS3) GetBucketOk() (*string, bool)`
+
+GetBucketOk returns a tuple with the Bucket field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetBucket
+
+`func (o *LogsArchiveDestinationS3) SetBucket(v string)`
+
+SetBucket sets Bucket field to given value.
+
+
+### GetIntegration
+
+`func (o *LogsArchiveDestinationS3) GetIntegration() LogsArchiveIntegrationS3`
+
+GetIntegration returns the Integration field if non-nil, zero value otherwise.
+
+### GetIntegrationOk
+
+`func (o *LogsArchiveDestinationS3) GetIntegrationOk() (*LogsArchiveIntegrationS3, bool)`
+
+GetIntegrationOk returns a tuple with the Integration field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetIntegration
+
+`func (o *LogsArchiveDestinationS3) SetIntegration(v LogsArchiveIntegrationS3)`
+
+SetIntegration sets Integration field to given value.
+
+
+### GetPath
+
+`func (o *LogsArchiveDestinationS3) GetPath() string`
+
+GetPath returns the Path field if non-nil, zero value otherwise.
+
+### GetPathOk
+
+`func (o *LogsArchiveDestinationS3) GetPathOk() (*string, bool)`
+
+GetPathOk returns a tuple with the Path field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetPath
+
+`func (o *LogsArchiveDestinationS3) SetPath(v string)`
+
+SetPath sets Path field to given value.
+
+### HasPath
+
+`func (o *LogsArchiveDestinationS3) HasPath() bool`
+
+HasPath returns a boolean if a field has been set.
+
+### GetType
+
+`func (o *LogsArchiveDestinationS3) GetType() LogsArchiveDestinationS3Type`
+
+GetType returns the Type field if non-nil, zero value otherwise.
+
+### GetTypeOk
+
+`func (o *LogsArchiveDestinationS3) GetTypeOk() (*LogsArchiveDestinationS3Type, bool)`
+
+GetTypeOk returns a tuple with the Type field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetType
+
+`func (o *LogsArchiveDestinationS3) SetType(v LogsArchiveDestinationS3Type)`
+
+SetType sets Type field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveDestinationS3Type.md b/api/v2/datadog/docs/LogsArchiveDestinationS3Type.md
new file mode 100644
index 00000000000..54936bb8baf
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveDestinationS3Type.md
@@ -0,0 +1,11 @@
+# LogsArchiveDestinationS3Type
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveIntegrationAzure.md b/api/v2/datadog/docs/LogsArchiveIntegrationAzure.md
new file mode 100644
index 00000000000..a884216c877
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveIntegrationAzure.md
@@ -0,0 +1,72 @@
+# LogsArchiveIntegrationAzure
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ClientId** | Pointer to **string** | A client ID. | 
+**TenantId** | Pointer to **string** | A tenant ID. | 
+
+## Methods
+
+### NewLogsArchiveIntegrationAzure
+
+`func NewLogsArchiveIntegrationAzure(clientId string, tenantId string, ) *LogsArchiveIntegrationAzure`
+
+NewLogsArchiveIntegrationAzure instantiates a new LogsArchiveIntegrationAzure object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveIntegrationAzureWithDefaults
+
+`func NewLogsArchiveIntegrationAzureWithDefaults() *LogsArchiveIntegrationAzure`
+
+NewLogsArchiveIntegrationAzureWithDefaults instantiates a new LogsArchiveIntegrationAzure object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetClientId
+
+`func (o *LogsArchiveIntegrationAzure) GetClientId() string`
+
+GetClientId returns the ClientId field if non-nil, zero value otherwise.
+
+### GetClientIdOk
+
+`func (o *LogsArchiveIntegrationAzure) GetClientIdOk() (*string, bool)`
+
+GetClientIdOk returns a tuple with the ClientId field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetClientId
+
+`func (o *LogsArchiveIntegrationAzure) SetClientId(v string)`
+
+SetClientId sets ClientId field to given value.
+
+
+### GetTenantId
+
+`func (o *LogsArchiveIntegrationAzure) GetTenantId() string`
+
+GetTenantId returns the TenantId field if non-nil, zero value otherwise.
+
+### GetTenantIdOk
+
+`func (o *LogsArchiveIntegrationAzure) GetTenantIdOk() (*string, bool)`
+
+GetTenantIdOk returns a tuple with the TenantId field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetTenantId
+
+`func (o *LogsArchiveIntegrationAzure) SetTenantId(v string)`
+
+SetTenantId sets TenantId field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveIntegrationGCS.md b/api/v2/datadog/docs/LogsArchiveIntegrationGCS.md
new file mode 100644
index 00000000000..ca85a0a3944
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveIntegrationGCS.md
@@ -0,0 +1,72 @@
+# LogsArchiveIntegrationGCS
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ClientEmail** | Pointer to **string** | A client email. | 
+**ProjectId** | Pointer to **string** | A project ID. | 
+
+## Methods
+
+### NewLogsArchiveIntegrationGCS
+
+`func NewLogsArchiveIntegrationGCS(clientEmail string, projectId string, ) *LogsArchiveIntegrationGCS`
+
+NewLogsArchiveIntegrationGCS instantiates a new LogsArchiveIntegrationGCS object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveIntegrationGCSWithDefaults
+
+`func NewLogsArchiveIntegrationGCSWithDefaults() *LogsArchiveIntegrationGCS`
+
+NewLogsArchiveIntegrationGCSWithDefaults instantiates a new LogsArchiveIntegrationGCS object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetClientEmail
+
+`func (o *LogsArchiveIntegrationGCS) GetClientEmail() string`
+
+GetClientEmail returns the ClientEmail field if non-nil, zero value otherwise.
+
+### GetClientEmailOk
+
+`func (o *LogsArchiveIntegrationGCS) GetClientEmailOk() (*string, bool)`
+
+GetClientEmailOk returns a tuple with the ClientEmail field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetClientEmail
+
+`func (o *LogsArchiveIntegrationGCS) SetClientEmail(v string)`
+
+SetClientEmail sets ClientEmail field to given value.
+
+
+### GetProjectId
+
+`func (o *LogsArchiveIntegrationGCS) GetProjectId() string`
+
+GetProjectId returns the ProjectId field if non-nil, zero value otherwise.
+
+### GetProjectIdOk
+
+`func (o *LogsArchiveIntegrationGCS) GetProjectIdOk() (*string, bool)`
+
+GetProjectIdOk returns a tuple with the ProjectId field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetProjectId
+
+`func (o *LogsArchiveIntegrationGCS) SetProjectId(v string)`
+
+SetProjectId sets ProjectId field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveIntegrationS3.md b/api/v2/datadog/docs/LogsArchiveIntegrationS3.md
new file mode 100644
index 00000000000..2454ae76ac9
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveIntegrationS3.md
@@ -0,0 +1,72 @@
+# LogsArchiveIntegrationS3
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AccountId** | Pointer to **string** | The account ID for the integration. | 
+**RoleName** | Pointer to **string** | The path of the integration. | 
+
+## Methods
+
+### NewLogsArchiveIntegrationS3
+
+`func NewLogsArchiveIntegrationS3(accountId string, roleName string, ) *LogsArchiveIntegrationS3`
+
+NewLogsArchiveIntegrationS3 instantiates a new LogsArchiveIntegrationS3 object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchiveIntegrationS3WithDefaults
+
+`func NewLogsArchiveIntegrationS3WithDefaults() *LogsArchiveIntegrationS3`
+
+NewLogsArchiveIntegrationS3WithDefaults instantiates a new LogsArchiveIntegrationS3 object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetAccountId
+
+`func (o *LogsArchiveIntegrationS3) GetAccountId() string`
+
+GetAccountId returns the AccountId field if non-nil, zero value otherwise.
+
+### GetAccountIdOk
+
+`func (o *LogsArchiveIntegrationS3) GetAccountIdOk() (*string, bool)`
+
+GetAccountIdOk returns a tuple with the AccountId field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetAccountId
+
+`func (o *LogsArchiveIntegrationS3) SetAccountId(v string)`
+
+SetAccountId sets AccountId field to given value.
+
+
+### GetRoleName
+
+`func (o *LogsArchiveIntegrationS3) GetRoleName() string`
+
+GetRoleName returns the RoleName field if non-nil, zero value otherwise.
+
+### GetRoleNameOk
+
+`func (o *LogsArchiveIntegrationS3) GetRoleNameOk() (*string, bool)`
+
+GetRoleNameOk returns a tuple with the RoleName field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetRoleName
+
+`func (o *LogsArchiveIntegrationS3) SetRoleName(v string)`
+
+SetRoleName sets RoleName field to given value.
+
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchiveState.md b/api/v2/datadog/docs/LogsArchiveState.md
new file mode 100644
index 00000000000..5ddebd99551
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchiveState.md
@@ -0,0 +1,11 @@
+# LogsArchiveState
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchives.md b/api/v2/datadog/docs/LogsArchives.md
new file mode 100644
index 00000000000..1ff65b7856d
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchives.md
@@ -0,0 +1,56 @@
+# LogsArchives
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Data** | Pointer to [**[]LogsArchiveDefinition**](LogsArchiveDefinition.md) | A list of archives. | [optional] 
+
+## Methods
+
+### NewLogsArchives
+
+`func NewLogsArchives() *LogsArchives`
+
+NewLogsArchives instantiates a new LogsArchives object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewLogsArchivesWithDefaults
+
+`func NewLogsArchivesWithDefaults() *LogsArchives`
+
+NewLogsArchivesWithDefaults instantiates a new LogsArchives object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetData
+
+`func (o *LogsArchives) GetData() []LogsArchiveDefinition`
+
+GetData returns the Data field if non-nil, zero value otherwise.
+
+### GetDataOk
+
+`func (o *LogsArchives) GetDataOk() (*[]LogsArchiveDefinition, bool)`
+
+GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetData
+
+`func (o *LogsArchives) SetData(v []LogsArchiveDefinition)`
+
+SetData sets Data field to given value.
+
+### HasData
+
+`func (o *LogsArchives) HasData() bool`
+
+HasData returns a boolean if a field has been set.
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/docs/LogsArchivesApi.md b/api/v2/datadog/docs/LogsArchivesApi.md
new file mode 100644
index 00000000000..6c8dfee8066
--- /dev/null
+++ b/api/v2/datadog/docs/LogsArchivesApi.md
@@ -0,0 +1,667 @@
+# \LogsArchivesApi
+
+All URIs are relative to *https://api.datadoghq.com*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**AddReadRoleToArchive**](LogsArchivesApi.md#AddReadRoleToArchive) | **Post** /api/v2/logs/config/archives/{archive_id}/readers | Grant role to an archive
+[**CreateLogsArchive**](LogsArchivesApi.md#CreateLogsArchive) | **Post** /api/v2/logs/config/archives | Create an archive
+[**DeleteLogsArchive**](LogsArchivesApi.md#DeleteLogsArchive) | **Delete** /api/v2/logs/config/archives/{archive_id} | Delete an archive
+[**GetLogsArchive**](LogsArchivesApi.md#GetLogsArchive) | **Get** /api/v2/logs/config/archives/{archive_id} | Get an archive
+[**ListArchiveReadRoles**](LogsArchivesApi.md#ListArchiveReadRoles) | **Get** /api/v2/logs/config/archives/{archive_id}/readers | List read roles for an archive
+[**ListLogsArchives**](LogsArchivesApi.md#ListLogsArchives) | **Get** /api/v2/logs/config/archives | Get all archives
+[**RemoveRoleFromArchive**](LogsArchivesApi.md#RemoveRoleFromArchive) | **Delete** /api/v2/logs/config/archives/{archive_id}/readers | Revoke role from an archive
+[**UpdateLogsArchive**](LogsArchivesApi.md#UpdateLogsArchive) | **Put** /api/v2/logs/config/archives/{archive_id} | Update an archive
+
+
+
+## AddReadRoleToArchive
+
+> AddReadRoleToArchive(ctx, archiveId).Body(body).Execute()
+
+Grant role to an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+    body := datadog.RelationshipToRole{Data: datadog.RelationshipToRoleData{Id: "Id_example", Type: datadog.RolesType{}}} // RelationshipToRole |  (optional)
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.AddReadRoleToArchive(ctx, archiveId).Body(body).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.AddReadRoleToArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiAddReadRoleToArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+ **body** | [**RelationshipToRole**](RelationshipToRole.md) |  | 
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## CreateLogsArchive
+
+> LogsArchive CreateLogsArchive(ctx).Body(body).Execute()
+
+Create an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    body := datadog.LogsArchiveCreateRequest{Data: datadog.LogsArchiveCreateRequestDefinition{Attributes: datadog.LogsArchiveCreateRequestAttributes{Destination: datadog.LogsArchiveCreateRequestDestination{Container: "Container_example", Integration: datadog.LogsArchiveIntegrationS3{AccountId: "AccountId_example", RoleName: "RoleName_example"}, Path: "Path_example", Region: "Region_example", StorageAccount: "StorageAccount_example", Type: datadog.LogsArchiveDestinationS3Type{}, Bucket: "Bucket_example"}, Name: "Name_example", Query: "Query_example"}, Type: "Type_example"}} // LogsArchiveCreateRequest | The definition of the new archive.
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.CreateLogsArchive(ctx, body).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.CreateLogsArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+    // response from `CreateLogsArchive`: LogsArchive
+    fmt.Fprintf(os.Stdout, "Response from `LogsArchivesApi.CreateLogsArchive`: %v\n", resp)
+}
+```
+
+### Path Parameters
+
+
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiCreateLogsArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**LogsArchiveCreateRequest**](LogsArchiveCreateRequest.md) | The definition of the new archive. | 
+
+### Return type
+
+[**LogsArchive**](LogsArchive.md)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## DeleteLogsArchive
+
+> DeleteLogsArchive(ctx, archiveId).Execute()
+
+Delete an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.DeleteLogsArchive(ctx, archiveId).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.DeleteLogsArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiDeleteLogsArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## GetLogsArchive
+
+> LogsArchive GetLogsArchive(ctx, archiveId).Execute()
+
+Get an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.GetLogsArchive(ctx, archiveId).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.GetLogsArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+    // response from `GetLogsArchive`: LogsArchive
+    fmt.Fprintf(os.Stdout, "Response from `LogsArchivesApi.GetLogsArchive`: %v\n", resp)
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiGetLogsArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+
+### Return type
+
+[**LogsArchive**](LogsArchive.md)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## ListArchiveReadRoles
+
+> RolesResponse ListArchiveReadRoles(ctx, archiveId).Execute()
+
+List read roles for an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.ListArchiveReadRoles(ctx, archiveId).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.ListArchiveReadRoles``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+    // response from `ListArchiveReadRoles`: RolesResponse
+    fmt.Fprintf(os.Stdout, "Response from `LogsArchivesApi.ListArchiveReadRoles`: %v\n", resp)
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiListArchiveReadRolesRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+
+### Return type
+
+[**RolesResponse**](RolesResponse.md)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## ListLogsArchives
+
+> LogsArchives ListLogsArchives(ctx).Execute()
+
+Get all archives
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.ListLogsArchives(ctx).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.ListLogsArchives``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+    // response from `ListLogsArchives`: LogsArchives
+    fmt.Fprintf(os.Stdout, "Response from `LogsArchivesApi.ListLogsArchives`: %v\n", resp)
+}
+```
+
+### Path Parameters
+
+This endpoint does not need any parameter.
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiListLogsArchivesRequest struct via the builder pattern
+
+
+### Return type
+
+[**LogsArchives**](LogsArchives.md)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## RemoveRoleFromArchive
+
+> RemoveRoleFromArchive(ctx, archiveId).Body(body).Execute()
+
+Revoke role from an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+    body := datadog.RelationshipToRole{Data: datadog.RelationshipToRoleData{Id: "Id_example", Type: datadog.RolesType{}}} // RelationshipToRole |  (optional)
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.RemoveRoleFromArchive(ctx, archiveId).Body(body).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.RemoveRoleFromArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiRemoveRoleFromArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+ **body** | [**RelationshipToRole**](RelationshipToRole.md) |  | 
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
+
+## UpdateLogsArchive
+
+> LogsArchive UpdateLogsArchive(ctx, archiveId).Body(body).Execute()
+
+Update an archive
+
+
+
+### Example
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "os"
+    datadog "github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+)
+
+func main() {
+    ctx := context.WithValue(
+        context.Background(),
+        datadog.ContextAPIKeys,
+        map[string]datadog.APIKey{
+            "apiKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_API_KEY"),
+            },
+            "appKeyAuth": {
+                Key: os.Getenv("DD_CLIENT_APP_KEY"),
+            },
+        },
+    )
+
+    archiveId := "archiveId_example" // string | The ID of the archive.
+    body := datadog.LogsArchiveCreateRequest{Data: datadog.LogsArchiveCreateRequestDefinition{Attributes: datadog.LogsArchiveCreateRequestAttributes{Destination: datadog.LogsArchiveCreateRequestDestination{Container: "Container_example", Integration: datadog.LogsArchiveIntegrationS3{AccountId: "AccountId_example", RoleName: "RoleName_example"}, Path: "Path_example", Region: "Region_example", StorageAccount: "StorageAccount_example", Type: datadog.LogsArchiveDestinationS3Type{}, Bucket: "Bucket_example"}, Name: "Name_example", Query: "Query_example"}, Type: "Type_example"}} // LogsArchiveCreateRequest | New definition of the archive.
+
+    configuration := datadog.NewConfiguration()
+    api_client := datadog.NewAPIClient(configuration)
+    resp, r, err := api_client.LogsArchivesApi.UpdateLogsArchive(ctx, archiveId, body).Execute()
+    if err != nil {
+        fmt.Fprintf(os.Stderr, "Error when calling `LogsArchivesApi.UpdateLogsArchive``: %v\n", err)
+        fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+    }
+    // response from `UpdateLogsArchive`: LogsArchive
+    fmt.Fprintf(os.Stdout, "Response from `LogsArchivesApi.UpdateLogsArchive`: %v\n", resp)
+}
+```
+
+### Path Parameters
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+**archiveId** | **string** | The ID of the archive. | 
+
+### Other Parameters
+
+Other parameters are passed through a pointer to a apiUpdateLogsArchiveRequest struct via the builder pattern
+
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+
+ **body** | [**LogsArchiveCreateRequest**](LogsArchiveCreateRequest.md) | New definition of the archive. | 
+
+### Return type
+
+[**LogsArchive**](LogsArchive.md)
+
+### Authorization
+
+[apiKeyAuth](../README.md#apiKeyAuth), [appKeyAuth](../README.md#appKeyAuth)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
+[[Back to Model list]](../README.md#documentation-for-models)
+[[Back to README]](../README.md)
+
diff --git a/api/v2/datadog/docs/RelationshipToRole.md b/api/v2/datadog/docs/RelationshipToRole.md
new file mode 100644
index 00000000000..8978d0ed3ba
--- /dev/null
+++ b/api/v2/datadog/docs/RelationshipToRole.md
@@ -0,0 +1,56 @@
+# RelationshipToRole
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Data** | Pointer to [**RelationshipToRoleData**](RelationshipToRoleData.md) |  | [optional] 
+
+## Methods
+
+### NewRelationshipToRole
+
+`func NewRelationshipToRole() *RelationshipToRole`
+
+NewRelationshipToRole instantiates a new RelationshipToRole object
+This constructor will assign default values to properties that have it defined,
+and makes sure properties required by API are set, but the set of arguments
+will change when the set of required properties is changed
+
+### NewRelationshipToRoleWithDefaults
+
+`func NewRelationshipToRoleWithDefaults() *RelationshipToRole`
+
+NewRelationshipToRoleWithDefaults instantiates a new RelationshipToRole object
+This constructor will only assign default values to properties that have it defined,
+but it doesn't guarantee that properties required by API are set
+
+### GetData
+
+`func (o *RelationshipToRole) GetData() RelationshipToRoleData`
+
+GetData returns the Data field if non-nil, zero value otherwise.
+
+### GetDataOk
+
+`func (o *RelationshipToRole) GetDataOk() (*RelationshipToRoleData, bool)`
+
+GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise
+and a boolean to check if the value has been set.
+
+### SetData
+
+`func (o *RelationshipToRole) SetData(v RelationshipToRoleData)`
+
+SetData sets Data field to given value.
+
+### HasData
+
+`func (o *RelationshipToRole) HasData() bool`
+
+HasData returns a boolean if a field has been set.
+
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/api/v2/datadog/model_logs_archive.go b/api/v2/datadog/model_logs_archive.go
new file mode 100644
index 00000000000..057dc7929ae
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive.go
@@ -0,0 +1,111 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchive The logs archive.
+type LogsArchive struct {
+	Data *LogsArchiveDefinition `json:"data,omitempty"`
+}
+
+// NewLogsArchive instantiates a new LogsArchive object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchive() *LogsArchive {
+	this := LogsArchive{}
+	return &this
+}
+
+// NewLogsArchiveWithDefaults instantiates a new LogsArchive object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveWithDefaults() *LogsArchive {
+	this := LogsArchive{}
+	return &this
+}
+
+// GetData returns the Data field value if set, zero value otherwise.
+func (o *LogsArchive) GetData() LogsArchiveDefinition {
+	if o == nil || o.Data == nil {
+		var ret LogsArchiveDefinition
+		return ret
+	}
+	return *o.Data
+}
+
+// GetDataOk returns a tuple with the Data field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchive) GetDataOk() (*LogsArchiveDefinition, bool) {
+	if o == nil || o.Data == nil {
+		return nil, false
+	}
+	return o.Data, true
+}
+
+// HasData returns a boolean if a field has been set.
+func (o *LogsArchive) HasData() bool {
+	if o != nil && o.Data != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetData gets a reference to the given LogsArchiveDefinition and assigns it to the Data field.
+func (o *LogsArchive) SetData(v LogsArchiveDefinition) {
+	o.Data = &v
+}
+
+func (o LogsArchive) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Data != nil {
+		toSerialize["data"] = o.Data
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchive struct {
+	value *LogsArchive
+	isSet bool
+}
+
+func (v NullableLogsArchive) Get() *LogsArchive {
+	return v.value
+}
+
+func (v *NullableLogsArchive) Set(val *LogsArchive) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchive) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchive) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchive(val *LogsArchive) *NullableLogsArchive {
+	return &NullableLogsArchive{value: val, isSet: true}
+}
+
+func (v NullableLogsArchive) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchive) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_attributes.go b/api/v2/datadog/model_logs_archive_attributes.go
new file mode 100644
index 00000000000..25e9144a5e0
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_attributes.go
@@ -0,0 +1,202 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveAttributes The attributes associated with the archive.
+type LogsArchiveAttributes struct {
+	Destination NullableLogsArchiveDestination `json:"destination"`
+	// The archive name.
+	Name string `json:"name"`
+	// The archive query/filter. Logs matching this query are included in the archive.
+	Query string            `json:"query"`
+	State *LogsArchiveState `json:"state,omitempty"`
+}
+
+// NewLogsArchiveAttributes instantiates a new LogsArchiveAttributes object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveAttributes(destination NullableLogsArchiveDestination, name string, query string) *LogsArchiveAttributes {
+	this := LogsArchiveAttributes{}
+	this.Destination = destination
+	this.Name = name
+	this.Query = query
+	return &this
+}
+
+// NewLogsArchiveAttributesWithDefaults instantiates a new LogsArchiveAttributes object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveAttributesWithDefaults() *LogsArchiveAttributes {
+	this := LogsArchiveAttributes{}
+	return &this
+}
+
+// GetDestination returns the Destination field value
+// If the value is explicit nil, the zero value for LogsArchiveDestination will be returned
+func (o *LogsArchiveAttributes) GetDestination() LogsArchiveDestination {
+	if o == nil || o.Destination.Get() == nil {
+		var ret LogsArchiveDestination
+		return ret
+	}
+
+	return *o.Destination.Get()
+}
+
+// GetDestinationOk returns a tuple with the Destination field value
+// and a boolean to check if the value has been set.
+// NOTE: If the value is an explicit nil, `nil, true` will be returned
+func (o *LogsArchiveAttributes) GetDestinationOk() (*LogsArchiveDestination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Destination.Get(), o.Destination.IsSet()
+}
+
+// SetDestination sets field value
+func (o *LogsArchiveAttributes) SetDestination(v LogsArchiveDestination) {
+	o.Destination.Set(&v)
+}
+
+// GetName returns the Name field value
+func (o *LogsArchiveAttributes) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveAttributes) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *LogsArchiveAttributes) SetName(v string) {
+	o.Name = v
+}
+
+// GetQuery returns the Query field value
+func (o *LogsArchiveAttributes) GetQuery() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Query
+}
+
+// GetQueryOk returns a tuple with the Query field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveAttributes) GetQueryOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Query, true
+}
+
+// SetQuery sets field value
+func (o *LogsArchiveAttributes) SetQuery(v string) {
+	o.Query = v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *LogsArchiveAttributes) GetState() LogsArchiveState {
+	if o == nil || o.State == nil {
+		var ret LogsArchiveState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveAttributes) GetStateOk() (*LogsArchiveState, bool) {
+	if o == nil || o.State == nil {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *LogsArchiveAttributes) HasState() bool {
+	if o != nil && o.State != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given LogsArchiveState and assigns it to the State field.
+func (o *LogsArchiveAttributes) SetState(v LogsArchiveState) {
+	o.State = &v
+}
+
+func (o LogsArchiveAttributes) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["destination"] = o.Destination.Get()
+	}
+	if true {
+		toSerialize["name"] = o.Name
+	}
+	if true {
+		toSerialize["query"] = o.Query
+	}
+	if o.State != nil {
+		toSerialize["state"] = o.State
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveAttributes struct {
+	value *LogsArchiveAttributes
+	isSet bool
+}
+
+func (v NullableLogsArchiveAttributes) Get() *LogsArchiveAttributes {
+	return v.value
+}
+
+func (v *NullableLogsArchiveAttributes) Set(val *LogsArchiveAttributes) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveAttributes) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveAttributes) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveAttributes(val *LogsArchiveAttributes) *NullableLogsArchiveAttributes {
+	return &NullableLogsArchiveAttributes{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveAttributes) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveAttributes) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_create_request.go b/api/v2/datadog/model_logs_archive_create_request.go
new file mode 100644
index 00000000000..b447aa48fb7
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_create_request.go
@@ -0,0 +1,111 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveCreateRequest The logs archive.
+type LogsArchiveCreateRequest struct {
+	Data *LogsArchiveCreateRequestDefinition `json:"data,omitempty"`
+}
+
+// NewLogsArchiveCreateRequest instantiates a new LogsArchiveCreateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveCreateRequest() *LogsArchiveCreateRequest {
+	this := LogsArchiveCreateRequest{}
+	return &this
+}
+
+// NewLogsArchiveCreateRequestWithDefaults instantiates a new LogsArchiveCreateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveCreateRequestWithDefaults() *LogsArchiveCreateRequest {
+	this := LogsArchiveCreateRequest{}
+	return &this
+}
+
+// GetData returns the Data field value if set, zero value otherwise.
+func (o *LogsArchiveCreateRequest) GetData() LogsArchiveCreateRequestDefinition {
+	if o == nil || o.Data == nil {
+		var ret LogsArchiveCreateRequestDefinition
+		return ret
+	}
+	return *o.Data
+}
+
+// GetDataOk returns a tuple with the Data field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequest) GetDataOk() (*LogsArchiveCreateRequestDefinition, bool) {
+	if o == nil || o.Data == nil {
+		return nil, false
+	}
+	return o.Data, true
+}
+
+// HasData returns a boolean if a field has been set.
+func (o *LogsArchiveCreateRequest) HasData() bool {
+	if o != nil && o.Data != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetData gets a reference to the given LogsArchiveCreateRequestDefinition and assigns it to the Data field.
+func (o *LogsArchiveCreateRequest) SetData(v LogsArchiveCreateRequestDefinition) {
+	o.Data = &v
+}
+
+func (o LogsArchiveCreateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Data != nil {
+		toSerialize["data"] = o.Data
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveCreateRequest struct {
+	value *LogsArchiveCreateRequest
+	isSet bool
+}
+
+func (v NullableLogsArchiveCreateRequest) Get() *LogsArchiveCreateRequest {
+	return v.value
+}
+
+func (v *NullableLogsArchiveCreateRequest) Set(val *LogsArchiveCreateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveCreateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveCreateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveCreateRequest(val *LogsArchiveCreateRequest) *NullableLogsArchiveCreateRequest {
+	return &NullableLogsArchiveCreateRequest{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveCreateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveCreateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_create_request_attributes.go b/api/v2/datadog/model_logs_archive_create_request_attributes.go
new file mode 100644
index 00000000000..9545c497919
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_create_request_attributes.go
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveCreateRequestAttributes The attributes associated with the archive.
+type LogsArchiveCreateRequestAttributes struct {
+	Destination LogsArchiveCreateRequestDestination `json:"destination"`
+	// The archive name.
+	Name string `json:"name"`
+	// The archive query/filter. Logs matching this query are included in the archive.
+	Query string `json:"query"`
+}
+
+// NewLogsArchiveCreateRequestAttributes instantiates a new LogsArchiveCreateRequestAttributes object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveCreateRequestAttributes(destination LogsArchiveCreateRequestDestination, name string, query string) *LogsArchiveCreateRequestAttributes {
+	this := LogsArchiveCreateRequestAttributes{}
+	this.Destination = destination
+	this.Name = name
+	this.Query = query
+	return &this
+}
+
+// NewLogsArchiveCreateRequestAttributesWithDefaults instantiates a new LogsArchiveCreateRequestAttributes object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveCreateRequestAttributesWithDefaults() *LogsArchiveCreateRequestAttributes {
+	this := LogsArchiveCreateRequestAttributes{}
+	return &this
+}
+
+// GetDestination returns the Destination field value
+func (o *LogsArchiveCreateRequestAttributes) GetDestination() LogsArchiveCreateRequestDestination {
+	if o == nil {
+		var ret LogsArchiveCreateRequestDestination
+		return ret
+	}
+
+	return o.Destination
+}
+
+// GetDestinationOk returns a tuple with the Destination field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequestAttributes) GetDestinationOk() (*LogsArchiveCreateRequestDestination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Destination, true
+}
+
+// SetDestination sets field value
+func (o *LogsArchiveCreateRequestAttributes) SetDestination(v LogsArchiveCreateRequestDestination) {
+	o.Destination = v
+}
+
+// GetName returns the Name field value
+func (o *LogsArchiveCreateRequestAttributes) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequestAttributes) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *LogsArchiveCreateRequestAttributes) SetName(v string) {
+	o.Name = v
+}
+
+// GetQuery returns the Query field value
+func (o *LogsArchiveCreateRequestAttributes) GetQuery() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Query
+}
+
+// GetQueryOk returns a tuple with the Query field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequestAttributes) GetQueryOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Query, true
+}
+
+// SetQuery sets field value
+func (o *LogsArchiveCreateRequestAttributes) SetQuery(v string) {
+	o.Query = v
+}
+
+func (o LogsArchiveCreateRequestAttributes) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["destination"] = o.Destination
+	}
+	if true {
+		toSerialize["name"] = o.Name
+	}
+	if true {
+		toSerialize["query"] = o.Query
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveCreateRequestAttributes struct {
+	value *LogsArchiveCreateRequestAttributes
+	isSet bool
+}
+
+func (v NullableLogsArchiveCreateRequestAttributes) Get() *LogsArchiveCreateRequestAttributes {
+	return v.value
+}
+
+func (v *NullableLogsArchiveCreateRequestAttributes) Set(val *LogsArchiveCreateRequestAttributes) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveCreateRequestAttributes) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveCreateRequestAttributes) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveCreateRequestAttributes(val *LogsArchiveCreateRequestAttributes) *NullableLogsArchiveCreateRequestAttributes {
+	return &NullableLogsArchiveCreateRequestAttributes{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveCreateRequestAttributes) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveCreateRequestAttributes) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_create_request_definition.go b/api/v2/datadog/model_logs_archive_create_request_definition.go
new file mode 100644
index 00000000000..816e13f27f5
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_create_request_definition.go
@@ -0,0 +1,143 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveCreateRequestDefinition The definition of an archive.
+type LogsArchiveCreateRequestDefinition struct {
+	Attributes *LogsArchiveCreateRequestAttributes `json:"attributes,omitempty"`
+	// The type of the resource. The value should always be archives.
+	Type string `json:"type"`
+}
+
+// NewLogsArchiveCreateRequestDefinition instantiates a new LogsArchiveCreateRequestDefinition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveCreateRequestDefinition(type_ string) *LogsArchiveCreateRequestDefinition {
+	this := LogsArchiveCreateRequestDefinition{}
+	this.Type = type_
+	return &this
+}
+
+// NewLogsArchiveCreateRequestDefinitionWithDefaults instantiates a new LogsArchiveCreateRequestDefinition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveCreateRequestDefinitionWithDefaults() *LogsArchiveCreateRequestDefinition {
+	this := LogsArchiveCreateRequestDefinition{}
+	var type_ string = "archives"
+	this.Type = type_
+	return &this
+}
+
+// GetAttributes returns the Attributes field value if set, zero value otherwise.
+func (o *LogsArchiveCreateRequestDefinition) GetAttributes() LogsArchiveCreateRequestAttributes {
+	if o == nil || o.Attributes == nil {
+		var ret LogsArchiveCreateRequestAttributes
+		return ret
+	}
+	return *o.Attributes
+}
+
+// GetAttributesOk returns a tuple with the Attributes field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequestDefinition) GetAttributesOk() (*LogsArchiveCreateRequestAttributes, bool) {
+	if o == nil || o.Attributes == nil {
+		return nil, false
+	}
+	return o.Attributes, true
+}
+
+// HasAttributes returns a boolean if a field has been set.
+func (o *LogsArchiveCreateRequestDefinition) HasAttributes() bool {
+	if o != nil && o.Attributes != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetAttributes gets a reference to the given LogsArchiveCreateRequestAttributes and assigns it to the Attributes field.
+func (o *LogsArchiveCreateRequestDefinition) SetAttributes(v LogsArchiveCreateRequestAttributes) {
+	o.Attributes = &v
+}
+
+// GetType returns the Type field value
+func (o *LogsArchiveCreateRequestDefinition) GetType() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveCreateRequestDefinition) GetTypeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *LogsArchiveCreateRequestDefinition) SetType(v string) {
+	o.Type = v
+}
+
+func (o LogsArchiveCreateRequestDefinition) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Attributes != nil {
+		toSerialize["attributes"] = o.Attributes
+	}
+	if true {
+		toSerialize["type"] = o.Type
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveCreateRequestDefinition struct {
+	value *LogsArchiveCreateRequestDefinition
+	isSet bool
+}
+
+func (v NullableLogsArchiveCreateRequestDefinition) Get() *LogsArchiveCreateRequestDefinition {
+	return v.value
+}
+
+func (v *NullableLogsArchiveCreateRequestDefinition) Set(val *LogsArchiveCreateRequestDefinition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveCreateRequestDefinition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveCreateRequestDefinition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveCreateRequestDefinition(val *LogsArchiveCreateRequestDefinition) *NullableLogsArchiveCreateRequestDefinition {
+	return &NullableLogsArchiveCreateRequestDefinition{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveCreateRequestDefinition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveCreateRequestDefinition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_create_request_destination.go b/api/v2/datadog/model_logs_archive_create_request_destination.go
new file mode 100644
index 00000000000..4bb30f6c263
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_create_request_destination.go
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveCreateRequestDestination - An archive's destination.
+type LogsArchiveCreateRequestDestination struct {
+	LogsArchiveDestinationAzure *LogsArchiveDestinationAzure
+	LogsArchiveDestinationGCS   *LogsArchiveDestinationGCS
+	LogsArchiveDestinationS3    *LogsArchiveDestinationS3
+}
+
+// LogsArchiveDestinationAzureAsLogsArchiveCreateRequestDestination is a convenience function that returns LogsArchiveDestinationAzure wrapped in LogsArchiveCreateRequestDestination
+func LogsArchiveDestinationAzureAsLogsArchiveCreateRequestDestination(v *LogsArchiveDestinationAzure) LogsArchiveCreateRequestDestination {
+	return LogsArchiveCreateRequestDestination{LogsArchiveDestinationAzure: v}
+}
+
+// LogsArchiveDestinationGCSAsLogsArchiveCreateRequestDestination is a convenience function that returns LogsArchiveDestinationGCS wrapped in LogsArchiveCreateRequestDestination
+func LogsArchiveDestinationGCSAsLogsArchiveCreateRequestDestination(v *LogsArchiveDestinationGCS) LogsArchiveCreateRequestDestination {
+	return LogsArchiveCreateRequestDestination{LogsArchiveDestinationGCS: v}
+}
+
+// LogsArchiveDestinationS3AsLogsArchiveCreateRequestDestination is a convenience function that returns LogsArchiveDestinationS3 wrapped in LogsArchiveCreateRequestDestination
+func LogsArchiveDestinationS3AsLogsArchiveCreateRequestDestination(v *LogsArchiveDestinationS3) LogsArchiveCreateRequestDestination {
+	return LogsArchiveCreateRequestDestination{LogsArchiveDestinationS3: v}
+}
+
+// Unmarshal JSON data into one of the pointers in the struct
+func (dst *LogsArchiveCreateRequestDestination) UnmarshalJSON(data []byte) error {
+	var err error
+	match := 0
+	// try to unmarshal data into LogsArchiveDestinationAzure
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationAzure)
+	if err == nil {
+		jsonLogsArchiveDestinationAzure, _ := json.Marshal(dst.LogsArchiveDestinationAzure)
+		if string(jsonLogsArchiveDestinationAzure) == "{}" { // empty struct
+			dst.LogsArchiveDestinationAzure = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationAzure = nil
+	}
+
+	// try to unmarshal data into LogsArchiveDestinationGCS
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationGCS)
+	if err == nil {
+		jsonLogsArchiveDestinationGCS, _ := json.Marshal(dst.LogsArchiveDestinationGCS)
+		if string(jsonLogsArchiveDestinationGCS) == "{}" { // empty struct
+			dst.LogsArchiveDestinationGCS = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationGCS = nil
+	}
+
+	// try to unmarshal data into LogsArchiveDestinationS3
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationS3)
+	if err == nil {
+		jsonLogsArchiveDestinationS3, _ := json.Marshal(dst.LogsArchiveDestinationS3)
+		if string(jsonLogsArchiveDestinationS3) == "{}" { // empty struct
+			dst.LogsArchiveDestinationS3 = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationS3 = nil
+	}
+
+	if match > 1 { // more than 1 match
+		// reset to nil
+		dst.LogsArchiveDestinationAzure = nil
+		dst.LogsArchiveDestinationGCS = nil
+		dst.LogsArchiveDestinationS3 = nil
+
+		return fmt.Errorf("Data matches more than one schema in oneOf(LogsArchiveCreateRequestDestination)")
+	} else if match == 1 {
+		return nil // exactly one match
+	} else { // no match
+		return fmt.Errorf("Data failed to match schemas in oneOf(LogsArchiveCreateRequestDestination)")
+	}
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src LogsArchiveCreateRequestDestination) MarshalJSON() ([]byte, error) {
+	if src.LogsArchiveDestinationAzure != nil {
+		return json.Marshal(&src.LogsArchiveDestinationAzure)
+	}
+
+	if src.LogsArchiveDestinationGCS != nil {
+		return json.Marshal(&src.LogsArchiveDestinationGCS)
+	}
+
+	if src.LogsArchiveDestinationS3 != nil {
+		return json.Marshal(&src.LogsArchiveDestinationS3)
+	}
+
+	return nil, nil // no data in oneOf schemas
+}
+
+// Get the actual instance
+func (obj *LogsArchiveCreateRequestDestination) GetActualInstance() interface{} {
+	if obj.LogsArchiveDestinationAzure != nil {
+		return obj.LogsArchiveDestinationAzure
+	}
+
+	if obj.LogsArchiveDestinationGCS != nil {
+		return obj.LogsArchiveDestinationGCS
+	}
+
+	if obj.LogsArchiveDestinationS3 != nil {
+		return obj.LogsArchiveDestinationS3
+	}
+
+	// all schemas are nil
+	return nil
+}
+
+type NullableLogsArchiveCreateRequestDestination struct {
+	value *LogsArchiveCreateRequestDestination
+	isSet bool
+}
+
+func (v NullableLogsArchiveCreateRequestDestination) Get() *LogsArchiveCreateRequestDestination {
+	return v.value
+}
+
+func (v *NullableLogsArchiveCreateRequestDestination) Set(val *LogsArchiveCreateRequestDestination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveCreateRequestDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveCreateRequestDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveCreateRequestDestination(val *LogsArchiveCreateRequestDestination) *NullableLogsArchiveCreateRequestDestination {
+	return &NullableLogsArchiveCreateRequestDestination{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveCreateRequestDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveCreateRequestDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_definition.go b/api/v2/datadog/model_logs_archive_definition.go
new file mode 100644
index 00000000000..006d3fba6d2
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_definition.go
@@ -0,0 +1,180 @@
+/*
+ * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
+ * Copyright 2019-Present Datadog, Inc.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveDefinition The definition of an archive.
+type LogsArchiveDefinition struct {
+	Attributes *LogsArchiveAttributes `json:"attributes,omitempty"`
+	// The archive ID.
+	Id *string `json:"id,omitempty"`
+	// The type of the resource. The value should always be archives.
+	Type string `json:"type"`
+}
+
+// NewLogsArchiveDefinition instantiates a new LogsArchiveDefinition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveDefinition(type_ string) *LogsArchiveDefinition {
+	this := LogsArchiveDefinition{}
+	this.Type = type_
+	return &this
+}
+
+// NewLogsArchiveDefinitionWithDefaults instantiates a new LogsArchiveDefinition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveDefinitionWithDefaults() *LogsArchiveDefinition {
+	this := LogsArchiveDefinition{}
+	var type_ string = "archives"
+	this.Type = type_
+	return &this
+}
+
+// GetAttributes returns the Attributes field value if set, zero value otherwise.
+func (o *LogsArchiveDefinition) GetAttributes() LogsArchiveAttributes {
+	if o == nil || o.Attributes == nil {
+		var ret LogsArchiveAttributes
+		return ret
+	}
+	return *o.Attributes
+}
+
+// GetAttributesOk returns a tuple with the Attributes field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDefinition) GetAttributesOk() (*LogsArchiveAttributes, bool) {
+	if o == nil || o.Attributes == nil {
+		return nil, false
+	}
+	return o.Attributes, true
+}
+
+// HasAttributes returns a boolean if a field has been set.
+func (o *LogsArchiveDefinition) HasAttributes() bool {
+	if o != nil && o.Attributes != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetAttributes gets a reference to the given LogsArchiveAttributes and assigns it to the Attributes field.
+func (o *LogsArchiveDefinition) SetAttributes(v LogsArchiveAttributes) {
+	o.Attributes = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *LogsArchiveDefinition) GetId() string {
+	if o == nil || o.Id == nil {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDefinition) GetIdOk() (*string, bool) {
+	if o == nil || o.Id == nil {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *LogsArchiveDefinition) HasId() bool {
+	if o != nil && o.Id != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *LogsArchiveDefinition) SetId(v string) {
+	o.Id = &v
+}
+
+// GetType returns the Type field value
+func (o *LogsArchiveDefinition) GetType() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDefinition) GetTypeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *LogsArchiveDefinition) SetType(v string) {
+	o.Type = v
+}
+
+func (o LogsArchiveDefinition) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Attributes != nil {
+		toSerialize["attributes"] = o.Attributes
+	}
+	if o.Id != nil {
+		toSerialize["id"] = o.Id
+	}
+	if true {
+		toSerialize["type"] = o.Type
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveDefinition struct {
+	value *LogsArchiveDefinition
+	isSet bool
+}
+
+func (v NullableLogsArchiveDefinition) Get() *LogsArchiveDefinition {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDefinition) Set(val *LogsArchiveDefinition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDefinition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDefinition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDefinition(val *LogsArchiveDefinition) *NullableLogsArchiveDefinition {
+	return &NullableLogsArchiveDefinition{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDefinition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDefinition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination.go b/api/v2/datadog/model_logs_archive_destination.go
new file mode 100644
index 00000000000..0527064d632
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination.go
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveDestination - An archive's destination.
+type LogsArchiveDestination struct {
+	LogsArchiveDestinationAzure *LogsArchiveDestinationAzure
+	LogsArchiveDestinationGCS   *LogsArchiveDestinationGCS
+	LogsArchiveDestinationS3    *LogsArchiveDestinationS3
+}
+
+// LogsArchiveDestinationAzureAsLogsArchiveDestination is a convenience function that returns LogsArchiveDestinationAzure wrapped in LogsArchiveDestination
+func LogsArchiveDestinationAzureAsLogsArchiveDestination(v *LogsArchiveDestinationAzure) LogsArchiveDestination {
+	return LogsArchiveDestination{LogsArchiveDestinationAzure: v}
+}
+
+// LogsArchiveDestinationGCSAsLogsArchiveDestination is a convenience function that returns LogsArchiveDestinationGCS wrapped in LogsArchiveDestination
+func LogsArchiveDestinationGCSAsLogsArchiveDestination(v *LogsArchiveDestinationGCS) LogsArchiveDestination {
+	return LogsArchiveDestination{LogsArchiveDestinationGCS: v}
+}
+
+// LogsArchiveDestinationS3AsLogsArchiveDestination is a convenience function that returns LogsArchiveDestinationS3 wrapped in LogsArchiveDestination
+func LogsArchiveDestinationS3AsLogsArchiveDestination(v *LogsArchiveDestinationS3) LogsArchiveDestination {
+	return LogsArchiveDestination{LogsArchiveDestinationS3: v}
+}
+
+// Unmarshal JSON data into one of the pointers in the struct
+func (dst *LogsArchiveDestination) UnmarshalJSON(data []byte) error {
+	var err error
+	match := 0
+	// try to unmarshal data into LogsArchiveDestinationAzure
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationAzure)
+	if err == nil {
+		jsonLogsArchiveDestinationAzure, _ := json.Marshal(dst.LogsArchiveDestinationAzure)
+		if string(jsonLogsArchiveDestinationAzure) == "{}" { // empty struct
+			dst.LogsArchiveDestinationAzure = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationAzure = nil
+	}
+
+	// try to unmarshal data into LogsArchiveDestinationGCS
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationGCS)
+	if err == nil {
+		jsonLogsArchiveDestinationGCS, _ := json.Marshal(dst.LogsArchiveDestinationGCS)
+		if string(jsonLogsArchiveDestinationGCS) == "{}" { // empty struct
+			dst.LogsArchiveDestinationGCS = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationGCS = nil
+	}
+
+	// try to unmarshal data into LogsArchiveDestinationS3
+	err = json.Unmarshal(data, &dst.LogsArchiveDestinationS3)
+	if err == nil {
+		jsonLogsArchiveDestinationS3, _ := json.Marshal(dst.LogsArchiveDestinationS3)
+		if string(jsonLogsArchiveDestinationS3) == "{}" { // empty struct
+			dst.LogsArchiveDestinationS3 = nil
+		} else {
+			match++
+		}
+	} else {
+		dst.LogsArchiveDestinationS3 = nil
+	}
+
+	if match > 1 { // more than 1 match
+		// reset to nil
+		dst.LogsArchiveDestinationAzure = nil
+		dst.LogsArchiveDestinationGCS = nil
+		dst.LogsArchiveDestinationS3 = nil
+
+		return fmt.Errorf("Data matches more than one schema in oneOf(LogsArchiveDestination)")
+	} else if match == 1 {
+		return nil // exactly one match
+	} else { // no match
+		return fmt.Errorf("Data failed to match schemas in oneOf(LogsArchiveDestination)")
+	}
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src LogsArchiveDestination) MarshalJSON() ([]byte, error) {
+	if src.LogsArchiveDestinationAzure != nil {
+		return json.Marshal(&src.LogsArchiveDestinationAzure)
+	}
+
+	if src.LogsArchiveDestinationGCS != nil {
+		return json.Marshal(&src.LogsArchiveDestinationGCS)
+	}
+
+	if src.LogsArchiveDestinationS3 != nil {
+		return json.Marshal(&src.LogsArchiveDestinationS3)
+	}
+
+	return nil, nil // no data in oneOf schemas
+}
+
+// Get the actual instance
+func (obj *LogsArchiveDestination) GetActualInstance() interface{} {
+	if obj.LogsArchiveDestinationAzure != nil {
+		return obj.LogsArchiveDestinationAzure
+	}
+
+	if obj.LogsArchiveDestinationGCS != nil {
+		return obj.LogsArchiveDestinationGCS
+	}
+
+	if obj.LogsArchiveDestinationS3 != nil {
+		return obj.LogsArchiveDestinationS3
+	}
+
+	// all schemas are nil
+	return nil
+}
+
+type NullableLogsArchiveDestination struct {
+	value *LogsArchiveDestination
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestination) Get() *LogsArchiveDestination {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestination) Set(val *LogsArchiveDestination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestination(val *LogsArchiveDestination) *NullableLogsArchiveDestination {
+	return &NullableLogsArchiveDestination{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_azure.go b/api/v2/datadog/model_logs_archive_destination_azure.go
new file mode 100644
index 00000000000..ecf713f80a1
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_azure.go
@@ -0,0 +1,269 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveDestinationAzure The Azure archive destination.
+type LogsArchiveDestinationAzure struct {
+	// The container where the archive will be stored.
+	Container   string                      `json:"container"`
+	Integration LogsArchiveIntegrationAzure `json:"integration"`
+	// The archive path.
+	Path *string `json:"path,omitempty"`
+	// The region where the archive will be stored.
+	Region *string `json:"region,omitempty"`
+	// The associated storage account.
+	StorageAccount string                          `json:"storage_account"`
+	Type           LogsArchiveDestinationAzureType `json:"type"`
+}
+
+// NewLogsArchiveDestinationAzure instantiates a new LogsArchiveDestinationAzure object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveDestinationAzure(container string, integration LogsArchiveIntegrationAzure, storageAccount string, type_ LogsArchiveDestinationAzureType) *LogsArchiveDestinationAzure {
+	this := LogsArchiveDestinationAzure{}
+	this.Container = container
+	this.Integration = integration
+	this.StorageAccount = storageAccount
+	this.Type = type_
+	return &this
+}
+
+// NewLogsArchiveDestinationAzureWithDefaults instantiates a new LogsArchiveDestinationAzure object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveDestinationAzureWithDefaults() *LogsArchiveDestinationAzure {
+	this := LogsArchiveDestinationAzure{}
+	var type_ LogsArchiveDestinationAzureType = "azure"
+	this.Type = type_
+	return &this
+}
+
+// GetContainer returns the Container field value
+func (o *LogsArchiveDestinationAzure) GetContainer() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Container
+}
+
+// GetContainerOk returns a tuple with the Container field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetContainerOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Container, true
+}
+
+// SetContainer sets field value
+func (o *LogsArchiveDestinationAzure) SetContainer(v string) {
+	o.Container = v
+}
+
+// GetIntegration returns the Integration field value
+func (o *LogsArchiveDestinationAzure) GetIntegration() LogsArchiveIntegrationAzure {
+	if o == nil {
+		var ret LogsArchiveIntegrationAzure
+		return ret
+	}
+
+	return o.Integration
+}
+
+// GetIntegrationOk returns a tuple with the Integration field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetIntegrationOk() (*LogsArchiveIntegrationAzure, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Integration, true
+}
+
+// SetIntegration sets field value
+func (o *LogsArchiveDestinationAzure) SetIntegration(v LogsArchiveIntegrationAzure) {
+	o.Integration = v
+}
+
+// GetPath returns the Path field value if set, zero value otherwise.
+func (o *LogsArchiveDestinationAzure) GetPath() string {
+	if o == nil || o.Path == nil {
+		var ret string
+		return ret
+	}
+	return *o.Path
+}
+
+// GetPathOk returns a tuple with the Path field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetPathOk() (*string, bool) {
+	if o == nil || o.Path == nil {
+		return nil, false
+	}
+	return o.Path, true
+}
+
+// HasPath returns a boolean if a field has been set.
+func (o *LogsArchiveDestinationAzure) HasPath() bool {
+	if o != nil && o.Path != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetPath gets a reference to the given string and assigns it to the Path field.
+func (o *LogsArchiveDestinationAzure) SetPath(v string) {
+	o.Path = &v
+}
+
+// GetRegion returns the Region field value if set, zero value otherwise.
+func (o *LogsArchiveDestinationAzure) GetRegion() string {
+	if o == nil || o.Region == nil {
+		var ret string
+		return ret
+	}
+	return *o.Region
+}
+
+// GetRegionOk returns a tuple with the Region field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetRegionOk() (*string, bool) {
+	if o == nil || o.Region == nil {
+		return nil, false
+	}
+	return o.Region, true
+}
+
+// HasRegion returns a boolean if a field has been set.
+func (o *LogsArchiveDestinationAzure) HasRegion() bool {
+	if o != nil && o.Region != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetRegion gets a reference to the given string and assigns it to the Region field.
+func (o *LogsArchiveDestinationAzure) SetRegion(v string) {
+	o.Region = &v
+}
+
+// GetStorageAccount returns the StorageAccount field value
+func (o *LogsArchiveDestinationAzure) GetStorageAccount() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.StorageAccount
+}
+
+// GetStorageAccountOk returns a tuple with the StorageAccount field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetStorageAccountOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.StorageAccount, true
+}
+
+// SetStorageAccount sets field value
+func (o *LogsArchiveDestinationAzure) SetStorageAccount(v string) {
+	o.StorageAccount = v
+}
+
+// GetType returns the Type field value
+func (o *LogsArchiveDestinationAzure) GetType() LogsArchiveDestinationAzureType {
+	if o == nil {
+		var ret LogsArchiveDestinationAzureType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationAzure) GetTypeOk() (*LogsArchiveDestinationAzureType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *LogsArchiveDestinationAzure) SetType(v LogsArchiveDestinationAzureType) {
+	o.Type = v
+}
+
+func (o LogsArchiveDestinationAzure) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["container"] = o.Container
+	}
+	if true {
+		toSerialize["integration"] = o.Integration
+	}
+	if o.Path != nil {
+		toSerialize["path"] = o.Path
+	}
+	if o.Region != nil {
+		toSerialize["region"] = o.Region
+	}
+	if true {
+		toSerialize["storage_account"] = o.StorageAccount
+	}
+	if true {
+		toSerialize["type"] = o.Type
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveDestinationAzure struct {
+	value *LogsArchiveDestinationAzure
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationAzure) Get() *LogsArchiveDestinationAzure {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationAzure) Set(val *LogsArchiveDestinationAzure) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationAzure) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationAzure) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationAzure(val *LogsArchiveDestinationAzure) *NullableLogsArchiveDestinationAzure {
+	return &NullableLogsArchiveDestinationAzure{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationAzure) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationAzure) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_azure_type.go b/api/v2/datadog/model_logs_archive_destination_azure_type.go
new file mode 100644
index 00000000000..f99301bfa8c
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_azure_type.go
@@ -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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveDestinationAzureType Type of the Azure archive destination.
+type LogsArchiveDestinationAzureType string
+
+// List of LogsArchiveDestinationAzureType
+const (
+	LOGSARCHIVEDESTINATIONAZURETYPE_AZURE LogsArchiveDestinationAzureType = "azure"
+)
+
+func (v *LogsArchiveDestinationAzureType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := LogsArchiveDestinationAzureType(value)
+	for _, existing := range []LogsArchiveDestinationAzureType{"azure"} {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid LogsArchiveDestinationAzureType", *v)
+}
+
+// Ptr returns reference to LogsArchiveDestinationAzureType value
+func (v LogsArchiveDestinationAzureType) Ptr() *LogsArchiveDestinationAzureType {
+	return &v
+}
+
+type NullableLogsArchiveDestinationAzureType struct {
+	value *LogsArchiveDestinationAzureType
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationAzureType) Get() *LogsArchiveDestinationAzureType {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationAzureType) Set(val *LogsArchiveDestinationAzureType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationAzureType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationAzureType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationAzureType(val *LogsArchiveDestinationAzureType) *NullableLogsArchiveDestinationAzureType {
+	return &NullableLogsArchiveDestinationAzureType{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationAzureType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationAzureType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_gcs.go b/api/v2/datadog/model_logs_archive_destination_gcs.go
new file mode 100644
index 00000000000..840dad6968c
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_gcs.go
@@ -0,0 +1,202 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveDestinationGCS The GCS archive destination.
+type LogsArchiveDestinationGCS struct {
+	// The bucket where the archive will be stored.
+	Bucket      string                    `json:"bucket"`
+	Integration LogsArchiveIntegrationGCS `json:"integration"`
+	// The archive path.
+	Path *string                       `json:"path,omitempty"`
+	Type LogsArchiveDestinationGCSType `json:"type"`
+}
+
+// NewLogsArchiveDestinationGCS instantiates a new LogsArchiveDestinationGCS object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveDestinationGCS(bucket string, integration LogsArchiveIntegrationGCS, type_ LogsArchiveDestinationGCSType) *LogsArchiveDestinationGCS {
+	this := LogsArchiveDestinationGCS{}
+	this.Bucket = bucket
+	this.Integration = integration
+	this.Type = type_
+	return &this
+}
+
+// NewLogsArchiveDestinationGCSWithDefaults instantiates a new LogsArchiveDestinationGCS object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveDestinationGCSWithDefaults() *LogsArchiveDestinationGCS {
+	this := LogsArchiveDestinationGCS{}
+	var type_ LogsArchiveDestinationGCSType = "gcs"
+	this.Type = type_
+	return &this
+}
+
+// GetBucket returns the Bucket field value
+func (o *LogsArchiveDestinationGCS) GetBucket() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Bucket
+}
+
+// GetBucketOk returns a tuple with the Bucket field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationGCS) GetBucketOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Bucket, true
+}
+
+// SetBucket sets field value
+func (o *LogsArchiveDestinationGCS) SetBucket(v string) {
+	o.Bucket = v
+}
+
+// GetIntegration returns the Integration field value
+func (o *LogsArchiveDestinationGCS) GetIntegration() LogsArchiveIntegrationGCS {
+	if o == nil {
+		var ret LogsArchiveIntegrationGCS
+		return ret
+	}
+
+	return o.Integration
+}
+
+// GetIntegrationOk returns a tuple with the Integration field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationGCS) GetIntegrationOk() (*LogsArchiveIntegrationGCS, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Integration, true
+}
+
+// SetIntegration sets field value
+func (o *LogsArchiveDestinationGCS) SetIntegration(v LogsArchiveIntegrationGCS) {
+	o.Integration = v
+}
+
+// GetPath returns the Path field value if set, zero value otherwise.
+func (o *LogsArchiveDestinationGCS) GetPath() string {
+	if o == nil || o.Path == nil {
+		var ret string
+		return ret
+	}
+	return *o.Path
+}
+
+// GetPathOk returns a tuple with the Path field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationGCS) GetPathOk() (*string, bool) {
+	if o == nil || o.Path == nil {
+		return nil, false
+	}
+	return o.Path, true
+}
+
+// HasPath returns a boolean if a field has been set.
+func (o *LogsArchiveDestinationGCS) HasPath() bool {
+	if o != nil && o.Path != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetPath gets a reference to the given string and assigns it to the Path field.
+func (o *LogsArchiveDestinationGCS) SetPath(v string) {
+	o.Path = &v
+}
+
+// GetType returns the Type field value
+func (o *LogsArchiveDestinationGCS) GetType() LogsArchiveDestinationGCSType {
+	if o == nil {
+		var ret LogsArchiveDestinationGCSType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationGCS) GetTypeOk() (*LogsArchiveDestinationGCSType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *LogsArchiveDestinationGCS) SetType(v LogsArchiveDestinationGCSType) {
+	o.Type = v
+}
+
+func (o LogsArchiveDestinationGCS) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["bucket"] = o.Bucket
+	}
+	if true {
+		toSerialize["integration"] = o.Integration
+	}
+	if o.Path != nil {
+		toSerialize["path"] = o.Path
+	}
+	if true {
+		toSerialize["type"] = o.Type
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveDestinationGCS struct {
+	value *LogsArchiveDestinationGCS
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationGCS) Get() *LogsArchiveDestinationGCS {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationGCS) Set(val *LogsArchiveDestinationGCS) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationGCS) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationGCS) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationGCS(val *LogsArchiveDestinationGCS) *NullableLogsArchiveDestinationGCS {
+	return &NullableLogsArchiveDestinationGCS{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationGCS) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationGCS) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_gcs_type.go b/api/v2/datadog/model_logs_archive_destination_gcs_type.go
new file mode 100644
index 00000000000..e83913c3a43
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_gcs_type.go
@@ -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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveDestinationGCSType Type of the GCS archive destination.
+type LogsArchiveDestinationGCSType string
+
+// List of LogsArchiveDestinationGCSType
+const (
+	LOGSARCHIVEDESTINATIONGCSTYPE_GCS LogsArchiveDestinationGCSType = "gcs"
+)
+
+func (v *LogsArchiveDestinationGCSType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := LogsArchiveDestinationGCSType(value)
+	for _, existing := range []LogsArchiveDestinationGCSType{"gcs"} {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid LogsArchiveDestinationGCSType", *v)
+}
+
+// Ptr returns reference to LogsArchiveDestinationGCSType value
+func (v LogsArchiveDestinationGCSType) Ptr() *LogsArchiveDestinationGCSType {
+	return &v
+}
+
+type NullableLogsArchiveDestinationGCSType struct {
+	value *LogsArchiveDestinationGCSType
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationGCSType) Get() *LogsArchiveDestinationGCSType {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationGCSType) Set(val *LogsArchiveDestinationGCSType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationGCSType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationGCSType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationGCSType(val *LogsArchiveDestinationGCSType) *NullableLogsArchiveDestinationGCSType {
+	return &NullableLogsArchiveDestinationGCSType{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationGCSType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationGCSType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_s3.go b/api/v2/datadog/model_logs_archive_destination_s3.go
new file mode 100644
index 00000000000..6465a294b7e
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_s3.go
@@ -0,0 +1,202 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveDestinationS3 The S3 archive destination.
+type LogsArchiveDestinationS3 struct {
+	// The bucket where the archive will be stored.
+	Bucket      string                   `json:"bucket"`
+	Integration LogsArchiveIntegrationS3 `json:"integration"`
+	// The archive path.
+	Path *string                      `json:"path,omitempty"`
+	Type LogsArchiveDestinationS3Type `json:"type"`
+}
+
+// NewLogsArchiveDestinationS3 instantiates a new LogsArchiveDestinationS3 object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveDestinationS3(bucket string, integration LogsArchiveIntegrationS3, type_ LogsArchiveDestinationS3Type) *LogsArchiveDestinationS3 {
+	this := LogsArchiveDestinationS3{}
+	this.Bucket = bucket
+	this.Integration = integration
+	this.Type = type_
+	return &this
+}
+
+// NewLogsArchiveDestinationS3WithDefaults instantiates a new LogsArchiveDestinationS3 object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveDestinationS3WithDefaults() *LogsArchiveDestinationS3 {
+	this := LogsArchiveDestinationS3{}
+	var type_ LogsArchiveDestinationS3Type = "s3"
+	this.Type = type_
+	return &this
+}
+
+// GetBucket returns the Bucket field value
+func (o *LogsArchiveDestinationS3) GetBucket() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Bucket
+}
+
+// GetBucketOk returns a tuple with the Bucket field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationS3) GetBucketOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Bucket, true
+}
+
+// SetBucket sets field value
+func (o *LogsArchiveDestinationS3) SetBucket(v string) {
+	o.Bucket = v
+}
+
+// GetIntegration returns the Integration field value
+func (o *LogsArchiveDestinationS3) GetIntegration() LogsArchiveIntegrationS3 {
+	if o == nil {
+		var ret LogsArchiveIntegrationS3
+		return ret
+	}
+
+	return o.Integration
+}
+
+// GetIntegrationOk returns a tuple with the Integration field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationS3) GetIntegrationOk() (*LogsArchiveIntegrationS3, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Integration, true
+}
+
+// SetIntegration sets field value
+func (o *LogsArchiveDestinationS3) SetIntegration(v LogsArchiveIntegrationS3) {
+	o.Integration = v
+}
+
+// GetPath returns the Path field value if set, zero value otherwise.
+func (o *LogsArchiveDestinationS3) GetPath() string {
+	if o == nil || o.Path == nil {
+		var ret string
+		return ret
+	}
+	return *o.Path
+}
+
+// GetPathOk returns a tuple with the Path field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationS3) GetPathOk() (*string, bool) {
+	if o == nil || o.Path == nil {
+		return nil, false
+	}
+	return o.Path, true
+}
+
+// HasPath returns a boolean if a field has been set.
+func (o *LogsArchiveDestinationS3) HasPath() bool {
+	if o != nil && o.Path != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetPath gets a reference to the given string and assigns it to the Path field.
+func (o *LogsArchiveDestinationS3) SetPath(v string) {
+	o.Path = &v
+}
+
+// GetType returns the Type field value
+func (o *LogsArchiveDestinationS3) GetType() LogsArchiveDestinationS3Type {
+	if o == nil {
+		var ret LogsArchiveDestinationS3Type
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveDestinationS3) GetTypeOk() (*LogsArchiveDestinationS3Type, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *LogsArchiveDestinationS3) SetType(v LogsArchiveDestinationS3Type) {
+	o.Type = v
+}
+
+func (o LogsArchiveDestinationS3) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["bucket"] = o.Bucket
+	}
+	if true {
+		toSerialize["integration"] = o.Integration
+	}
+	if o.Path != nil {
+		toSerialize["path"] = o.Path
+	}
+	if true {
+		toSerialize["type"] = o.Type
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveDestinationS3 struct {
+	value *LogsArchiveDestinationS3
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationS3) Get() *LogsArchiveDestinationS3 {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationS3) Set(val *LogsArchiveDestinationS3) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationS3) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationS3) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationS3(val *LogsArchiveDestinationS3) *NullableLogsArchiveDestinationS3 {
+	return &NullableLogsArchiveDestinationS3{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationS3) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationS3) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_destination_s3_type.go b/api/v2/datadog/model_logs_archive_destination_s3_type.go
new file mode 100644
index 00000000000..564c0dfe229
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_destination_s3_type.go
@@ -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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveDestinationS3Type Type of the S3 archive destination.
+type LogsArchiveDestinationS3Type string
+
+// List of LogsArchiveDestinationS3Type
+const (
+	LOGSARCHIVEDESTINATIONS3TYPE_S3 LogsArchiveDestinationS3Type = "s3"
+)
+
+func (v *LogsArchiveDestinationS3Type) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := LogsArchiveDestinationS3Type(value)
+	for _, existing := range []LogsArchiveDestinationS3Type{"s3"} {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid LogsArchiveDestinationS3Type", *v)
+}
+
+// Ptr returns reference to LogsArchiveDestinationS3Type value
+func (v LogsArchiveDestinationS3Type) Ptr() *LogsArchiveDestinationS3Type {
+	return &v
+}
+
+type NullableLogsArchiveDestinationS3Type struct {
+	value *LogsArchiveDestinationS3Type
+	isSet bool
+}
+
+func (v NullableLogsArchiveDestinationS3Type) Get() *LogsArchiveDestinationS3Type {
+	return v.value
+}
+
+func (v *NullableLogsArchiveDestinationS3Type) Set(val *LogsArchiveDestinationS3Type) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveDestinationS3Type) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveDestinationS3Type) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveDestinationS3Type(val *LogsArchiveDestinationS3Type) *NullableLogsArchiveDestinationS3Type {
+	return &NullableLogsArchiveDestinationS3Type{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveDestinationS3Type) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveDestinationS3Type) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_integration_azure.go b/api/v2/datadog/model_logs_archive_integration_azure.go
new file mode 100644
index 00000000000..c30abed4f71
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_integration_azure.go
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveIntegrationAzure The Azure archive's integration destination.
+type LogsArchiveIntegrationAzure struct {
+	// A client ID.
+	ClientId string `json:"client_id"`
+	// A tenant ID.
+	TenantId string `json:"tenant_id"`
+}
+
+// NewLogsArchiveIntegrationAzure instantiates a new LogsArchiveIntegrationAzure object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveIntegrationAzure(clientId string, tenantId string) *LogsArchiveIntegrationAzure {
+	this := LogsArchiveIntegrationAzure{}
+	this.ClientId = clientId
+	this.TenantId = tenantId
+	return &this
+}
+
+// NewLogsArchiveIntegrationAzureWithDefaults instantiates a new LogsArchiveIntegrationAzure object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveIntegrationAzureWithDefaults() *LogsArchiveIntegrationAzure {
+	this := LogsArchiveIntegrationAzure{}
+	return &this
+}
+
+// GetClientId returns the ClientId field value
+func (o *LogsArchiveIntegrationAzure) GetClientId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ClientId
+}
+
+// GetClientIdOk returns a tuple with the ClientId field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationAzure) GetClientIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ClientId, true
+}
+
+// SetClientId sets field value
+func (o *LogsArchiveIntegrationAzure) SetClientId(v string) {
+	o.ClientId = v
+}
+
+// GetTenantId returns the TenantId field value
+func (o *LogsArchiveIntegrationAzure) GetTenantId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.TenantId
+}
+
+// GetTenantIdOk returns a tuple with the TenantId field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationAzure) GetTenantIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.TenantId, true
+}
+
+// SetTenantId sets field value
+func (o *LogsArchiveIntegrationAzure) SetTenantId(v string) {
+	o.TenantId = v
+}
+
+func (o LogsArchiveIntegrationAzure) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["client_id"] = o.ClientId
+	}
+	if true {
+		toSerialize["tenant_id"] = o.TenantId
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveIntegrationAzure struct {
+	value *LogsArchiveIntegrationAzure
+	isSet bool
+}
+
+func (v NullableLogsArchiveIntegrationAzure) Get() *LogsArchiveIntegrationAzure {
+	return v.value
+}
+
+func (v *NullableLogsArchiveIntegrationAzure) Set(val *LogsArchiveIntegrationAzure) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveIntegrationAzure) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveIntegrationAzure) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveIntegrationAzure(val *LogsArchiveIntegrationAzure) *NullableLogsArchiveIntegrationAzure {
+	return &NullableLogsArchiveIntegrationAzure{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveIntegrationAzure) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveIntegrationAzure) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_integration_gcs.go b/api/v2/datadog/model_logs_archive_integration_gcs.go
new file mode 100644
index 00000000000..b093df702a9
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_integration_gcs.go
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveIntegrationGCS The GCS archive's integration destination.
+type LogsArchiveIntegrationGCS struct {
+	// A client email.
+	ClientEmail string `json:"client_email"`
+	// A project ID.
+	ProjectId string `json:"project_id"`
+}
+
+// NewLogsArchiveIntegrationGCS instantiates a new LogsArchiveIntegrationGCS object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveIntegrationGCS(clientEmail string, projectId string) *LogsArchiveIntegrationGCS {
+	this := LogsArchiveIntegrationGCS{}
+	this.ClientEmail = clientEmail
+	this.ProjectId = projectId
+	return &this
+}
+
+// NewLogsArchiveIntegrationGCSWithDefaults instantiates a new LogsArchiveIntegrationGCS object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveIntegrationGCSWithDefaults() *LogsArchiveIntegrationGCS {
+	this := LogsArchiveIntegrationGCS{}
+	return &this
+}
+
+// GetClientEmail returns the ClientEmail field value
+func (o *LogsArchiveIntegrationGCS) GetClientEmail() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ClientEmail
+}
+
+// GetClientEmailOk returns a tuple with the ClientEmail field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationGCS) GetClientEmailOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ClientEmail, true
+}
+
+// SetClientEmail sets field value
+func (o *LogsArchiveIntegrationGCS) SetClientEmail(v string) {
+	o.ClientEmail = v
+}
+
+// GetProjectId returns the ProjectId field value
+func (o *LogsArchiveIntegrationGCS) GetProjectId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ProjectId
+}
+
+// GetProjectIdOk returns a tuple with the ProjectId field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationGCS) GetProjectIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ProjectId, true
+}
+
+// SetProjectId sets field value
+func (o *LogsArchiveIntegrationGCS) SetProjectId(v string) {
+	o.ProjectId = v
+}
+
+func (o LogsArchiveIntegrationGCS) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["client_email"] = o.ClientEmail
+	}
+	if true {
+		toSerialize["project_id"] = o.ProjectId
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveIntegrationGCS struct {
+	value *LogsArchiveIntegrationGCS
+	isSet bool
+}
+
+func (v NullableLogsArchiveIntegrationGCS) Get() *LogsArchiveIntegrationGCS {
+	return v.value
+}
+
+func (v *NullableLogsArchiveIntegrationGCS) Set(val *LogsArchiveIntegrationGCS) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveIntegrationGCS) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveIntegrationGCS) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveIntegrationGCS(val *LogsArchiveIntegrationGCS) *NullableLogsArchiveIntegrationGCS {
+	return &NullableLogsArchiveIntegrationGCS{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveIntegrationGCS) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveIntegrationGCS) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_integration_s3.go b/api/v2/datadog/model_logs_archive_integration_s3.go
new file mode 100644
index 00000000000..db0b8325fcb
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_integration_s3.go
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchiveIntegrationS3 The S3 Archive's integration destination.
+type LogsArchiveIntegrationS3 struct {
+	// The account ID for the integration.
+	AccountId string `json:"account_id"`
+	// The path of the integration.
+	RoleName string `json:"role_name"`
+}
+
+// NewLogsArchiveIntegrationS3 instantiates a new LogsArchiveIntegrationS3 object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchiveIntegrationS3(accountId string, roleName string) *LogsArchiveIntegrationS3 {
+	this := LogsArchiveIntegrationS3{}
+	this.AccountId = accountId
+	this.RoleName = roleName
+	return &this
+}
+
+// NewLogsArchiveIntegrationS3WithDefaults instantiates a new LogsArchiveIntegrationS3 object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchiveIntegrationS3WithDefaults() *LogsArchiveIntegrationS3 {
+	this := LogsArchiveIntegrationS3{}
+	return &this
+}
+
+// GetAccountId returns the AccountId field value
+func (o *LogsArchiveIntegrationS3) GetAccountId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.AccountId
+}
+
+// GetAccountIdOk returns a tuple with the AccountId field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationS3) GetAccountIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.AccountId, true
+}
+
+// SetAccountId sets field value
+func (o *LogsArchiveIntegrationS3) SetAccountId(v string) {
+	o.AccountId = v
+}
+
+// GetRoleName returns the RoleName field value
+func (o *LogsArchiveIntegrationS3) GetRoleName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.RoleName
+}
+
+// GetRoleNameOk returns a tuple with the RoleName field value
+// and a boolean to check if the value has been set.
+func (o *LogsArchiveIntegrationS3) GetRoleNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RoleName, true
+}
+
+// SetRoleName sets field value
+func (o *LogsArchiveIntegrationS3) SetRoleName(v string) {
+	o.RoleName = v
+}
+
+func (o LogsArchiveIntegrationS3) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if true {
+		toSerialize["account_id"] = o.AccountId
+	}
+	if true {
+		toSerialize["role_name"] = o.RoleName
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchiveIntegrationS3 struct {
+	value *LogsArchiveIntegrationS3
+	isSet bool
+}
+
+func (v NullableLogsArchiveIntegrationS3) Get() *LogsArchiveIntegrationS3 {
+	return v.value
+}
+
+func (v *NullableLogsArchiveIntegrationS3) Set(val *LogsArchiveIntegrationS3) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveIntegrationS3) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveIntegrationS3) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveIntegrationS3(val *LogsArchiveIntegrationS3) *NullableLogsArchiveIntegrationS3 {
+	return &NullableLogsArchiveIntegrationS3{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveIntegrationS3) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveIntegrationS3) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archive_state.go b/api/v2/datadog/model_logs_archive_state.go
new file mode 100644
index 00000000000..8465ed02d0e
--- /dev/null
+++ b/api/v2/datadog/model_logs_archive_state.go
@@ -0,0 +1,83 @@
+/*
+ * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
+ * Copyright 2019-Present Datadog, Inc.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// LogsArchiveState The state of the archive.
+type LogsArchiveState string
+
+// List of LogsArchiveState
+const (
+	LOGSARCHIVESTATE_UNKNOWN             LogsArchiveState = "UNKNOWN"
+	LOGSARCHIVESTATE_WORKING             LogsArchiveState = "WORKING"
+	LOGSARCHIVESTATE_FAILING             LogsArchiveState = "FAILING"
+	LOGSARCHIVESTATE_WORKING_AUTH_LEGACY LogsArchiveState = "WORKING_AUTH_LEGACY"
+)
+
+func (v *LogsArchiveState) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := LogsArchiveState(value)
+	for _, existing := range []LogsArchiveState{"UNKNOWN", "WORKING", "FAILING", "WORKING_AUTH_LEGACY"} {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid LogsArchiveState", *v)
+}
+
+// Ptr returns reference to LogsArchiveState value
+func (v LogsArchiveState) Ptr() *LogsArchiveState {
+	return &v
+}
+
+type NullableLogsArchiveState struct {
+	value *LogsArchiveState
+	isSet bool
+}
+
+func (v NullableLogsArchiveState) Get() *LogsArchiveState {
+	return v.value
+}
+
+func (v *NullableLogsArchiveState) Set(val *LogsArchiveState) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchiveState) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchiveState) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchiveState(val *LogsArchiveState) *NullableLogsArchiveState {
+	return &NullableLogsArchiveState{value: val, isSet: true}
+}
+
+func (v NullableLogsArchiveState) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchiveState) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_logs_archives.go b/api/v2/datadog/model_logs_archives.go
new file mode 100644
index 00000000000..63ce4f803a6
--- /dev/null
+++ b/api/v2/datadog/model_logs_archives.go
@@ -0,0 +1,112 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// LogsArchives The available archives.
+type LogsArchives struct {
+	// A list of archives.
+	Data *[]LogsArchiveDefinition `json:"data,omitempty"`
+}
+
+// NewLogsArchives instantiates a new LogsArchives object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewLogsArchives() *LogsArchives {
+	this := LogsArchives{}
+	return &this
+}
+
+// NewLogsArchivesWithDefaults instantiates a new LogsArchives object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsArchivesWithDefaults() *LogsArchives {
+	this := LogsArchives{}
+	return &this
+}
+
+// GetData returns the Data field value if set, zero value otherwise.
+func (o *LogsArchives) GetData() []LogsArchiveDefinition {
+	if o == nil || o.Data == nil {
+		var ret []LogsArchiveDefinition
+		return ret
+	}
+	return *o.Data
+}
+
+// GetDataOk returns a tuple with the Data field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsArchives) GetDataOk() (*[]LogsArchiveDefinition, bool) {
+	if o == nil || o.Data == nil {
+		return nil, false
+	}
+	return o.Data, true
+}
+
+// HasData returns a boolean if a field has been set.
+func (o *LogsArchives) HasData() bool {
+	if o != nil && o.Data != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetData gets a reference to the given []LogsArchiveDefinition and assigns it to the Data field.
+func (o *LogsArchives) SetData(v []LogsArchiveDefinition) {
+	o.Data = &v
+}
+
+func (o LogsArchives) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Data != nil {
+		toSerialize["data"] = o.Data
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableLogsArchives struct {
+	value *LogsArchives
+	isSet bool
+}
+
+func (v NullableLogsArchives) Get() *LogsArchives {
+	return v.value
+}
+
+func (v *NullableLogsArchives) Set(val *LogsArchives) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsArchives) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsArchives) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsArchives(val *LogsArchives) *NullableLogsArchives {
+	return &NullableLogsArchives{value: val, isSet: true}
+}
+
+func (v NullableLogsArchives) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsArchives) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/api/v2/datadog/model_relationship_to_role.go b/api/v2/datadog/model_relationship_to_role.go
new file mode 100644
index 00000000000..3dbb2be638f
--- /dev/null
+++ b/api/v2/datadog/model_relationship_to_role.go
@@ -0,0 +1,111 @@
+/*
+ * 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.
+ */
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package datadog
+
+import (
+	"encoding/json"
+)
+
+// RelationshipToRole Relationship to role.
+type RelationshipToRole struct {
+	Data *RelationshipToRoleData `json:"data,omitempty"`
+}
+
+// NewRelationshipToRole instantiates a new RelationshipToRole object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewRelationshipToRole() *RelationshipToRole {
+	this := RelationshipToRole{}
+	return &this
+}
+
+// NewRelationshipToRoleWithDefaults instantiates a new RelationshipToRole object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRelationshipToRoleWithDefaults() *RelationshipToRole {
+	this := RelationshipToRole{}
+	return &this
+}
+
+// GetData returns the Data field value if set, zero value otherwise.
+func (o *RelationshipToRole) GetData() RelationshipToRoleData {
+	if o == nil || o.Data == nil {
+		var ret RelationshipToRoleData
+		return ret
+	}
+	return *o.Data
+}
+
+// GetDataOk returns a tuple with the Data field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RelationshipToRole) GetDataOk() (*RelationshipToRoleData, bool) {
+	if o == nil || o.Data == nil {
+		return nil, false
+	}
+	return o.Data, true
+}
+
+// HasData returns a boolean if a field has been set.
+func (o *RelationshipToRole) HasData() bool {
+	if o != nil && o.Data != nil {
+		return true
+	}
+
+	return false
+}
+
+// SetData gets a reference to the given RelationshipToRoleData and assigns it to the Data field.
+func (o *RelationshipToRole) SetData(v RelationshipToRoleData) {
+	o.Data = &v
+}
+
+func (o RelationshipToRole) MarshalJSON() ([]byte, error) {
+	toSerialize := map[string]interface{}{}
+	if o.Data != nil {
+		toSerialize["data"] = o.Data
+	}
+	return json.Marshal(toSerialize)
+}
+
+type NullableRelationshipToRole struct {
+	value *RelationshipToRole
+	isSet bool
+}
+
+func (v NullableRelationshipToRole) Get() *RelationshipToRole {
+	return v.value
+}
+
+func (v *NullableRelationshipToRole) Set(val *RelationshipToRole) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRelationshipToRole) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRelationshipToRole) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRelationshipToRole(val *RelationshipToRole) *NullableRelationshipToRole {
+	return &NullableRelationshipToRole{value: val, isSet: true}
+}
+
+func (v NullableRelationshipToRole) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRelationshipToRole) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/tests/api/v2/datadog/api_logs_archives_test.go b/tests/api/v2/datadog/api_logs_archives_test.go
new file mode 100644
index 00000000000..57f974e7417
--- /dev/null
+++ b/tests/api/v2/datadog/api_logs_archives_test.go
@@ -0,0 +1,227 @@
+/*
+ * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
+ * Copyright 2019-Present Datadog, Inc.
+ */
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"testing"
+
+	"github.com/DataDog/datadog-api-client-go/api/v2/datadog"
+	"github.com/DataDog/datadog-api-client-go/tests"
+	"gopkg.in/h2non/gock.v1"
+)
+
+// This test uses mocking because: 1) it relies on private data. 2) It relies on external services
+
+func TestLogsArchivesCreate(t *testing.T) {
+	testCases := []struct {
+		archiveType string
+		archive     datadog.LogsArchiveCreateRequest
+	}{
+		{
+			archiveType: "s3",
+			archive: datadog.LogsArchiveCreateRequest{
+				Data: &datadog.LogsArchiveCreateRequestDefinition{
+					Attributes: &datadog.LogsArchiveCreateRequestAttributes{
+						Destination: datadog.LogsArchiveCreateRequestDestination{
+							LogsArchiveDestinationS3: &datadog.LogsArchiveDestinationS3{
+								Bucket: "dd-logs-test-datadog-api-client-go",
+								Integration: datadog.LogsArchiveIntegrationS3{
+									AccountId: "711111111111",
+									RoleName:  "DatadogGoClientTestIntegrationRole",
+								},
+								Path: datadog.PtrString("/path/blou"),
+								Type: "s3",
+							},
+						},
+						Name:  "datadog-api-client-go Tests Archive",
+						Query: "service:toto",
+					},
+					Type: "archives",
+				},
+			},
+		},
+		{
+			archiveType: "azure",
+			archive: datadog.LogsArchiveCreateRequest{
+				Data: &datadog.LogsArchiveCreateRequestDefinition{
+					Attributes: &datadog.LogsArchiveCreateRequestAttributes{
+						Destination: datadog.LogsArchiveCreateRequestDestination{
+							LogsArchiveDestinationAzure: &datadog.LogsArchiveDestinationAzure{
+								Container: "my-container",
+								Integration: datadog.LogsArchiveIntegrationAzure{
+									ClientId: "aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa",
+									TenantId: "aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa",
+								},
+								Path:           datadog.PtrString("/path/blou"),
+								Region:         datadog.PtrString("my-region"),
+								StorageAccount: "storageAccount",
+								Type:           "azure",
+							},
+						},
+						Name:  "datadog-api-client-go Tests Archive",
+						Query: "service:toto",
+					},
+					Type: "archives",
+				},
+			},
+		},
+		{
+			archiveType: "gcs",
+			archive: datadog.LogsArchiveCreateRequest{
+				Data: &datadog.LogsArchiveCreateRequestDefinition{
+					Attributes: &datadog.LogsArchiveCreateRequestAttributes{
+						Destination: datadog.LogsArchiveCreateRequestDestination{
+							LogsArchiveDestinationGCS: &datadog.LogsArchiveDestinationGCS{
+								Bucket: "dd-logs-test-datadog-api-client-go",
+								Integration: datadog.LogsArchiveIntegrationGCS{
+									ClientEmail: "email@email.com",
+									ProjectId:   "aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa",
+								},
+								Path: datadog.PtrString("/path/blou"),
+								Type: "gcs",
+							},
+						},
+						Name:  "datadog-api-client-go Tests Archive",
+						Query: "service:toto",
+					},
+					Type: "archives",
+				},
+			},
+		},
+	}
+	for _, tc := range testCases {
+		t.Run(tc.archiveType, func(t *testing.T) {
+			ctx, finish := WithClient(WithFakeAuth(context.Background()), t)
+			defer finish()
+
+			client := Client(ctx)
+			assert := tests.Assert(ctx, t)
+
+			outputArchiveStr := readFixture(t, fmt.Sprintf("fixtures/logs/archives/%s/out/%s.json", tc.archiveType, "create"))
+			outputArchive := datadog.NullableLogsArchive{}
+			outputArchive.UnmarshalJSON([]byte(outputArchiveStr))
+
+			URL, err := client.GetConfig().ServerURLWithContext(ctx, "LogsArchivesApiService.CreateLogsArchive")
+			assert.NoError(err)
+
+			gock.New(URL).Post("/api/v2/logs/config/archives").MatchType("json").JSON(tc.archive).Reply(200).Type("json").BodyString(outputArchiveStr)
+			defer gock.Off()
+
+			result, httpresp, err := client.LogsArchivesApi.CreateLogsArchive(ctx).Body(tc.archive).Execute()
+			assert.NoError(err)
+			assert.Equal(httpresp.StatusCode, 200)
+			assert.Equal(result, *outputArchive.Get())
+		})
+	}
+}
+
+func TestLogsArchivesUpdate(t *testing.T) {
+	ctx, finish := WithClient(WithFakeAuth(context.Background()), t)
+	defer finish()
+	assert := tests.Assert(ctx, t)
+	client := Client(ctx)
+	archiveType := "s3"
+	action := "update"
+	inputArchive := datadog.LogsArchiveCreateRequest{
+		Data: &datadog.LogsArchiveCreateRequestDefinition{
+			Attributes: &datadog.LogsArchiveCreateRequestAttributes{
+				Destination: datadog.LogsArchiveCreateRequestDestination{
+					LogsArchiveDestinationS3: &datadog.LogsArchiveDestinationS3{
+						Bucket: "dd-logs-test-datadog-api-client-go",
+						Integration: datadog.LogsArchiveIntegrationS3{
+							AccountId: "711111111111",
+							RoleName:  "DatadogGoClientTestIntegrationRole",
+						},
+						Path: datadog.PtrString("/path/blou"),
+						Type: "s3",
+					},
+				},
+				Name:  "datadog-api-client-go Tests Archive",
+				Query: "service:toto",
+			},
+			Type: "archives",
+		},
+	}
+	outputArchiveStr := readFixture(t, fmt.Sprintf("fixtures/logs/archives/%s/out/%s.json", archiveType, action))
+	outputArchive := datadog.NullableLogsArchive{}
+	outputArchive.UnmarshalJSON([]byte(outputArchiveStr))
+	URL, err := client.GetConfig().ServerURLWithContext(ctx, "LogsArchivesApiService.UpdateLogsArchive")
+	assert.NoError(err)
+	id := "FOObartotO"
+	gock.New(URL).Put(fmt.Sprintf("/api/v2/logs/config/archives/%s", id)).MatchType("json").JSON(inputArchive).Reply(200).Type("json").BodyString(outputArchiveStr)
+	defer gock.Off()
+	result, httpresp, err := client.LogsArchivesApi.UpdateLogsArchive(ctx, id).Body(inputArchive).Execute()
+	assert.Equal(httpresp.StatusCode, 200)
+	assert.Equal(result, *outputArchive.Get())
+}
+
+func TestLogsArchivesGetByID(t *testing.T) {
+	ctx, finish := WithClient(WithFakeAuth(context.Background()), t)
+	defer finish()
+	assert := tests.Assert(ctx, t)
+	client := Client(ctx)
+	id := "FOObartotO"
+	action := "getbyid"
+	archiveType := "s3"
+	outputArchiveStr := readFixture(t, fmt.Sprintf("fixtures/logs/archives/%s/out/%s.json", archiveType, action))
+	outputArchive := datadog.NullableLogsArchive{}
+	outputArchive.UnmarshalJSON([]byte(outputArchiveStr))
+	URL, err := client.GetConfig().ServerURLWithContext(ctx, "LogsArchivesApiService.GetLogsArchive")
+	assert.NoError(err)
+	gock.New(URL).Get(fmt.Sprintf("/api/v2/logs/config/archives/%s", id)).Reply(200).Type("json").BodyString(outputArchiveStr)
+	defer gock.Off()
+	result, httpresp, err := client.LogsArchivesApi.GetLogsArchive(ctx, id).Execute()
+	assert.Equal(httpresp.StatusCode, 200)
+	assert.Equal(result, *outputArchive.Get())
+}
+
+func TestLogsArchivesDelete(t *testing.T) {
+	ctx, finish := WithClient(WithFakeAuth(context.Background()), t)
+	defer finish()
+	assert := tests.Assert(ctx, t)
+	id := "FOObartotO"
+	client := Client(ctx)
+	URL, err := client.GetConfig().ServerURLWithContext(ctx, "LogsArchivesApiService.DeleteLogsArchive")
+	assert.NoError(err)
+	gock.New(URL).Delete(fmt.Sprintf("/api/v2/logs/config/archives/%s", id)).Reply(204)
+	defer gock.Off()
+	httpresp, err := client.LogsArchivesApi.DeleteLogsArchive(ctx, id).Execute()
+	assert.NoError(err)
+	assert.Equal(httpresp.StatusCode, 204)
+}
+
+func TestLogsArchivesGetAll(t *testing.T) {
+	ctx, finish := WithClient(WithFakeAuth(context.Background()), t)
+	defer finish()
+	client := Client(ctx)
+	assert := tests.Assert(ctx, t)
+	action := "getall"
+	archiveType := "s3"
+	outputArchivesStr := readFixture(t, fmt.Sprintf("fixtures/logs/archives/%s/out/%s.json", archiveType, action))
+	outputArchives := datadog.NullableLogsArchives{}
+	outputArchives.UnmarshalJSON([]byte(outputArchivesStr))
+	URL, err := Client(ctx).GetConfig().ServerURLWithContext(ctx, "LogsArchivesApiService.ListLogsArchives")
+	assert.NoError(err)
+	gock.New(URL).Get("/api/v2/logs/config/archives").Reply(200).Type("json").JSON(outputArchivesStr)
+	defer gock.Off()
+	result, httpresp, err := client.LogsArchivesApi.ListLogsArchives(ctx).Execute()
+	assert.NoError(err)
+	assert.Equal(httpresp.StatusCode, 200)
+	assert.True(len(*result.Data) > 0)
+	assert.Equal(*outputArchives.Get(), result)
+}
+
+func readFixture(t *testing.T, path string) string {
+	t.Helper()
+	res, err := tests.ReadFixture(path)
+	if err != nil {
+		t.Fatalf("Failed to read fixture: %s", err)
+	}
+	return res
+}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/azure/out/create.json b/tests/api/v2/datadog/fixtures/logs/archives/azure/out/create.json
new file mode 100644
index 00000000000..b86384edfca
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/azure/out/create.json
@@ -0,0 +1 @@
+{"data":{"attributes":{"destination":{"container":"my-container","integration":{"client_id":"aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa","tenant_id":"aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa"},"path":"/path/blou","region":"my-region","storage_account":"storageAccount","type":"azure"},"name":"datadog-api-client-go Tests Archive","query":"service:toto"},"id":"FOObartotO","type":"archives"}}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/gcs/out/create.json b/tests/api/v2/datadog/fixtures/logs/archives/gcs/out/create.json
new file mode 100644
index 00000000000..974bb7fd053
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/gcs/out/create.json
@@ -0,0 +1 @@
+{"data":{"attributes":{"destination":{"bucket":"dd-logs-test-datadog-api-client-go","integration":{"client_email":"email@email.com","project_id":"aaaaaaaa-1a1a-1a1a-1a1a-aaaaaaaaaaaa"},"path":"/path/blou","type":"gcs"},"name":"datadog-api-client-go Tests Archive","query":"service:toto"},"id":"FOObartotO","type":"archives"}}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/s3/out/create.json b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/create.json
new file mode 100644
index 00000000000..0de28cdd41c
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/create.json
@@ -0,0 +1 @@
+{"data":{"attributes":{"destination":{"bucket":"dd-logs-test-datadog-api-client-go","integration":{"account_id":"711111111111","role_name":"DatadogGoClientTestIntegrationRole"},"path":"/path/blou","type":"s3"},"name":"datadog-api-client-go Tests Archive","query":"service:toto"},"id":"XVlBzgbaiC","type":"archives"}}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getall.json b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getall.json
new file mode 100644
index 00000000000..ea40bdbde3d
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getall.json
@@ -0,0 +1 @@
+{"data":[{"attributes":{"destination":{"bucket":"dd-logs-test-datadog-api-client-go","integration":{"account_id":"711111111111","role_name":"DatadogGoClientTestIntegrationRole"},"path":"/path/blou","type":"s3"},"name":"datadog-api-client-go Tests Archive","query":"source:tata"},"id":"FOObartotO","type":"archives"}]}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getbyid.json b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getbyid.json
new file mode 100644
index 00000000000..abe709eeade
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/getbyid.json
@@ -0,0 +1 @@
+{"data":{"attributes":{"destination":{"bucket":"dd-logs-test-datadog-api-client-go","integration":{"account_id":"711111111111","role_name":"DatadogGoClientTestIntegrationRole"},"path":"/path/blou","type":"s3"},"name":"datadog-api-client-go Tests Archive","query":"source:tata"},"id":"FOObartotO","type":"archives"}}
diff --git a/tests/api/v2/datadog/fixtures/logs/archives/s3/out/update.json b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/update.json
new file mode 100644
index 00000000000..09024c05517
--- /dev/null
+++ b/tests/api/v2/datadog/fixtures/logs/archives/s3/out/update.json
@@ -0,0 +1 @@
+{"data":{"attributes":{"destination":{"bucket":"dd-logs-test-datadog-api-client-go","integration":{"account_id":"711111111111","role_name":"DatadogGoClientTestIntegrationRole"},"path":"/path/toto","type":"s3"},"name":"datadog-api-client-go Tests Archive","query":"service:toto"},"id":"FOObartotO","type":"archives"}}