diff --git a/packages/generator/spec.json b/packages/generator/spec.json index 66979411f..ce58d5477 100644 --- a/packages/generator/spec.json +++ b/packages/generator/spec.json @@ -14,134 +14,6 @@ } ], "paths": { - "/v1/oauth/revoke": { - "post": { - "tags": ["tokens"], - "summary": "Revoke token (v1)", - "description": "

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated due to access token passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user.", - "operationId": "revoke-token", - "deprecated": true, - "parameters": [ - { - "description": "Access token that you want to revoke", - "in": "query", - "name": "access_token", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Token revoked" - }, - "400": { - "description": "Failed to revoke token" - } - } - } - }, - "/v1/oauth-token": { - "get": { - "tags": ["tokens"], - "summary": "Get access token information", - "description": "Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token.", - "operationId": "token-info", - "responses": { - "200": { - "description": "Token information", - "content": { - "application/json": { - "schema": { - "title": "Token information", - "type": "object", - "required": ["type", "organization", "team", "createdBy", "user"], - "properties": { - "type": { - "type": "string" - }, - "organization": { - "title": "Organization information", - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": ["type", "name", "id"] - }, - "team": { - "title": "Team information", - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": ["type", "name", "id"] - }, - "createdBy": { - "type": "object", - "title": "User information", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": ["type", "name", "id"] - }, - "user": { - "type": "object", - "title": "User information", - "properties": { - "type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": ["type", "name", "id"] - }, - "scopes": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, - "400": { - "description": "Invalid token provided" - } - } - } - }, "/v2/orgs/{org_id}/ai-interaction-logs": { "get": { "x-settings": { @@ -2479,6 +2351,92 @@ "tags": ["Reset all sessions of a user"] } }, + "/oembed": { + "get": { + "tags": ["oembed"], + "summary": "Get oEmbed data", + "description": "Retrieves information to embed a Miro board as a [live embed](doc:oembed-live-embed).", + "operationId": "getEmbedData", + "parameters": [ + { + "name": "url", + "in": "query", + "description": "The URL pointing to the resource to return as oEmbed data.\nCurrently, it supports only URLs pointing to Miro boards.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "format", + "in": "query", + "description": "Specifies the return format of the response.\nIt complies with the [oEmbed standard](https://oembed.com/).\nAllowed formats: either \"json\", or \"xml\".", + "schema": { + "type": "string", + "enum": ["json", "xml"] + } + }, + { + "name": "referrer", + "in": "query", + "description": "The URL pointing to the source of the request.\nService providers such as Embedly use it to forward the initial site that triggered the oEmbed request.", + "schema": { + "type": "string" + } + }, + { + "name": "maxwidth", + "in": "query", + "description": "The maximum width available to the embed, in pixels.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "maxheight", + "in": "query", + "description": "The maximum height available to the embed, in pixels.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK Successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OEmbedData" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/OEmbedData" + } + } + } + }, + "400": { + "description": "Bad request. The original input data is malformed, incorrect, or invalid." + }, + "404": { + "description": "Not found. The target resource couldn't be found; it doesn't exist, or it has been deleted." + }, + "405": { + "description": "Method not allowed. The target resource API doesn't support the HTTP method used in the request." + }, + "406": { + "description": "Not acceptable. The target resource API doesn't support the response format specified in the request. Supported formats: json, xml." + }, + "429": { + "description": "Too many requests. Rate limiting: you exceeded the amount of requests that you can make to this API in a given amount of time. Try again later." + } + } + } + }, "/Users": { "get": { "tags": ["User"], @@ -4395,7 +4353,7 @@ "tags": ["Boards"] }, "get": { - "description": "Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters.\nCustomize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards.\n\nIf you're an Enterprise customer with Company Admin permissions:\n- Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins).\n- Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.\n

Required scope

boards:read

Rate limiting

Level 1
\n", + "description": "Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters.\nCustomize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards.\n\nWhen the `query` parameter is provided, results are capped at the first 10,000 matching boards (`offset` + `limit` must not exceed 10,000). To page through more boards, narrow the result set with `team_id`, `project_id`, or `owner` instead of relying on a higher `offset`.\n\nIf you're an Enterprise customer with Company Admin permissions:\n- Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins).\n- Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.\n

Required scope

boards:read

Rate limiting

Level 1
\n", "operationId": "get-boards", "parameters": [ { @@ -4419,7 +4377,7 @@ "name": "query", "schema": { "type": "string", - "description": "Retrieves a list of boards that contain the query string provided in the board name or board description. For example, if you want to retrieve a list of boards that have the word `beta` in the board name or description, add `beta` as the `query` parameter value. You can use the `query` parameter with the owner parameter to narrow down the board search results.", + "description": "Retrieves a list of boards that contain the query string provided in the board name or board description. For example, if you want to retrieve a list of boards that have the word `beta` in the board name or description, add `beta` as the `query` parameter value. You can use the `query` parameter with the owner parameter to narrow down the board search results.\n**Note:** When `query` is set, results are limited to the first 10,000 matching boards (`offset` + `limit` must not exceed 10,000).", "maxLength": 500 } }, @@ -4446,7 +4404,7 @@ "name": "offset", "schema": { "type": "string", - "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`." + "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`.\n**Note:** When the `query` parameter is set, `offset` + `limit` must not exceed 10,000." } }, { @@ -11957,6 +11915,129 @@ "tags": ["groups"] } }, + "/v1/oauth/token": { + "post": { + "summary": "Step 3: Exchange authorization code with access token", + "description": "Exchange the authorization code returned to your redirect URI for an access token and a refresh token.", + "operationId": "exchange-authorization-code-with-access-token", + "tags": ["OAuth"], + "security": [], + "parameters": [ + { + "name": "grant_type", + "in": "query", + "description": "Always set the value for this parameter to `authorization_code`.", + "required": true, + "schema": { + "type": "string", + "default": "authorization_code" + } + }, + { + "name": "client_id", + "in": "query", + "description": "The Client ID of the app that is requesting user authorization.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "client_secret", + "in": "query", + "description": "App client secret. **The client secret must be kept confidential.**", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "code", + "in": "query", + "description": "Paste the authorization code that was provided as the `code` parameter value in the redirect URI.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "redirect_uri", + "in": "query", + "description": "Paste the redirect URI. The URI must match the original redirect URI that was used when requesting the authorization (including the trailing slash).", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Access token issued", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessTokenResponse" + } + } + } + }, + "400": { + "description": "Failed to exchange the authorization code" + } + } + } + }, + "/v1/oauth-token": { + "get": { + "summary": "Get access token context", + "description": "Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token.", + "operationId": "get-access-token-context", + "tags": ["OAuth"], + "responses": { + "200": { + "description": "Token context", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TokenContext" + } + } + } + }, + "400": { + "description": "Invalid token provided" + } + } + } + }, + "/v1/oauth/revoke": { + "post": { + "summary": "Revoke token (v1)", + "description": "

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated because the access token is passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user.", + "operationId": "revoke-token", + "deprecated": true, + "tags": ["OAuth"], + "parameters": [ + { + "name": "access_token", + "in": "query", + "description": "Paste the access token that you want to revoke.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Token revoked" + }, + "400": { + "description": "Failed to revoke token" + } + } + } + }, "/v2/oauth/revoke": { "post": { "summary": "Revoke token (v2)", @@ -16540,7 +16621,7 @@ "type": "string", "description": "Time when the audit event has been created", "format": "date-time", - "example": "2023-09-01T09:30:10.840+0000" + "example": "2023-03-30T17:26:50.000Z" }, "details": { "type": "object", @@ -16557,7 +16638,7 @@ }, "category": { "type": "string", - "description": "Event category of the audit event.", + "description": "Event category of the audit event", "example": "authentication" } } @@ -17615,6 +17696,20 @@ "items": { "$ref": "#/components/schemas/Relationship" } + }, + "ai": { + "$ref": "#/components/schemas/BoardItemContentLogAI" + } + } + }, + "BoardItemContentLogAI": { + "type": "object", + "description": "Contains AI-related information about the board content action.", + "properties": { + "assisted": { + "type": "boolean", + "description": "Indicates whether the content log was performed with AI assistance.", + "example": true } } }, @@ -17686,6 +17781,66 @@ } } }, + "OEmbedData": { + "type": "object", + "description": "Data used to embed a Miro board.", + "properties": { + "html": { + "type": "string", + "description": "HTML code to embed the board." + }, + "title": { + "type": "string", + "description": "The title of the board, if the board is publicly available.\nOtherwise, it displays a placeholder." + }, + "author": { + "type": "string", + "description": "The user who owns the board, if the board is publicly available.\nOtherwise, the field is empty." + }, + "version": { + "type": "string" + }, + "type": { + "type": "string", + "description": "The embed type.\nFor this endpoint, the embed type is always `rich`." + }, + "thumbnail_url": { + "type": "string", + "description": "The URL pointing to a thumbnail image of the board." + }, + "thumbnail_width": { + "type": "integer", + "description": "The width of the thumbnail image of the board in pixels, if the thumbnail is available.", + "format": "int32" + }, + "thumbnail_height": { + "type": "integer", + "description": "The height of the thumbnail image of the board in pixels, if the thumbnail is available.", + "format": "int32" + }, + "width": { + "type": "integer", + "description": "The explicit width of the embed, in pixels.\nIf you want the iframe containing the embed to use all the available width, you can ignore this field.", + "format": "int32" + }, + "height": { + "type": "integer", + "description": "The explicit height of the embed, in pixels.\nIf you want the iframe containing the embed to use all the available height, you can ignore this field.", + "format": "int32" + }, + "provider_name": { + "type": "string", + "description": "The name of the oEmbed provider.\nFor this endpoint, the provider name is always 'Miro'." + }, + "provider_url": { + "type": "string", + "description": "The URL of the oEmbed provider.\nFor this endpoint, the URL always points to a Miro domain." + } + }, + "xml": { + "name": "oembed" + } + }, "PatchUserResource": { "type": "object", "required": ["schemas", "Operations"], @@ -18869,50 +19024,6 @@ } } }, - "Organization": { - "required": ["fullLicensesPurchased", "id", "name", "plan"], - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Id of the organization", - "example": "3074457345821140946" - }, - "fullLicensesPurchased": { - "type": "integer", - "description": "Purchased FULL licenses", - "format": "int32" - }, - "name": { - "type": "string", - "description": "Name of the organization", - "example": "Miro company" - }, - "plan": { - "type": "string", - "description": "Organization plan type", - "example": "company", - "enum": [ - "company", - "consultant", - "consultant_slf", - "business", - "paid_team_org", - "integration_org", - "professional_2022", - "edu_team_org", - "free_team_org", - "dev_team_org", - "unknown" - ] - }, - "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "organization" - } - } - }, "OrganizationMember": { "description": "Organization member", "required": ["active", "email", "id", "license", "role"], @@ -19586,6 +19697,9 @@ "team": { "$ref": "#/components/schemas/Team" }, + "organization": { + "$ref": "#/components/schemas/Organization" + }, "project": { "$ref": "#/components/schemas/BoardProject" }, @@ -19654,6 +19768,9 @@ "team": { "$ref": "#/components/schemas/Team" }, + "organization": { + "$ref": "#/components/schemas/Organization" + }, "project": { "$ref": "#/components/schemas/BoardProject" }, @@ -19730,6 +19847,9 @@ "team": { "$ref": "#/components/schemas/Team" }, + "organization": { + "$ref": "#/components/schemas/Organization" + }, "picture": { "$ref": "#/components/schemas/Picture" }, @@ -20695,6 +20815,36 @@ } } }, + "MiroAi": { + "type": "object", + "description": "Contains information about whether the item was created or modified with AI assistance.", + "properties": { + "createdWithAi": { + "type": "boolean", + "description": "Indicates whether the item was created with AI assistance.", + "example": true + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the item was last modified using AI.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).", + "example": "2022-03-30T17:26:50.000Z" + } + } + }, + "Organization": { + "required": ["id"], + "type": "object", + "description": "Contains information about the organization with which the board is associated.", + "properties": { + "id": { + "type": "string", + "format": "int64", + "description": "Unique identifier (ID) of the organization.", + "example": "3074457345616890134" + } + } + }, "BoardProject": { "type": "object", "description": "Contains information about the project with which the board is associated.", @@ -23503,7 +23653,7 @@ "code": { "type": "string", "description": "The code content of the widget.", - "maxLength": 6000, + "maxLength": 30000, "example": "console.log(\"Hello, World!\");" }, "language": { @@ -24171,6 +24321,129 @@ } } }, + "AccessTokenResponse": { + "title": "Access token", + "type": "object", + "properties": { + "user_id": { + "type": "string", + "example": "3074457362577955221" + }, + "expires_in": { + "type": "integer", + "example": 3599 + }, + "team_id": { + "type": "string", + "example": "3074457362577833142" + }, + "access_token": { + "type": "string", + "example": "eyJtaXJvLm9yaWdpbiI6ImV1MDEifQ_o-P91OccaII0A63CDSK--x21xiI" + }, + "scope": { + "type": "string", + "example": "boards:write boards:read" + }, + "refresh_token": { + "type": "string", + "example": "eyJtaXJvLm9yaWdpbiI6ImV1MDEifQ_-PIBKmE9rzQuL3bUeAvUEGFEhLk" + }, + "token_type": { + "type": "string", + "example": "bearer" + } + } + }, + "TokenContext": { + "title": "Token context", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "oAuthToken" + }, + "team": { + "title": "Team information", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "team" + }, + "name": { + "type": "string", + "example": "Doc sample team" + }, + "id": { + "type": "string", + "example": "3074457362577833142" + } + } + }, + "createdBy": { + "title": "User information", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "user" + }, + "name": { + "type": "string", + "example": "John Smith" + }, + "id": { + "type": "string", + "example": "3074457362577955221" + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "example": ["boards:write", "boards:read"] + }, + "organization": { + "title": "Organization information", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "organization" + }, + "name": { + "type": "string", + "example": "Doc sample team" + }, + "id": { + "type": "string", + "example": "3074457363786315310" + } + } + }, + "user": { + "title": "User information", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "user" + }, + "name": { + "type": "string", + "example": "John Smith" + }, + "id": { + "type": "string", + "example": "3974457362577957221" + } + } + } + } + }, "RevokeTokenRequest": { "type": "object", "properties": { diff --git a/packages/miro-api-python/.openapi-generator/FILES b/packages/miro-api-python/.openapi-generator/FILES index 236523720..e709ab4bc 100644 --- a/packages/miro-api-python/.openapi-generator/FILES +++ b/packages/miro-api-python/.openapi-generator/FILES @@ -1,5 +1,6 @@ miro_api/api/__init__.py -miro_api/api/app_cards_api.py +miro_api/api/ai_interaction_logs_api.py +miro_api/api/app_card_items_api.py miro_api/api/app_metrics_experimental_api.py miro_api/api/audit_logs_api.py miro_api/api/board_classification_board_level_api.py @@ -10,38 +11,42 @@ miro_api/api/board_export_api.py miro_api/api/board_members_api.py miro_api/api/boards_api.py miro_api/api/bulk_operations_api.py -miro_api/api/cards_api.py +miro_api/api/card_items_api.py +miro_api/api/code_widget_items_experimental_api.py miro_api/api/connectors_api.py miro_api/api/discovery_api.py miro_api/api/doc_formats_api.py +miro_api/api/document_items_api.py miro_api/api/documents_api.py -miro_api/api/embeds_api.py +miro_api/api/embed_items_api.py miro_api/api/flowchart_shapes_experimental_api.py miro_api/api/frames_api.py miro_api/api/group_api.py miro_api/api/groups_api.py +miro_api/api/image_items_api.py miro_api/api/images_api.py miro_api/api/items_api.py +miro_api/api/items_api.py miro_api/api/legal_holds_api.py miro_api/api/mind_map_nodes_experimental_api.py miro_api/api/o_auth_api.py +miro_api/api/oembed_api.py miro_api/api/organization_members_api.py miro_api/api/organizations_api.py miro_api/api/project_members_api.py miro_api/api/project_settings_api.py miro_api/api/projects_api.py miro_api/api/reset_all_sessions_of_a_user_api.py -miro_api/api/shapes_api.py +miro_api/api/shape_items_api.py miro_api/api/share_boards_with_groups_api.py miro_api/api/share_projects_with_groups_api.py -miro_api/api/sticky_notes_api.py +miro_api/api/sticky_note_items_api.py miro_api/api/tags_api.py miro_api/api/team_members_api.py miro_api/api/team_settings_api.py miro_api/api/team_user_groups_api.py miro_api/api/teams_api.py -miro_api/api/texts_api.py -miro_api/api/tokens_api.py +miro_api/api/text_items_api.py miro_api/api/user_api.py miro_api/api/user_group_members_api.py miro_api/api/user_group_to_teams_api.py @@ -49,18 +54,23 @@ miro_api/api/user_groups_api.py miro_api/api_client.py miro_api/api_response.py miro_api/configuration.py +miro_api/docs/AIInteractionLogsApi.md +miro_api/docs/AccessTokenResponse.md miro_api/docs/Actor.md miro_api/docs/AddProjectMemberRequest.md miro_api/docs/AdminRole.md +miro_api/docs/AiInteractionLog.md +miro_api/docs/AiInteractionLogActor.md +miro_api/docs/AiInteractionLogObject.md miro_api/docs/AppCardCreateRequest.md miro_api/docs/AppCardData.md miro_api/docs/AppCardDataChanges.md miro_api/docs/AppCardDataResponse.md miro_api/docs/AppCardItem.md +miro_api/docs/AppCardItemsApi.md miro_api/docs/AppCardStyle.md miro_api/docs/AppCardStylePlatformbulkcreateoperation.md miro_api/docs/AppCardUpdateRequest.md -miro_api/docs/AppCardsApi.md miro_api/docs/AppMetricsExperimentalApi.md miro_api/docs/AuditContext.md miro_api/docs/AuditCreatedBy.md @@ -96,6 +106,7 @@ miro_api/docs/BoardExportTaskExportLink.md miro_api/docs/BoardExportTaskResult.md miro_api/docs/BoardFormat.md miro_api/docs/BoardItemContentLog.md +miro_api/docs/BoardItemContentLogAI.md miro_api/docs/BoardLinks.md miro_api/docs/BoardMember.md miro_api/docs/BoardMemberChanges.md @@ -127,12 +138,18 @@ miro_api/docs/CardCreateRequest.md miro_api/docs/CardData.md miro_api/docs/CardDataPlatformbulkcreateoperation.md miro_api/docs/CardItem.md +miro_api/docs/CardItemsApi.md miro_api/docs/CardStyle.md miro_api/docs/CardStylePlatformbulkcreateoperation.md miro_api/docs/CardUpdateRequest.md -miro_api/docs/CardsApi.md miro_api/docs/CaseRequest.md miro_api/docs/CaseResponse.md +miro_api/docs/CodeWidgetCreateRequest.md +miro_api/docs/CodeWidgetCursorPaged.md +miro_api/docs/CodeWidgetData.md +miro_api/docs/CodeWidgetItem.md +miro_api/docs/CodeWidgetItemsExperimentalApi.md +miro_api/docs/CodeWidgetUpdateRequest.md miro_api/docs/ConnectorChangesData.md miro_api/docs/ConnectorCreationData.md miro_api/docs/ConnectorStyle.md @@ -185,6 +202,7 @@ miro_api/docs/DocumentDataResponse.md miro_api/docs/DocumentDataResponsePlatformcreateitemsinbulkusingfilefromdevice.md miro_api/docs/DocumentItem.md miro_api/docs/DocumentItemPlatformFileUpload.md +miro_api/docs/DocumentItemsApi.md miro_api/docs/DocumentUpdateRequest.md miro_api/docs/DocumentUrlData.md miro_api/docs/DocumentUrlDataChanges.md @@ -194,11 +212,11 @@ miro_api/docs/EmbedCreateRequest.md miro_api/docs/EmbedData.md miro_api/docs/EmbedDataResponse.md miro_api/docs/EmbedItem.md +miro_api/docs/EmbedItemsApi.md miro_api/docs/EmbedUpdateRequest.md miro_api/docs/EmbedUrlData.md miro_api/docs/EmbedUrlDataChanges.md miro_api/docs/EmbedUrlDataPlatformbulkcreateoperation.md -miro_api/docs/EmbedsApi.md miro_api/docs/EnterpriseGetOrganizationMembers200Response.md miro_api/docs/EnterpriseUpdateBoardExportJob200Response.md miro_api/docs/EnterpriseUpdateBoardExportJob200ResponseStatus.md @@ -240,6 +258,7 @@ miro_api/docs/GeometryPlatformTags.md miro_api/docs/GeometryPlatformbulkcreateoperation.md miro_api/docs/GeometryPlatformcreateitemsinbulkusingfilefromdevice.md miro_api/docs/GeometryPlatformgroups.md +miro_api/docs/GetAiInteractionLogsResponse.md miro_api/docs/GetAllGroups200Response.md miro_api/docs/GetAllGroups400Response.md miro_api/docs/GetAllGroups404Response.md @@ -276,6 +295,7 @@ miro_api/docs/ImageDataResponse.md miro_api/docs/ImageDataResponsePlatformcreateitemsinbulkusingfilefromdevice.md miro_api/docs/ImageItem.md miro_api/docs/ImageItemPlatformFileUpload.md +miro_api/docs/ImageItemsApi.md miro_api/docs/ImageUpdateRequest.md miro_api/docs/ImageUrlData.md miro_api/docs/ImageUrlDataChanges.md @@ -297,6 +317,7 @@ miro_api/docs/ItemStyle.md miro_api/docs/ItemTypeChange.md miro_api/docs/Items.md miro_api/docs/ItemsApi.md +miro_api/docs/ItemsApi.md miro_api/docs/ItemsPage.md miro_api/docs/LegalHoldContentItemsResponse.md miro_api/docs/LegalHoldRequest.md @@ -321,6 +342,7 @@ miro_api/docs/MindmapNodeTextData.md miro_api/docs/MindmapNodeView.md miro_api/docs/MindmapStyle.md miro_api/docs/MindmapWidgetDataOutput.md +miro_api/docs/MiroAi.md miro_api/docs/ModifiedBy.md miro_api/docs/ModifiedByPlatformContainers.md miro_api/docs/ModifiedByPlatformExperimentalFeatures.md @@ -329,6 +351,8 @@ miro_api/docs/ModifiedByPlatformTags.md miro_api/docs/ModifiedByPlatformcreateitemsinbulkusingfilefromdevice.md miro_api/docs/ModifiedByPlatformgroups.md miro_api/docs/OAuthApi.md +miro_api/docs/OEmbedData.md +miro_api/docs/OembedApi.md miro_api/docs/Organization.md miro_api/docs/OrganizationInformation.md miro_api/docs/OrganizationMember.md @@ -402,11 +426,11 @@ miro_api/docs/ShapeDataForCreate.md miro_api/docs/ShapeDataForUpdate.md miro_api/docs/ShapeDataPlatformTags.md miro_api/docs/ShapeItem.md +miro_api/docs/ShapeItemsApi.md miro_api/docs/ShapeStyle.md miro_api/docs/ShapeStyleForCreate.md miro_api/docs/ShapeStyleForUpdate.md miro_api/docs/ShapeUpdateRequest.md -miro_api/docs/ShapesApi.md miro_api/docs/ShareBoardsWithGroupsApi.md miro_api/docs/ShareProjectsWithGroupsApi.md miro_api/docs/SharingPolicySettings.md @@ -415,10 +439,10 @@ miro_api/docs/StickyNoteData.md miro_api/docs/StickyNoteDataPlatformTags.md miro_api/docs/StickyNoteDataPlatformbulkcreateoperation.md miro_api/docs/StickyNoteItem.md +miro_api/docs/StickyNoteItemsApi.md miro_api/docs/StickyNoteStyle.md miro_api/docs/StickyNoteStylePlatformbulkcreateoperation.md miro_api/docs/StickyNoteUpdateRequest.md -miro_api/docs/StickyNotesApi.md miro_api/docs/SubscriptionData.md miro_api/docs/Tag.md miro_api/docs/TagCreateRequest.md @@ -458,11 +482,10 @@ miro_api/docs/TextData.md miro_api/docs/TextDataPlatformTags.md miro_api/docs/TextDataPlatformbulkcreateoperation.md miro_api/docs/TextItem.md +miro_api/docs/TextItemsApi.md miro_api/docs/TextStyle.md miro_api/docs/TextUpdateRequest.md -miro_api/docs/TextsApi.md -miro_api/docs/TokenInformation.md -miro_api/docs/TokensApi.md +miro_api/docs/TokenContext.md miro_api/docs/UnGroup400Response.md miro_api/docs/UnGroup404Response.md miro_api/docs/UnGroup429Response.md @@ -497,6 +520,7 @@ miro_api/docs/UserGroupsApi.md miro_api/docs/UserInfoLastOpenedBy.md miro_api/docs/UserInfoShort.md miro_api/docs/UserInformation.md +miro_api/docs/UserInformation1.md miro_api/docs/UserListResponse.md miro_api/docs/UserResource.md miro_api/docs/UserResourceEmailsInner.md @@ -515,9 +539,13 @@ miro_api/docs/WidgetLinksPlatformFileUpload.md miro_api/docs/WidthOnlyAdjustableGeometry.md miro_api/exceptions.py miro_api/models/__init__.py +miro_api/models/access_token_response.py miro_api/models/actor.py miro_api/models/add_project_member_request.py miro_api/models/admin_role.py +miro_api/models/ai_interaction_log.py +miro_api/models/ai_interaction_log_actor.py +miro_api/models/ai_interaction_log_object.py miro_api/models/app_card_create_request.py miro_api/models/app_card_data.py miro_api/models/app_card_data_changes.py @@ -554,6 +582,7 @@ miro_api/models/board_export_task_export_link.py miro_api/models/board_export_task_result.py miro_api/models/board_format.py miro_api/models/board_item_content_log.py +miro_api/models/board_item_content_log_ai.py miro_api/models/board_links.py miro_api/models/board_member.py miro_api/models/board_member_changes.py @@ -587,6 +616,11 @@ miro_api/models/card_style_platformbulkcreateoperation.py miro_api/models/card_update_request.py miro_api/models/case_request.py miro_api/models/case_response.py +miro_api/models/code_widget_create_request.py +miro_api/models/code_widget_cursor_paged.py +miro_api/models/code_widget_data.py +miro_api/models/code_widget_item.py +miro_api/models/code_widget_update_request.py miro_api/models/connector_changes_data.py miro_api/models/connector_creation_data.py miro_api/models/connector_style.py @@ -687,6 +721,7 @@ miro_api/models/geometry_platform_tags.py miro_api/models/geometry_platformbulkcreateoperation.py miro_api/models/geometry_platformcreateitemsinbulkusingfilefromdevice.py miro_api/models/geometry_platformgroups.py +miro_api/models/get_ai_interaction_logs_response.py miro_api/models/get_all_groups200_response.py miro_api/models/get_all_groups400_response.py miro_api/models/get_all_groups404_response.py @@ -762,6 +797,7 @@ miro_api/models/mindmap_node_text_data.py miro_api/models/mindmap_node_view.py miro_api/models/mindmap_style.py miro_api/models/mindmap_widget_data_output.py +miro_api/models/miro_ai.py miro_api/models/modified_by.py miro_api/models/modified_by_platform_containers.py miro_api/models/modified_by_platform_experimental_features.py @@ -769,6 +805,7 @@ miro_api/models/modified_by_platform_file_upload.py miro_api/models/modified_by_platform_tags.py miro_api/models/modified_by_platformcreateitemsinbulkusingfilefromdevice.py miro_api/models/modified_by_platformgroups.py +miro_api/models/o_embed_data.py miro_api/models/organization.py miro_api/models/organization_information.py miro_api/models/organization_member.py @@ -885,7 +922,7 @@ miro_api/models/text_data_platformbulkcreateoperation.py miro_api/models/text_item.py miro_api/models/text_style.py miro_api/models/text_update_request.py -miro_api/models/token_information.py +miro_api/models/token_context.py miro_api/models/un_group400_response.py miro_api/models/un_group404_response.py miro_api/models/un_group429_response.py @@ -916,6 +953,7 @@ miro_api/models/user.py miro_api/models/user_info_last_opened_by.py miro_api/models/user_info_short.py miro_api/models/user_information.py +miro_api/models/user_information1.py miro_api/models/user_list_response.py miro_api/models/user_resource.py miro_api/models/user_resource_emails_inner.py @@ -934,18 +972,23 @@ miro_api/models/widget_links_platform_file_upload.py miro_api/models/width_only_adjustable_geometry.py miro_api/rest.py miro_api/test/__init__.py +miro_api/test/test_access_token_response.py miro_api/test/test_actor.py miro_api/test/test_add_project_member_request.py miro_api/test/test_admin_role.py +miro_api/test/test_ai_interaction_log.py +miro_api/test/test_ai_interaction_log_actor.py +miro_api/test/test_ai_interaction_log_object.py +miro_api/test/test_ai_interaction_logs_api.py miro_api/test/test_app_card_create_request.py miro_api/test/test_app_card_data.py miro_api/test/test_app_card_data_changes.py miro_api/test/test_app_card_data_response.py miro_api/test/test_app_card_item.py +miro_api/test/test_app_card_items_api.py miro_api/test/test_app_card_style.py miro_api/test/test_app_card_style_platformbulkcreateoperation.py miro_api/test/test_app_card_update_request.py -miro_api/test/test_app_cards_api.py miro_api/test/test_app_metrics_experimental_api.py miro_api/test/test_audit_context.py miro_api/test/test_audit_created_by.py @@ -981,6 +1024,7 @@ miro_api/test/test_board_export_task_export_link.py miro_api/test/test_board_export_task_result.py miro_api/test/test_board_format.py miro_api/test/test_board_item_content_log.py +miro_api/test/test_board_item_content_log_ai.py miro_api/test/test_board_links.py miro_api/test/test_board_member.py miro_api/test/test_board_member_changes.py @@ -1012,12 +1056,18 @@ miro_api/test/test_card_create_request.py miro_api/test/test_card_data.py miro_api/test/test_card_data_platformbulkcreateoperation.py miro_api/test/test_card_item.py +miro_api/test/test_card_items_api.py miro_api/test/test_card_style.py miro_api/test/test_card_style_platformbulkcreateoperation.py miro_api/test/test_card_update_request.py -miro_api/test/test_cards_api.py miro_api/test/test_case_request.py miro_api/test/test_case_response.py +miro_api/test/test_code_widget_create_request.py +miro_api/test/test_code_widget_cursor_paged.py +miro_api/test/test_code_widget_data.py +miro_api/test/test_code_widget_item.py +miro_api/test/test_code_widget_items_experimental_api.py +miro_api/test/test_code_widget_update_request.py miro_api/test/test_connector_changes_data.py miro_api/test/test_connector_creation_data.py miro_api/test/test_connector_style.py @@ -1070,6 +1120,7 @@ miro_api/test/test_document_data_response.py miro_api/test/test_document_data_response_platformcreateitemsinbulkusingfilefromdevice.py miro_api/test/test_document_item.py miro_api/test/test_document_item_platform_file_upload.py +miro_api/test/test_document_items_api.py miro_api/test/test_document_update_request.py miro_api/test/test_document_url_data.py miro_api/test/test_document_url_data_changes.py @@ -1079,11 +1130,11 @@ miro_api/test/test_embed_create_request.py miro_api/test/test_embed_data.py miro_api/test/test_embed_data_response.py miro_api/test/test_embed_item.py +miro_api/test/test_embed_items_api.py miro_api/test/test_embed_update_request.py miro_api/test/test_embed_url_data.py miro_api/test/test_embed_url_data_changes.py miro_api/test/test_embed_url_data_platformbulkcreateoperation.py -miro_api/test/test_embeds_api.py miro_api/test/test_enterprise_get_organization_members200_response.py miro_api/test/test_enterprise_update_board_export_job200_response.py miro_api/test/test_enterprise_update_board_export_job200_response_status.py @@ -1125,6 +1176,7 @@ miro_api/test/test_geometry_platform_tags.py miro_api/test/test_geometry_platformbulkcreateoperation.py miro_api/test/test_geometry_platformcreateitemsinbulkusingfilefromdevice.py miro_api/test/test_geometry_platformgroups.py +miro_api/test/test_get_ai_interaction_logs_response.py miro_api/test/test_get_all_groups200_response.py miro_api/test/test_get_all_groups400_response.py miro_api/test/test_get_all_groups404_response.py @@ -1161,6 +1213,7 @@ miro_api/test/test_image_data_response.py miro_api/test/test_image_data_response_platformcreateitemsinbulkusingfilefromdevice.py miro_api/test/test_image_item.py miro_api/test/test_image_item_platform_file_upload.py +miro_api/test/test_image_items_api.py miro_api/test/test_image_update_request.py miro_api/test/test_image_url_data.py miro_api/test/test_image_url_data_changes.py @@ -1206,6 +1259,7 @@ miro_api/test/test_mindmap_node_text_data.py miro_api/test/test_mindmap_node_view.py miro_api/test/test_mindmap_style.py miro_api/test/test_mindmap_widget_data_output.py +miro_api/test/test_miro_ai.py miro_api/test/test_modified_by.py miro_api/test/test_modified_by_platform_containers.py miro_api/test/test_modified_by_platform_experimental_features.py @@ -1214,6 +1268,8 @@ miro_api/test/test_modified_by_platform_tags.py miro_api/test/test_modified_by_platformcreateitemsinbulkusingfilefromdevice.py miro_api/test/test_modified_by_platformgroups.py miro_api/test/test_o_auth_api.py +miro_api/test/test_o_embed_data.py +miro_api/test/test_oembed_api.py miro_api/test/test_organization.py miro_api/test/test_organization_information.py miro_api/test/test_organization_member.py @@ -1287,11 +1343,11 @@ miro_api/test/test_shape_data_for_create.py miro_api/test/test_shape_data_for_update.py miro_api/test/test_shape_data_platform_tags.py miro_api/test/test_shape_item.py +miro_api/test/test_shape_items_api.py miro_api/test/test_shape_style.py miro_api/test/test_shape_style_for_create.py miro_api/test/test_shape_style_for_update.py miro_api/test/test_shape_update_request.py -miro_api/test/test_shapes_api.py miro_api/test/test_share_boards_with_groups_api.py miro_api/test/test_share_projects_with_groups_api.py miro_api/test/test_sharing_policy_settings.py @@ -1300,10 +1356,10 @@ miro_api/test/test_sticky_note_data.py miro_api/test/test_sticky_note_data_platform_tags.py miro_api/test/test_sticky_note_data_platformbulkcreateoperation.py miro_api/test/test_sticky_note_item.py +miro_api/test/test_sticky_note_items_api.py miro_api/test/test_sticky_note_style.py miro_api/test/test_sticky_note_style_platformbulkcreateoperation.py miro_api/test/test_sticky_note_update_request.py -miro_api/test/test_sticky_notes_api.py miro_api/test/test_subscription_data.py miro_api/test/test_tag.py miro_api/test/test_tag_create_request.py @@ -1343,11 +1399,10 @@ miro_api/test/test_text_data.py miro_api/test/test_text_data_platform_tags.py miro_api/test/test_text_data_platformbulkcreateoperation.py miro_api/test/test_text_item.py +miro_api/test/test_text_items_api.py miro_api/test/test_text_style.py miro_api/test/test_text_update_request.py -miro_api/test/test_texts_api.py -miro_api/test/test_token_information.py -miro_api/test/test_tokens_api.py +miro_api/test/test_token_context.py miro_api/test/test_un_group400_response.py miro_api/test/test_un_group404_response.py miro_api/test/test_un_group429_response.py @@ -1382,6 +1437,7 @@ miro_api/test/test_user_groups_api.py miro_api/test/test_user_info_last_opened_by.py miro_api/test/test_user_info_short.py miro_api/test/test_user_information.py +miro_api/test/test_user_information1.py miro_api/test/test_user_list_response.py miro_api/test/test_user_resource.py miro_api/test/test_user_resource_emails_inner.py diff --git a/packages/miro-api-python/miro_api/api/__init__.py b/packages/miro-api-python/miro_api/api/__init__.py index 99824730d..cc877c460 100644 --- a/packages/miro-api-python/miro_api/api/__init__.py +++ b/packages/miro-api-python/miro_api/api/__init__.py @@ -15,8 +15,17 @@ from typing_extensions import Annotated -from datetime import date +from datetime import datetime from pydantic import Field, StrictStr, field_validator +from typing import List, Optional +from miro_api.models.get_ai_interaction_logs_response import GetAiInteractionLogsResponse + +from pydantic import Field, StrictStr +from miro_api.models.app_card_create_request import AppCardCreateRequest +from miro_api.models.app_card_item import AppCardItem +from miro_api.models.app_card_update_request import AppCardUpdateRequest + +from datetime import date from typing import Optional from miro_api.models.get_metrics200_response_inner import GetMetrics200ResponseInner from miro_api.models.get_metrics_total200_response import GetMetricsTotal200Response @@ -24,8 +33,6 @@ from pydantic import Field, StrictInt, StrictStr, field_validator from miro_api.models.audit_page import AuditPage -from datetime import datetime -from typing import List, Optional from miro_api.models.get_board_item_content_logs_response import GetBoardItemContentLogsResponse from pydantic import Field, StrictInt, StrictStr @@ -39,7 +46,6 @@ from miro_api.models.enterprise_update_board_export_job200_response import EnterpriseUpdateBoardExportJob200Response from miro_api.models.enterprise_update_board_export_job_request import EnterpriseUpdateBoardExportJobRequest -from pydantic import Field, StrictStr from miro_api.models.board_data_classification_label import BoardDataClassificationLabel from miro_api.models.data_classification_label_id import DataClassificationLabelId @@ -50,17 +56,53 @@ from miro_api.models.update_boards_data_classification_label_request import UpdateBoardsDataClassificationLabelRequest from miro_api.models.update_team_settings_request import UpdateTeamSettingsRequest +from miro_api.models.board_member_changes import BoardMemberChanges +from miro_api.models.board_member_with_links import BoardMemberWithLinks +from miro_api.models.board_members_invite import BoardMembersInvite +from miro_api.models.board_members_paged_response import BoardMembersPagedResponse +from miro_api.models.invitation_result import InvitationResult + +from miro_api.models.board_changes import BoardChanges +from miro_api.models.board_with_links import BoardWithLinks +from miro_api.models.board_with_links_and_last_opened import BoardWithLinksAndLastOpened +from miro_api.models.board_with_links_and_without_project import BoardWithLinksAndWithoutProject +from miro_api.models.boards_paged_response import BoardsPagedResponse +from miro_api.models.copy_board_changes import CopyBoardChanges + from pydantic import Field, StrictBytes, StrictStr from typing import List, Union from miro_api.models.item_create import ItemCreate from miro_api.models.items import Items +from miro_api.models.card_create_request import CardCreateRequest +from miro_api.models.card_item import CardItem +from miro_api.models.card_update_request import CardUpdateRequest + +from miro_api.models.code_widget_create_request import CodeWidgetCreateRequest +from miro_api.models.code_widget_cursor_paged import CodeWidgetCursorPaged +from miro_api.models.code_widget_item import CodeWidgetItem +from miro_api.models.code_widget_update_request import CodeWidgetUpdateRequest +from miro_api.models.position_change import PositionChange + +from miro_api.models.connector_changes_data import ConnectorChangesData +from miro_api.models.connector_creation_data import ConnectorCreationData +from miro_api.models.connector_with_links import ConnectorWithLinks +from miro_api.models.connectors_cursor_paged import ConnectorsCursorPaged + from miro_api.models.resource_type import ResourceType from miro_api.models.resource_type_list_response import ResourceTypeListResponse from miro_api.models.schema_list_response import SchemaListResponse from miro_api.models.schema_resource import SchemaResource from miro_api.models.service_provider_config_response import ServiceProviderConfigResponse +from miro_api.models.document_create_request import DocumentCreateRequest +from miro_api.models.document_item import DocumentItem +from miro_api.models.document_update_request import DocumentUpdateRequest + +from miro_api.models.embed_create_request import EmbedCreateRequest +from miro_api.models.embed_item import EmbedItem +from miro_api.models.embed_update_request import EmbedUpdateRequest + from miro_api.models.generic_item import GenericItem from miro_api.models.generic_item_cursor_paged import GenericItemCursorPaged from miro_api.models.shape_create_request import ShapeCreateRequest @@ -71,6 +113,12 @@ from miro_api.models.group_resource import GroupResource from miro_api.models.patch_group_resource import PatchGroupResource +from miro_api.models.image_create_request import ImageCreateRequest +from miro_api.models.image_item import ImageItem +from miro_api.models.image_update_request import ImageUpdateRequest + +from miro_api.models.generic_item_update import GenericItemUpdate + from miro_api.models.case_request import CaseRequest from miro_api.models.case_response import CaseResponse from miro_api.models.legal_hold_request import LegalHoldRequest @@ -84,7 +132,9 @@ from miro_api.models.mindmap_cursor_paged import MindmapCursorPaged from miro_api.models.mindmap_item import MindmapItem +from miro_api.models.access_token_response import AccessTokenResponse from miro_api.models.revoke_token_request import RevokeTokenRequest +from miro_api.models.token_context import TokenContext from pydantic import Field, StrictBool, StrictStr, field_validator from miro_api.models.enterprise_get_organization_members200_response import EnterpriseGetOrganizationMembers200Response @@ -114,6 +164,10 @@ from miro_api.models.project_user_group import ProjectUserGroup from miro_api.models.project_user_groups_page import ProjectUserGroupsPage +from miro_api.models.sticky_note_create_request import StickyNoteCreateRequest +from miro_api.models.sticky_note_item import StickyNoteItem +from miro_api.models.sticky_note_update_request import StickyNoteUpdateRequest + from miro_api.models.team_member import TeamMember from miro_api.models.team_member_changes import TeamMemberChanges from miro_api.models.team_member_invite import TeamMemberInvite @@ -131,6 +185,10 @@ from miro_api.models.team_changes import TeamChanges from miro_api.models.teams_page import TeamsPage +from miro_api.models.text_create_request import TextCreateRequest +from miro_api.models.text_item import TextItem +from miro_api.models.text_update_request import TextUpdateRequest + from miro_api.models.create_user_resource import CreateUserResource from miro_api.models.patch_user_resource import PatchUserResource from miro_api.models.user_list_response import UserListResponse @@ -150,32 +208,6 @@ from miro_api.models.groups_page import GroupsPage from miro_api.models.update_group_request import UpdateGroupRequest -from miro_api.models.app_card_create_request import AppCardCreateRequest -from miro_api.models.app_card_item import AppCardItem -from miro_api.models.app_card_update_request import AppCardUpdateRequest - -from miro_api.models.board_member_changes import BoardMemberChanges -from miro_api.models.board_member_with_links import BoardMemberWithLinks -from miro_api.models.board_members_invite import BoardMembersInvite -from miro_api.models.board_members_paged_response import BoardMembersPagedResponse -from miro_api.models.invitation_result import InvitationResult - -from miro_api.models.board_changes import BoardChanges -from miro_api.models.board_with_links import BoardWithLinks -from miro_api.models.board_with_links_and_last_opened import BoardWithLinksAndLastOpened -from miro_api.models.board_with_links_and_without_project import BoardWithLinksAndWithoutProject -from miro_api.models.boards_paged_response import BoardsPagedResponse -from miro_api.models.copy_board_changes import CopyBoardChanges - -from miro_api.models.card_create_request import CardCreateRequest -from miro_api.models.card_item import CardItem -from miro_api.models.card_update_request import CardUpdateRequest - -from miro_api.models.connector_changes_data import ConnectorChangesData -from miro_api.models.connector_creation_data import ConnectorCreationData -from miro_api.models.connector_with_links import ConnectorWithLinks -from miro_api.models.connectors_cursor_paged import ConnectorsCursorPaged - from miro_api.models.doc_format_create_request import DocFormatCreateRequest from miro_api.models.doc_format_item import DocFormatItem @@ -183,15 +215,8 @@ from miro_api.models.create_document_item_using_file_from_device_request_data import ( CreateDocumentItemUsingFileFromDeviceRequestData, ) -from miro_api.models.document_create_request import DocumentCreateRequest -from miro_api.models.document_item import DocumentItem -from miro_api.models.document_update_request import DocumentUpdateRequest from miro_api.models.upload_file_from_device_data import UploadFileFromDeviceData -from miro_api.models.embed_create_request import EmbedCreateRequest -from miro_api.models.embed_item import EmbedItem -from miro_api.models.embed_update_request import EmbedUpdateRequest - from miro_api.models.frame_create_request import FrameCreateRequest from miro_api.models.frame_item import FrameItem from miro_api.models.frame_update_request import FrameUpdateRequest @@ -201,16 +226,8 @@ from miro_api.models.get_items_by_group_id200_response import GetItemsByGroupId200Response from miro_api.models.group_response_short import GroupResponseShort -from miro_api.models.image_create_request import ImageCreateRequest -from miro_api.models.image_item import ImageItem -from miro_api.models.image_update_request import ImageUpdateRequest - -from miro_api.models.generic_item_update import GenericItemUpdate - -from miro_api.models.sticky_note_create_request import StickyNoteCreateRequest -from miro_api.models.sticky_note_item import StickyNoteItem -from miro_api.models.sticky_note_update_request import StickyNoteUpdateRequest +from miro_api.models.o_embed_data import OEmbedData from miro_api.models.get_tags_response import GetTagsResponse from miro_api.models.item_paged_response import ItemPagedResponse @@ -219,12 +236,6 @@ from miro_api.models.tag_with_links import TagWithLinks from miro_api.models.tags_paged_response import TagsPagedResponse -from miro_api.models.text_create_request import TextCreateRequest -from miro_api.models.text_item import TextItem -from miro_api.models.text_update_request import TextUpdateRequest - -from miro_api.models.token_information import TokenInformation - from miro_api.api_client import ApiClient, RequestSerialized from miro_api.api_response import ApiResponse @@ -244,14 +255,51 @@ def __init__(self, api_client=None) -> None: self.api_client = api_client @validate_call - def get_metrics( + def enterprise_get_ai_interaction_logs( self, - app_id: Annotated[StrictStr, Field(description="ID of the app to get metrics for.")], - start_date: Annotated[ - date, Field(description="Start date of the period in UTC format. For example, 2024-12-31.") + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + var_from: Annotated[ + datetime, + Field( + description="Start date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified from - to time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " + ), ], - end_date: Annotated[date, Field(description="End date of the period in UTC format. For example, 2024-12-31.")], - period: Annotated[Optional[StrictStr], Field(description="Group data by this time period.")] = None, + to: Annotated[ + datetime, + Field( + description="End date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified from - to time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " + ), + ], + object_ids: Annotated[ + Optional[Annotated[List[StrictStr], Field(max_length=15)]], + Field( + description="List of object IDs used to retrieve AI interaction logs. Currently, supported object types include board IDs and organization IDs. You can obtain object IDs from the response of this endpoint (the object.id field), from other Platform API endpoints (for example, [Get boards API](https://developers.miro.com/reference/get-boards)), or from Miro UI URLs (board ID and organization ID from the URLs). " + ), + ] = None, + emails: Annotated[ + Optional[Annotated[List[StrictStr], Field(max_length=15)]], + Field( + description="Filters AI interaction logs using a list of user emails. Only AI interactions associated with the provided emails will be included in the response." + ), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " + ), + ] = None, + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. " + ), + ] = None, + sorting: Annotated[ + Optional[StrictStr], + Field( + description="Sort order in which you want to view the result set based on the interaction date. To sort by an ascending date, specify `asc`. To sort by a descending date, specify `desc`. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -261,19 +309,27 @@ def get_metrics( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[GetMetrics200ResponseInner]: - """Get app metrics + ) -> GetAiInteractionLogsResponse: + """Get AI interaction logs (Beta) - Returns a list of usage metrics for a specific app for a given time range, grouped by requested time period. This endpoint requires an app management API token. It can be generated in the Your Apps section of Developer Hub.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves AI interaction logs for your organization. AI interaction logs capture user interactions with AI features in Miro. You can retrieve results for a specific time period. You can also filter results based on object IDs and the emails of users who interacted with AI features. Additionally, results can be paginated for easier viewing and processing.

Required scope

aiinteractionlogs:read

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on.

- :param app_id: ID of the app to get metrics for. (required) - :type app_id: str - :param start_date: Start date of the period in UTC format. For example, 2024-12-31. (required) - :type start_date: date - :param end_date: End date of the period in UTC format. For example, 2024-12-31. (required) - :type end_date: date - :param period: Group data by this time period. - :type period: str + :param org_id: Unique identifier of the organization. (required) + :type org_id: str + :param var_from: Start date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified from - to time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) + :type var_from: datetime + :param to: End date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified from - to time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) + :type to: datetime + :param object_ids: List of object IDs used to retrieve AI interaction logs. Currently, supported object types include board IDs and organization IDs. You can obtain object IDs from the response of this endpoint (the object.id field), from other Platform API endpoints (for example, [Get boards API](https://developers.miro.com/reference/get-boards)), or from Miro UI URLs (board ID and organization ID from the URLs). + :type object_ids: List[str] + :param emails: Filters AI interaction logs using a list of user emails. Only AI interactions associated with the provided emails will be included in the response. + :type emails: List[str] + :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + :type cursor: str + :param limit: The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int + :param sorting: Sort order in which you want to view the result set based on the interaction date. To sort by an ascending date, specify `asc`. To sort by a descending date, specify `desc`. + :type sorting: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -296,11 +352,15 @@ def get_metrics( :return: Returns the result object. """ # noqa: E501 - _param = self._get_metrics_serialize( - app_id=app_id, - start_date=start_date, - end_date=end_date, - period=period, + _param = self._enterprise_get_ai_interaction_logs_serialize( + org_id=org_id, + var_from=var_from, + to=to, + object_ids=object_ids, + emails=emails, + cursor=cursor, + limit=limit, + sorting=sorting, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -308,8 +368,12 @@ def get_metrics( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[GetMetrics200ResponseInner]", - "404": "GetMetrics404Response", + "200": "GetAiInteractionLogsResponse", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -318,12 +382,16 @@ def get_metrics( response_types_map=_response_types_map, ).data - def _get_metrics_serialize( + def _enterprise_get_ai_interaction_logs_serialize( self, - app_id, - start_date, - end_date, - period, + org_id, + var_from, + to, + object_ids, + emails, + cursor, + limit, + sorting, _request_auth, _content_type, _headers, @@ -332,7 +400,10 @@ def _get_metrics_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "object_ids": "multi", + "emails": "multi", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -342,24 +413,40 @@ def _get_metrics_serialize( _body_params: Optional[bytes] = None # process the path parameters - if app_id is not None: - _path_params["app_id"] = app_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters - if start_date is not None: - if isinstance(start_date, date): - _query_params.append(("startDate", start_date.strftime(self.api_client.configuration.date_format))) + if object_ids is not None: + + _query_params.append(("object_ids", object_ids)) + + if emails is not None: + + _query_params.append(("emails", emails)) + + if var_from is not None: + if isinstance(var_from, datetime): + _query_params.append(("from", var_from.strftime(self.api_client.configuration.datetime_format))) else: - _query_params.append(("startDate", start_date)) + _query_params.append(("from", var_from)) - if end_date is not None: - if isinstance(end_date, date): - _query_params.append(("endDate", end_date.strftime(self.api_client.configuration.date_format))) + if to is not None: + if isinstance(to, datetime): + _query_params.append(("to", to.strftime(self.api_client.configuration.datetime_format))) else: - _query_params.append(("endDate", end_date)) + _query_params.append(("to", to)) - if period is not None: + if cursor is not None: - _query_params.append(("period", period)) + _query_params.append(("cursor", cursor)) + + if limit is not None: + + _query_params.append(("limit", limit)) + + if sorting is not None: + + _query_params.append(("sorting", sorting)) # process the header parameters # process the form parameters @@ -373,7 +460,7 @@ def _get_metrics_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2-experimental/apps/{app_id}/metrics", + resource_path="/v2/orgs/{org_id}/ai-interaction-logs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -387,9 +474,12 @@ def _get_metrics_serialize( ) @validate_call - def get_metrics_total( + def create_app_card_item( self, - app_id: Annotated[StrictStr, Field(description="ID of the app to get total metrics for.")], + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + ], + app_card_create_request: AppCardCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -399,13 +489,15 @@ def get_metrics_total( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetMetricsTotal200Response: - """Get total app metrics + ) -> AppCardItem: + """Create app card item - Returns total usage metrics for a specific app since the app was created. This endpoint requires an app management API token. It can be generated in your apps section of Developer Hub.

Required scope

boards:read

Rate limiting

Level 1
+ Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param app_id: ID of the app to get total metrics for. (required) - :type app_id: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param app_card_create_request: (required) + :type app_card_create_request: AppCardCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -428,8 +520,9 @@ def get_metrics_total( :return: Returns the result object. """ # noqa: E501 - _param = self._get_metrics_total_serialize( - app_id=app_id, + _param = self._create_app_card_item_serialize( + board_id=board_id, + app_card_create_request=app_card_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -437,8 +530,10 @@ def get_metrics_total( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GetMetricsTotal200Response", - "404": "GetMetricsTotal404Response", + "201": "AppCardItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -447,9 +542,10 @@ def get_metrics_total( response_types_map=_response_types_map, ).data - def _get_metrics_total_serialize( + def _create_app_card_item_serialize( self, - app_id, + board_id, + app_card_create_request, _request_auth, _content_type, _headers, @@ -468,22 +564,32 @@ def _get_metrics_total_serialize( _body_params: Optional[bytes] = None # process the path parameters - if app_id is not None: - _path_params["app_id"] = app_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if app_card_create_request is not None: + _body_params = app_card_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2-experimental/apps/{app_id}/metrics-total", + method="POST", + resource_path="/v2/boards/{board_id}/app_cards", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -497,38 +603,12 @@ def _get_metrics_total_serialize( ) @validate_call - def enterprise_get_audit_logs( + def delete_app_card_item( self, - created_after: Annotated[ - StrictStr, - Field( - description='Retrieve audit logs created after the date and time provided. This is the start date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-03-30T17:26:50.000Z` as the value for the `createdAfter` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC))." ' - ), - ], - created_before: Annotated[ - StrictStr, - Field( - description="Retrieve audit logs created before the date and time provided. This is the end date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-04-30T17:26:50.000Z` as the value for the `createdBefore` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete an item.") ], - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the appropriate cursor value returned in the response." - ), - ] = None, - limit: Annotated[ - Optional[StrictInt], - Field( - description="Maximum number of results returned based on the `limit` specified in the request. For example, if there are `30` results, the request has no `cursor` value, and the `limit` is set to `20`,the `size` of the results will be `20`. The rest of the results will not be returned. To retrieve the rest of the results, you must make another request and set the appropriate value for the `cursor` parameter value that you obtained from the response.
Default: `100` " - ), - ] = None, - sorting: Annotated[ - Optional[StrictStr], - Field( - description="Sort order in which you want to view the result set. Based on the value you provide, the results are sorted in an ascending or descending order of the audit log creation date (audit log `createdAt` parameter).
Default: `ASC` " - ), - ] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -538,21 +618,15 @@ def enterprise_get_audit_logs( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AuditPage: - """Get audit logs + ) -> object: + """Delete app card item - Retrieves a page of audit events from the last 90 days. If you want to retrieve data that is older than 90 days, you can use the CSV export feature.

Required scope

auditlogs:read

Rate limiting

Level 2 + Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
- :param created_after: Retrieve audit logs created after the date and time provided. This is the start date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-03-30T17:26:50.000Z` as the value for the `createdAfter` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\" (required) - :type created_after: str - :param created_before: Retrieve audit logs created before the date and time provided. This is the end date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-04-30T17:26:50.000Z` as the value for the `createdBefore` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) - :type created_before: str - :param cursor: A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the appropriate cursor value returned in the response. - :type cursor: str - :param limit: Maximum number of results returned based on the `limit` specified in the request. For example, if there are `30` results, the request has no `cursor` value, and the `limit` is set to `20`,the `size` of the results will be `20`. The rest of the results will not be returned. To retrieve the rest of the results, you must make another request and set the appropriate value for the `cursor` parameter value that you obtained from the response.
Default: `100` - :type limit: int - :param sorting: Sort order in which you want to view the result set. Based on the value you provide, the results are sorted in an ascending or descending order of the audit log creation date (audit log `createdAt` parameter).
Default: `ASC` - :type sorting: str + :param board_id: Unique identifier (ID) of the board from which you want to delete an item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -575,12 +649,9 @@ def enterprise_get_audit_logs( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_audit_logs_serialize( - created_after=created_after, - created_before=created_before, - cursor=cursor, - limit=limit, - sorting=sorting, + _param = self._delete_app_card_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -588,12 +659,9 @@ def enterprise_get_audit_logs( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AuditPage", + "204": "object", "400": None, - "401": None, - "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -603,13 +671,10 @@ def enterprise_get_audit_logs( response_types_map=_response_types_map, ).data - def _enterprise_get_audit_logs_serialize( + def _delete_app_card_item_serialize( self, - created_after, - created_before, - cursor, - limit, - sorting, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -628,27 +693,11 @@ def _enterprise_get_audit_logs_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if created_after is not None: - - _query_params.append(("createdAfter", created_after)) - - if created_before is not None: - - _query_params.append(("createdBefore", created_before)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if limit is not None: - - _query_params.append(("limit", limit)) - - if sorting is not None: - - _query_params.append(("sorting", sorting)) - # process the header parameters # process the form parameters # process the body parameter @@ -660,8 +709,8 @@ def _enterprise_get_audit_logs_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/audit/logs", + method="DELETE", + resource_path="/v2/boards/{board_id}/app_cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -675,49 +724,15 @@ def _enterprise_get_audit_logs_serialize( ) @validate_call - def enterprise_board_content_item_logs_fetch( + def get_app_card_item( self, - org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - var_from: Annotated[ - datetime, - Field( - description="Filter content logs based on the date and time when the board item was last modified. This is the start date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " - ), + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), ], - to: Annotated[ - datetime, - Field( - description="Filter content logs based on the date and time when the board item was last modified. This is the end date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " - ), + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - board_ids: Annotated[ - Optional[Annotated[List[StrictStr], Field(max_length=15)]], - Field(description="List of board IDs for which you want to retrieve the content logs."), - ] = None, - emails: Annotated[ - Optional[Annotated[List[StrictStr], Field(max_length=15)]], - Field( - description="Filter content logs based on the list of emails of users who created, modified, or deleted the board item." - ), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " - ), - ] = None, - limit: Annotated[ - Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], - Field( - description="The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. " - ), - ] = None, - sorting: Annotated[ - Optional[StrictStr], - Field( - description="Sort order in which you want to view the result set based on the modified date. To sort by an ascending modified date, specify `asc`. To sort by a descending modified date, specify `desc`. " - ), - ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -727,27 +742,15 @@ def enterprise_board_content_item_logs_fetch( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetBoardItemContentLogsResponse: - """Retrieve content change logs of board items + ) -> AppCardItem: + """Get app card item - Retrieves content changes for board items within your organization. Content changes are actions that users can perform on board items, such as updating a sticky note's text. You can retrieve results for a specific time period. You can also filter results based on the board IDs and the emails of users who created, modified, or deleted a board item. Additionally, results can be paginated for easier viewing and processing.

Required scope

contentlogs:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin.

+ Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: Unique identifier of the organization. (required) - :type org_id: str - :param var_from: Filter content logs based on the date and time when the board item was last modified. This is the start date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) - :type var_from: datetime - :param to: Filter content logs based on the date and time when the board item was last modified. This is the end date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) - :type to: datetime - :param board_ids: List of board IDs for which you want to retrieve the content logs. - :type board_ids: List[str] - :param emails: Filter content logs based on the list of emails of users who created, modified, or deleted the board item. - :type emails: List[str] - :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. - :type cursor: str - :param limit: The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. - :type limit: int - :param sorting: Sort order in which you want to view the result set based on the modified date. To sort by an ascending modified date, specify `asc`. To sort by a descending modified date, specify `desc`. - :type sorting: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -770,15 +773,9 @@ def enterprise_board_content_item_logs_fetch( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_board_content_item_logs_fetch_serialize( - org_id=org_id, - var_from=var_from, - to=to, - board_ids=board_ids, - emails=emails, - cursor=cursor, - limit=limit, - sorting=sorting, + _param = self._get_app_card_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -786,10 +783,8 @@ def enterprise_board_content_item_logs_fetch( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GetBoardItemContentLogsResponse", + "200": "AppCardItem", "400": None, - "401": None, - "403": None, "404": None, "429": None, } @@ -800,16 +795,10 @@ def enterprise_board_content_item_logs_fetch( response_types_map=_response_types_map, ).data - def _enterprise_board_content_item_logs_fetch_serialize( + def _get_app_card_item_serialize( self, - org_id, - var_from, - to, - board_ids, - emails, - cursor, - limit, - sorting, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -818,10 +807,7 @@ def _enterprise_board_content_item_logs_fetch_serialize( _host = None - _collection_formats: Dict[str, str] = { - "board_ids": "multi", - "emails": "multi", - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -831,41 +817,11 @@ def _enterprise_board_content_item_logs_fetch_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if board_ids is not None: - - _query_params.append(("board_ids", board_ids)) - - if emails is not None: - - _query_params.append(("emails", emails)) - - if var_from is not None: - if isinstance(var_from, datetime): - _query_params.append(("from", var_from.strftime(self.api_client.configuration.datetime_format))) - else: - _query_params.append(("from", var_from)) - - if to is not None: - if isinstance(to, datetime): - _query_params.append(("to", to.strftime(self.api_client.configuration.datetime_format))) - else: - _query_params.append(("to", to)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if limit is not None: - - _query_params.append(("limit", limit)) - - if sorting is not None: - - _query_params.append(("sorting", sorting)) - # process the header parameters # process the form parameters # process the body parameter @@ -878,7 +834,7 @@ def _enterprise_board_content_item_logs_fetch_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/content-logs/items", + resource_path="/v2/boards/{board_id}/app_cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -892,10 +848,13 @@ def _enterprise_board_content_item_logs_fetch_serialize( ) @validate_call - def enterprise_board_export_job_results( + def update_app_card_item( self, - org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - job_id: Annotated[StrictStr, Field(description="Unique identifier of the job.")], + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + app_card_update_request: AppCardUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -905,15 +864,17 @@ def enterprise_board_export_job_results( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportResult: - """Get results for board export job + ) -> AppCardItem: + """Update app card item - Retrieves the result of the board export job. The response provides more information about the board export job, such as the S3 link to the files created.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Updates an app card item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: Unique identifier of the organization. (required) - :type org_id: str - :param job_id: Unique identifier of the job. (required) - :type job_id: str + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param app_card_update_request: (required) + :type app_card_update_request: AppCardUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -936,9 +897,10 @@ def enterprise_board_export_job_results( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_board_export_job_results_serialize( - org_id=org_id, - job_id=job_id, + _param = self._update_app_card_item_serialize( + board_id=board_id, + item_id=item_id, + app_card_update_request=app_card_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -946,11 +908,10 @@ def enterprise_board_export_job_results( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportResult", + "200": "AppCardItem", "400": None, - "401": None, - "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -960,10 +921,11 @@ def enterprise_board_export_job_results( response_types_map=_response_types_map, ).data - def _enterprise_board_export_job_results_serialize( + def _update_app_card_item_serialize( self, - org_id, - job_id, + board_id, + item_id, + app_card_update_request, _request_auth, _content_type, _headers, @@ -982,24 +944,34 @@ def _enterprise_board_export_job_results_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if job_id is not None: - _path_params["job_id"] = job_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if app_card_update_request is not None: + _body_params = app_card_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/results", + method="PATCH", + resource_path="/v2/boards/{board_id}/app_cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1013,10 +985,14 @@ def _enterprise_board_export_job_results_serialize( ) @validate_call - def enterprise_board_export_job_status( + def get_metrics( self, - org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], + app_id: Annotated[StrictStr, Field(description="ID of the app to get metrics for.")], + start_date: Annotated[ + date, Field(description="Start date of the period in UTC format. For example, 2024-12-31.") + ], + end_date: Annotated[date, Field(description="End date of the period in UTC format. For example, 2024-12-31.")], + period: Annotated[Optional[StrictStr], Field(description="Group data by this time period.")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1026,15 +1002,19 @@ def enterprise_board_export_job_status( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportJobStatus: - """Get board export job status + ) -> List[GetMetrics200ResponseInner]: + """Get app metrics - Retrieves the status of the board export job.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Returns a list of usage metrics for a specific app for a given time range, grouped by requested time period. This endpoint requires an app management API token. It can be generated in the Your Apps section of Developer Hub.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: Unique identifier of the organization. (required) - :type org_id: str - :param job_id: Unique identifier of the board export job. (required) - :type job_id: str + :param app_id: ID of the app to get metrics for. (required) + :type app_id: str + :param start_date: Start date of the period in UTC format. For example, 2024-12-31. (required) + :type start_date: date + :param end_date: End date of the period in UTC format. For example, 2024-12-31. (required) + :type end_date: date + :param period: Group data by this time period. + :type period: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1057,9 +1037,11 @@ def enterprise_board_export_job_status( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_board_export_job_status_serialize( - org_id=org_id, - job_id=job_id, + _param = self._get_metrics_serialize( + app_id=app_id, + start_date=start_date, + end_date=end_date, + period=period, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1067,12 +1049,8 @@ def enterprise_board_export_job_status( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportJobStatus", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "List[GetMetrics200ResponseInner]", + "404": "GetMetrics404Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1081,10 +1059,12 @@ def enterprise_board_export_job_status( response_types_map=_response_types_map, ).data - def _enterprise_board_export_job_status_serialize( + def _get_metrics_serialize( self, - org_id, - job_id, + app_id, + start_date, + end_date, + period, _request_auth, _content_type, _headers, @@ -1103,11 +1083,25 @@ def _enterprise_board_export_job_status_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if job_id is not None: - _path_params["job_id"] = job_id + if app_id is not None: + _path_params["app_id"] = app_id # process the query parameters + if start_date is not None: + if isinstance(start_date, date): + _query_params.append(("startDate", start_date.strftime(self.api_client.configuration.date_format))) + else: + _query_params.append(("startDate", start_date)) + + if end_date is not None: + if isinstance(end_date, date): + _query_params.append(("endDate", end_date.strftime(self.api_client.configuration.date_format))) + else: + _query_params.append(("endDate", end_date)) + + if period is not None: + + _query_params.append(("period", period)) + # process the header parameters # process the form parameters # process the body parameter @@ -1120,7 +1114,7 @@ def _enterprise_board_export_job_status_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}", + resource_path="/v2-experimental/apps/{app_id}/metrics", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1134,28 +1128,9 @@ def _enterprise_board_export_job_status_serialize( ) @validate_call - def enterprise_board_export_job_tasks( + def get_metrics_total( self, - org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], - status: Annotated[ - Optional[List[StrictStr]], - Field( - description="Filters the list of board export tasks by their status. Accepts an array of statuses such as TASK_STATUS_CREATED, TASK_STATUS_CANCELLED, TASK_STATUS_SCHEDULED, TASK_STATUS_SUCCESS or TASK_STATUS_ERROR." - ), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " - ), - ] = None, - limit: Annotated[ - Optional[Annotated[int, Field(le=500, strict=True, ge=1)]], - Field( - description="The maximum number of results to return per call. If the number of tasks in the response is greater than the limit specified, the response returns the cursor parameter with a value. " - ), - ] = None, + app_id: Annotated[StrictStr, Field(description="ID of the app to get total metrics for.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1165,21 +1140,13 @@ def enterprise_board_export_job_tasks( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportJobTasksList: - """Get board export job tasks list + ) -> GetMetricsTotal200Response: + """Get total app metrics - Retrieves the list of tasks for the board export job.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Returns total usage metrics for a specific app since the app was created. This endpoint requires an app management API token. It can be generated in your apps section of Developer Hub.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: Unique identifier of the organization. (required) - :type org_id: str - :param job_id: Unique identifier of the board export job. (required) - :type job_id: str - :param status: Filters the list of board export tasks by their status. Accepts an array of statuses such as TASK_STATUS_CREATED, TASK_STATUS_CANCELLED, TASK_STATUS_SCHEDULED, TASK_STATUS_SUCCESS or TASK_STATUS_ERROR. - :type status: List[str] - :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. - :type cursor: str - :param limit: The maximum number of results to return per call. If the number of tasks in the response is greater than the limit specified, the response returns the cursor parameter with a value. - :type limit: int + :param app_id: ID of the app to get total metrics for. (required) + :type app_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1202,12 +1169,8 @@ def enterprise_board_export_job_tasks( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_board_export_job_tasks_serialize( - org_id=org_id, - job_id=job_id, - status=status, - cursor=cursor, - limit=limit, + _param = self._get_metrics_total_serialize( + app_id=app_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1215,12 +1178,8 @@ def enterprise_board_export_job_tasks( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportJobTasksList", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "GetMetricsTotal200Response", + "404": "GetMetricsTotal404Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1229,13 +1188,9 @@ def enterprise_board_export_job_tasks( response_types_map=_response_types_map, ).data - def _enterprise_board_export_job_tasks_serialize( + def _get_metrics_total_serialize( self, - org_id, - job_id, - status, - cursor, - limit, + app_id, _request_auth, _content_type, _headers, @@ -1244,9 +1199,7 @@ def _enterprise_board_export_job_tasks_serialize( _host = None - _collection_formats: Dict[str, str] = { - "status": "multi", - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1256,26 +1209,12 @@ def _enterprise_board_export_job_tasks_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if job_id is not None: - _path_params["job_id"] = job_id + if app_id is not None: + _path_params["app_id"] = app_id # process the query parameters - if status is not None: - - _query_params.append(("status", status)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if limit is not None: - - _query_params.append(("limit", limit)) - - # process the header parameters - # process the form parameters - # process the body parameter + # process the header parameters + # process the form parameters + # process the body parameter # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -1285,7 +1224,7 @@ def _enterprise_board_export_job_tasks_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks", + resource_path="/v2-experimental/apps/{app_id}/metrics-total", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1299,28 +1238,36 @@ def _enterprise_board_export_job_tasks_serialize( ) @validate_call - def enterprise_board_export_jobs( + def enterprise_get_audit_logs( self, - org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - status: Annotated[ - Optional[List[StrictStr]], + created_after: Annotated[ + StrictStr, Field( - description="Status of the board export jobs that you want to retrieve, such as JOB_STATUS_CREATED, JOB_STATUS_IN_PROGRESS, JOB_STATUS_CANCELLED or JOB_STATUS_FINISHED." + description='Retrieve audit logs created after the date and time provided. This is the start date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-03-30T17:26:50.000Z` as the value for the `createdAfter` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC))." ' ), - ] = None, - creator_id: Annotated[ - Optional[List[StrictInt]], Field(description="Unique identifier of the board export job creator.") - ] = None, + ], + created_before: Annotated[ + StrictStr, + Field( + description="Retrieve audit logs created before the date and time provided. This is the end date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-04-30T17:26:50.000Z` as the value for the `createdBefore` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " + ), + ], cursor: Annotated[ Optional[StrictStr], Field( - description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " + description="A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the appropriate cursor value returned in the response." ), ] = None, limit: Annotated[ - Optional[Annotated[int, Field(le=500, strict=True, ge=1)]], + Optional[StrictInt], Field( - description="The maximum number of results to return per call. If the number of jobs in the response is greater than the limit specified, the response returns the cursor parameter with a value. " + description="Maximum number of results returned based on the `limit` specified in the request. For example, if there are `30` results, the request has no `cursor` value, and the `limit` is set to `20`,the `size` of the results will be `20`. The rest of the results will not be returned. To retrieve the rest of the results, you must make another request and set the appropriate value for the `cursor` parameter value that you obtained from the response.
Default: `100` " + ), + ] = None, + sorting: Annotated[ + Optional[StrictStr], + Field( + description="Sort order in which you want to view the result set. Based on the value you provide, the results are sorted in an ascending or descending order of the audit log creation date (audit log `createdAt` parameter).
Default: `ASC` " ), ] = None, _request_timeout: Union[ @@ -1332,21 +1279,21 @@ def enterprise_board_export_jobs( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportJobsList: - """Get board export jobs list + ) -> AuditPage: + """Get audit logs - Retrieves the list of board export jobs based on the filters provided in the request.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Retrieves a page of audit events from the last 90 days. If you want to retrieve data that is older than 90 days, you can use the CSV export feature.

Required scope

auditlogs:read

Rate limiting

Level 2 - :param org_id: Unique identifier of the organization. (required) - :type org_id: str - :param status: Status of the board export jobs that you want to retrieve, such as JOB_STATUS_CREATED, JOB_STATUS_IN_PROGRESS, JOB_STATUS_CANCELLED or JOB_STATUS_FINISHED. - :type status: List[str] - :param creator_id: Unique identifier of the board export job creator. - :type creator_id: List[int] - :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + :param created_after: Retrieve audit logs created after the date and time provided. This is the start date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-03-30T17:26:50.000Z` as the value for the `createdAfter` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\" (required) + :type created_after: str + :param created_before: Retrieve audit logs created before the date and time provided. This is the end date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-04-30T17:26:50.000Z` as the value for the `createdBefore` parameter.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) + :type created_before: str + :param cursor: A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the appropriate cursor value returned in the response. :type cursor: str - :param limit: The maximum number of results to return per call. If the number of jobs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :param limit: Maximum number of results returned based on the `limit` specified in the request. For example, if there are `30` results, the request has no `cursor` value, and the `limit` is set to `20`,the `size` of the results will be `20`. The rest of the results will not be returned. To retrieve the rest of the results, you must make another request and set the appropriate value for the `cursor` parameter value that you obtained from the response.
Default: `100` :type limit: int + :param sorting: Sort order in which you want to view the result set. Based on the value you provide, the results are sorted in an ascending or descending order of the audit log creation date (audit log `createdAt` parameter).
Default: `ASC` + :type sorting: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1369,12 +1316,12 @@ def enterprise_board_export_jobs( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_board_export_jobs_serialize( - org_id=org_id, - status=status, - creator_id=creator_id, + _param = self._enterprise_get_audit_logs_serialize( + created_after=created_after, + created_before=created_before, cursor=cursor, limit=limit, + sorting=sorting, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1382,11 +1329,12 @@ def enterprise_board_export_jobs( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportJobsList", + "200": "AuditPage", "400": None, "401": None, "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1396,13 +1344,13 @@ def enterprise_board_export_jobs( response_types_map=_response_types_map, ).data - def _enterprise_board_export_jobs_serialize( + def _enterprise_get_audit_logs_serialize( self, - org_id, - status, - creator_id, + created_after, + created_before, cursor, limit, + sorting, _request_auth, _content_type, _headers, @@ -1411,10 +1359,7 @@ def _enterprise_board_export_jobs_serialize( _host = None - _collection_formats: Dict[str, str] = { - "status": "multi", - "creatorId": "multi", - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1424,16 +1369,14 @@ def _enterprise_board_export_jobs_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id # process the query parameters - if status is not None: + if created_after is not None: - _query_params.append(("status", status)) + _query_params.append(("createdAfter", created_after)) - if creator_id is not None: + if created_before is not None: - _query_params.append(("creatorId", creator_id)) + _query_params.append(("createdBefore", created_before)) if cursor is not None: @@ -1443,6 +1386,10 @@ def _enterprise_board_export_jobs_serialize( _query_params.append(("limit", limit)) + if sorting is not None: + + _query_params.append(("sorting", sorting)) + # process the header parameters # process the form parameters # process the body parameter @@ -1455,7 +1402,7 @@ def _enterprise_board_export_jobs_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/boards/export/jobs", + resource_path="/v2/audit/logs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1469,11 +1416,49 @@ def _enterprise_board_export_jobs_serialize( ) @validate_call - def enterprise_create_board_export( + def enterprise_board_content_item_logs_fetch( self, org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - request_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], - create_board_export_request: CreateBoardExportRequest, + var_from: Annotated[ + datetime, + Field( + description="Filter content logs based on the date and time when the board item was last modified. This is the start date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " + ), + ], + to: Annotated[ + datetime, + Field( + description="Filter content logs based on the date and time when the board item was last modified. This is the end date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). " + ), + ], + board_ids: Annotated[ + Optional[Annotated[List[StrictStr], Field(max_length=15)]], + Field(description="List of board IDs for which you want to retrieve the content logs."), + ] = None, + emails: Annotated[ + Optional[Annotated[List[StrictStr], Field(max_length=15)]], + Field( + description="Filter content logs based on the list of emails of users who created, modified, or deleted the board item." + ), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " + ), + ] = None, + limit: Annotated[ + Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. " + ), + ] = None, + sorting: Annotated[ + Optional[StrictStr], + Field( + description="Sort order in which you want to view the result set based on the modified date. To sort by an ascending modified date, specify `asc`. To sort by a descending modified date, specify `desc`. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1483,17 +1468,27 @@ def enterprise_create_board_export( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportJobId: - """Create board export job + ) -> GetBoardItemContentLogsResponse: + """Retrieve content change logs of board items - Creates an export job for one or more boards.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Retrieves content changes for board items within your organization. Content changes are actions that users can perform on board items, such as updating a sticky note's text. You can retrieve results for a specific time period. You can also filter results based on the board IDs and the emails of users who created, modified, or deleted a board item. Additionally, results can be paginated for easier viewing and processing.

Required scope

contentlogs:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin.

:param org_id: Unique identifier of the organization. (required) :type org_id: str - :param request_id: Unique identifier of the board export job. (required) - :type request_id: str - :param create_board_export_request: (required) - :type create_board_export_request: CreateBoardExportRequest + :param var_from: Filter content logs based on the date and time when the board item was last modified. This is the start date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) + :type var_from: datetime + :param to: Filter content logs based on the date and time when the board item was last modified. This is the end date and time for the modified date duration. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). (required) + :type to: datetime + :param board_ids: List of board IDs for which you want to retrieve the content logs. + :type board_ids: List[str] + :param emails: Filter content logs based on the list of emails of users who created, modified, or deleted the board item. + :type emails: List[str] + :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + :type cursor: str + :param limit: The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int + :param sorting: Sort order in which you want to view the result set based on the modified date. To sort by an ascending modified date, specify `asc`. To sort by a descending modified date, specify `desc`. + :type sorting: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1516,10 +1511,15 @@ def enterprise_create_board_export( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_board_export_serialize( + _param = self._enterprise_board_content_item_logs_fetch_serialize( org_id=org_id, - request_id=request_id, - create_board_export_request=create_board_export_request, + var_from=var_from, + to=to, + board_ids=board_ids, + emails=emails, + cursor=cursor, + limit=limit, + sorting=sorting, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1527,12 +1527,11 @@ def enterprise_create_board_export( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportJobId", + "200": "GetBoardItemContentLogsResponse", "400": None, "401": None, "403": None, "404": None, - "425": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1542,11 +1541,16 @@ def enterprise_create_board_export( response_types_map=_response_types_map, ).data - def _enterprise_create_board_export_serialize( + def _enterprise_board_content_item_logs_fetch_serialize( self, org_id, - request_id, - create_board_export_request, + var_from, + to, + board_ids, + emails, + cursor, + limit, + sorting, _request_auth, _content_type, _headers, @@ -1555,7 +1559,10 @@ def _enterprise_create_board_export_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "board_ids": "multi", + "emails": "multi", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1568,33 +1575,51 @@ def _enterprise_create_board_export_serialize( if org_id is not None: _path_params["org_id"] = org_id # process the query parameters - if request_id is not None: + if board_ids is not None: - _query_params.append(("request_id", request_id)) + _query_params.append(("board_ids", board_ids)) + + if emails is not None: + + _query_params.append(("emails", emails)) + + if var_from is not None: + if isinstance(var_from, datetime): + _query_params.append(("from", var_from.strftime(self.api_client.configuration.datetime_format))) + else: + _query_params.append(("from", var_from)) + + if to is not None: + if isinstance(to, datetime): + _query_params.append(("to", to.strftime(self.api_client.configuration.datetime_format))) + else: + _query_params.append(("to", to)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if limit is not None: + + _query_params.append(("limit", limit)) + + if sorting is not None: + + _query_params.append(("sorting", sorting)) # process the header parameters # process the form parameters # process the body parameter - if create_board_export_request is not None: - _body_params = create_board_export_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/boards/export/jobs", + method="GET", + resource_path="/v2/orgs/{org_id}/content-logs/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1608,11 +1633,10 @@ def _enterprise_create_board_export_serialize( ) @validate_call - def enterprise_create_board_export_task_export_link( + def enterprise_board_export_job_results( self, org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], - job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], - task_id: Annotated[StrictStr, Field(description="Unique identifier of the board export task.")], + job_id: Annotated[StrictStr, Field(description="Unique identifier of the job.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1622,17 +1646,15 @@ def enterprise_create_board_export_task_export_link( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardExportTaskExportLink: - """Create task export link + ) -> BoardExportResult: + """Get results for board export job - Creates a link to download the results of a board export task.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the result of the board export job. The response provides more information about the board export job, such as the S3 link to the files created.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

:param org_id: Unique identifier of the organization. (required) :type org_id: str - :param job_id: Unique identifier of the board export job. (required) + :param job_id: Unique identifier of the job. (required) :type job_id: str - :param task_id: Unique identifier of the board export task. (required) - :type task_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1655,10 +1677,9 @@ def enterprise_create_board_export_task_export_link( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_board_export_task_export_link_serialize( + _param = self._enterprise_board_export_job_results_serialize( org_id=org_id, job_id=job_id, - task_id=task_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1666,12 +1687,11 @@ def enterprise_create_board_export_task_export_link( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportTaskExportLink", + "200": "BoardExportResult", "400": None, "401": None, "403": None, "404": None, - "425": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1681,11 +1701,10 @@ def enterprise_create_board_export_task_export_link( response_types_map=_response_types_map, ).data - def _enterprise_create_board_export_task_export_link_serialize( + def _enterprise_board_export_job_results_serialize( self, org_id, job_id, - task_id, _request_auth, _content_type, _headers, @@ -1708,8 +1727,6 @@ def _enterprise_create_board_export_task_export_link_serialize( _path_params["org_id"] = org_id if job_id is not None: _path_params["job_id"] = job_id - if task_id is not None: - _path_params["task_id"] = task_id # process the query parameters # process the header parameters # process the form parameters @@ -1722,8 +1739,8 @@ def _enterprise_create_board_export_task_export_link_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks/{task_id}/export-link", + method="GET", + resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/results", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1737,11 +1754,10 @@ def _enterprise_create_board_export_task_export_link_serialize( ) @validate_call - def enterprise_update_board_export_job( + def enterprise_board_export_job_status( self, org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], - enterprise_update_board_export_job_request: Optional[EnterpriseUpdateBoardExportJobRequest] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1751,17 +1767,15 @@ def enterprise_update_board_export_job( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> EnterpriseUpdateBoardExportJob200Response: - """Update board export job status + ) -> BoardExportJobStatus: + """Get board export job status - Updates the status of the board export job.
Currently, only the cancellation of an ongoing export job is supported.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the status of the board export job.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

:param org_id: Unique identifier of the organization. (required) :type org_id: str :param job_id: Unique identifier of the board export job. (required) :type job_id: str - :param enterprise_update_board_export_job_request: - :type enterprise_update_board_export_job_request: EnterpriseUpdateBoardExportJobRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1784,10 +1798,9 @@ def enterprise_update_board_export_job( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_board_export_job_serialize( + _param = self._enterprise_board_export_job_status_serialize( org_id=org_id, job_id=job_id, - enterprise_update_board_export_job_request=enterprise_update_board_export_job_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1795,7 +1808,7 @@ def enterprise_update_board_export_job( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "EnterpriseUpdateBoardExportJob200Response", + "200": "BoardExportJobStatus", "400": None, "401": None, "403": None, @@ -1809,11 +1822,10 @@ def enterprise_update_board_export_job( response_types_map=_response_types_map, ).data - def _enterprise_update_board_export_job_serialize( + def _enterprise_board_export_job_status_serialize( self, org_id, job_id, - enterprise_update_board_export_job_request, _request_auth, _content_type, _headers, @@ -1840,26 +1852,16 @@ def _enterprise_update_board_export_job_serialize( # process the header parameters # process the form parameters # process the body parameter - if enterprise_update_board_export_job_request is not None: - _body_params = enterprise_update_board_export_job_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/status", + method="GET", + resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1873,11 +1875,28 @@ def _enterprise_update_board_export_job_serialize( ) @validate_call - def enterprise_dataclassification_board_get( + def enterprise_board_export_job_tasks( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - team_id: Annotated[StrictStr, Field(description="id of the team")], - board_id: Annotated[StrictStr, Field(description="Unique identifier of the board that you want to retrieve.")], + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], + status: Annotated[ + Optional[List[StrictStr]], + Field( + description="Filters the list of board export tasks by their status. Accepts an array of statuses such as TASK_STATUS_CREATED, TASK_STATUS_CANCELLED, TASK_STATUS_SCHEDULED, TASK_STATUS_SUCCESS or TASK_STATUS_ERROR." + ), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " + ), + ] = None, + limit: Annotated[ + Optional[Annotated[int, Field(le=500, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of tasks in the response is greater than the limit specified, the response returns the cursor parameter with a value. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1887,17 +1906,21 @@ def enterprise_dataclassification_board_get( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardDataClassificationLabel: - """Get board classification + ) -> BoardExportJobTasksList: + """Get board export job tasks list - Retrieves board classification for a board.

Required scope

boards:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of tasks for the board export job.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

- :param org_id: id of the organization (required) + :param org_id: Unique identifier of the organization. (required) :type org_id: str - :param team_id: id of the team (required) - :type team_id: str - :param board_id: Unique identifier of the board that you want to retrieve. (required) - :type board_id: str + :param job_id: Unique identifier of the board export job. (required) + :type job_id: str + :param status: Filters the list of board export tasks by their status. Accepts an array of statuses such as TASK_STATUS_CREATED, TASK_STATUS_CANCELLED, TASK_STATUS_SCHEDULED, TASK_STATUS_SUCCESS or TASK_STATUS_ERROR. + :type status: List[str] + :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + :type cursor: str + :param limit: The maximum number of results to return per call. If the number of tasks in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1920,10 +1943,12 @@ def enterprise_dataclassification_board_get( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_board_get_serialize( + _param = self._enterprise_board_export_job_tasks_serialize( org_id=org_id, - team_id=team_id, - board_id=board_id, + job_id=job_id, + status=status, + cursor=cursor, + limit=limit, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1931,7 +1956,7 @@ def enterprise_dataclassification_board_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardDataClassificationLabel", + "200": "BoardExportJobTasksList", "400": None, "401": None, "403": None, @@ -1945,11 +1970,13 @@ def enterprise_dataclassification_board_get( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_board_get_serialize( + def _enterprise_board_export_job_tasks_serialize( self, org_id, - team_id, - board_id, + job_id, + status, + cursor, + limit, _request_auth, _content_type, _headers, @@ -1958,7 +1985,9 @@ def _enterprise_dataclassification_board_get_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "status": "multi", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1970,11 +1999,21 @@ def _enterprise_dataclassification_board_get_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if board_id is not None: - _path_params["board_id"] = board_id + if job_id is not None: + _path_params["job_id"] = job_id # process the query parameters + if status is not None: + + _query_params.append(("status", status)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if limit is not None: + + _query_params.append(("limit", limit)) + # process the header parameters # process the form parameters # process the body parameter @@ -1987,7 +2026,7 @@ def _enterprise_dataclassification_board_get_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification", + resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2001,12 +2040,30 @@ def _enterprise_dataclassification_board_get_serialize( ) @validate_call - def enterprise_dataclassification_board_set( + def enterprise_board_export_jobs( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - team_id: Annotated[StrictStr, Field(description="id of the team")], - board_id: Annotated[StrictStr, Field(description="Unique identifier of the board that you want to update.")], - data_classification_label_id: DataClassificationLabelId, + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + status: Annotated[ + Optional[List[StrictStr]], + Field( + description="Status of the board export jobs that you want to retrieve, such as JOB_STATUS_CREATED, JOB_STATUS_IN_PROGRESS, JOB_STATUS_CANCELLED or JOB_STATUS_FINISHED." + ), + ] = None, + creator_id: Annotated[ + Optional[List[StrictInt]], Field(description="Unique identifier of the board export job creator.") + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. " + ), + ] = None, + limit: Annotated[ + Optional[Annotated[int, Field(le=500, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of jobs in the response is greater than the limit specified, the response returns the cursor parameter with a value. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2016,19 +2073,21 @@ def enterprise_dataclassification_board_set( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardDataClassificationLabel: - """Update board classification + ) -> BoardExportJobsList: + """Get board export jobs list - Updates board classification for an existing board.

Required scope

boards:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of board export jobs based on the filters provided in the request.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

- :param org_id: id of the organization (required) + :param org_id: Unique identifier of the organization. (required) :type org_id: str - :param team_id: id of the team (required) - :type team_id: str - :param board_id: Unique identifier of the board that you want to update. (required) - :type board_id: str - :param data_classification_label_id: (required) - :type data_classification_label_id: DataClassificationLabelId + :param status: Status of the board export jobs that you want to retrieve, such as JOB_STATUS_CREATED, JOB_STATUS_IN_PROGRESS, JOB_STATUS_CANCELLED or JOB_STATUS_FINISHED. + :type status: List[str] + :param creator_id: Unique identifier of the board export job creator. + :type creator_id: List[int] + :param cursor: A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + :type cursor: str + :param limit: The maximum number of results to return per call. If the number of jobs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2051,11 +2110,12 @@ def enterprise_dataclassification_board_set( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_board_set_serialize( + _param = self._enterprise_board_export_jobs_serialize( org_id=org_id, - team_id=team_id, - board_id=board_id, - data_classification_label_id=data_classification_label_id, + status=status, + creator_id=creator_id, + cursor=cursor, + limit=limit, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2063,7 +2123,7 @@ def enterprise_dataclassification_board_set( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardDataClassificationLabel", + "200": "BoardExportJobsList", "400": None, "401": None, "403": None, @@ -2077,12 +2137,13 @@ def enterprise_dataclassification_board_set( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_board_set_serialize( + def _enterprise_board_export_jobs_serialize( self, org_id, - team_id, - board_id, - data_classification_label_id, + status, + creator_id, + cursor, + limit, _request_auth, _content_type, _headers, @@ -2091,7 +2152,10 @@ def _enterprise_dataclassification_board_set_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "status": "multi", + "creatorId": "multi", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -2103,34 +2167,36 @@ def _enterprise_dataclassification_board_set_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if board_id is not None: - _path_params["board_id"] = board_id # process the query parameters + if status is not None: + + _query_params.append(("status", status)) + + if creator_id is not None: + + _query_params.append(("creatorId", creator_id)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if limit is not None: + + _query_params.append(("limit", limit)) + # process the header parameters # process the form parameters # process the body parameter - if data_classification_label_id is not None: - _body_params = data_classification_label_id # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification", + method="GET", + resource_path="/v2/orgs/{org_id}/boards/export/jobs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2144,9 +2210,11 @@ def _enterprise_dataclassification_board_set_serialize( ) @validate_call - def enterprise_dataclassification_organization_settings_get( + def enterprise_create_board_export( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + request_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], + create_board_export_request: CreateBoardExportRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2156,13 +2224,17 @@ def enterprise_dataclassification_organization_settings_get( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DataClassificationOrganizationSettings: - """Get organization settings + ) -> BoardExportJobId: + """Create board export job - Retrieves board classification settings for an existing organization.

Required scope

organizations:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Creates an export job for one or more boards.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

- :param org_id: id of the organization (required) + :param org_id: Unique identifier of the organization. (required) :type org_id: str + :param request_id: Unique identifier of the board export job. (required) + :type request_id: str + :param create_board_export_request: (required) + :type create_board_export_request: CreateBoardExportRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2185,8 +2257,10 @@ def enterprise_dataclassification_organization_settings_get( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_organization_settings_get_serialize( + _param = self._enterprise_create_board_export_serialize( org_id=org_id, + request_id=request_id, + create_board_export_request=create_board_export_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2194,11 +2268,12 @@ def enterprise_dataclassification_organization_settings_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationOrganizationSettings", + "200": "BoardExportJobId", "400": None, "401": None, "403": None, "404": None, + "425": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2208,9 +2283,11 @@ def enterprise_dataclassification_organization_settings_get( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_organization_settings_get_serialize( + def _enterprise_create_board_export_serialize( self, org_id, + request_id, + create_board_export_request, _request_auth, _content_type, _headers, @@ -2232,19 +2309,33 @@ def _enterprise_dataclassification_organization_settings_get_serialize( if org_id is not None: _path_params["org_id"] = org_id # process the query parameters + if request_id is not None: + + _query_params.append(("request_id", request_id)) + # process the header parameters # process the form parameters # process the body parameter + if create_board_export_request is not None: + _body_params = create_board_export_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/data-classification-settings", + method="POST", + resource_path="/v2/orgs/{org_id}/boards/export/jobs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2258,11 +2349,11 @@ def _enterprise_dataclassification_organization_settings_get_serialize( ) @validate_call - def enterprise_dataclassification_team_boards_bulk( + def enterprise_create_board_export_task_export_link( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - team_id: Annotated[StrictStr, Field(description="id of the team")], - update_boards_data_classification_label_request: UpdateBoardsDataClassificationLabelRequest, + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], + task_id: Annotated[StrictStr, Field(description="Unique identifier of the board export task.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2272,17 +2363,17 @@ def enterprise_dataclassification_team_boards_bulk( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UpdateBoardsDataClassificationLabel: - """Bulk update boards classification + ) -> BoardExportTaskExportLink: + """Create task export link - Updates board classification for not-classified only or all boards in an existing team.

Required scope

boards:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Creates a link to download the results of a board export task.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

- :param org_id: id of the organization (required) + :param org_id: Unique identifier of the organization. (required) :type org_id: str - :param team_id: id of the team (required) - :type team_id: str - :param update_boards_data_classification_label_request: (required) - :type update_boards_data_classification_label_request: UpdateBoardsDataClassificationLabelRequest + :param job_id: Unique identifier of the board export job. (required) + :type job_id: str + :param task_id: Unique identifier of the board export task. (required) + :type task_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2305,10 +2396,10 @@ def enterprise_dataclassification_team_boards_bulk( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_team_boards_bulk_serialize( + _param = self._enterprise_create_board_export_task_export_link_serialize( org_id=org_id, - team_id=team_id, - update_boards_data_classification_label_request=update_boards_data_classification_label_request, + job_id=job_id, + task_id=task_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2316,11 +2407,12 @@ def enterprise_dataclassification_team_boards_bulk( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UpdateBoardsDataClassificationLabel", + "200": "BoardExportTaskExportLink", "400": None, "401": None, "403": None, "404": None, + "425": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2330,11 +2422,11 @@ def enterprise_dataclassification_team_boards_bulk( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_boards_bulk_serialize( + def _enterprise_create_board_export_task_export_link_serialize( self, org_id, - team_id, - update_boards_data_classification_label_request, + job_id, + task_id, _request_auth, _content_type, _headers, @@ -2355,32 +2447,24 @@ def _enterprise_dataclassification_team_boards_bulk_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if job_id is not None: + _path_params["job_id"] = job_id + if task_id is not None: + _path_params["task_id"] = task_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_boards_data_classification_label_request is not None: - _body_params = update_boards_data_classification_label_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification", + method="POST", + resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks/{task_id}/export-link", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2394,10 +2478,11 @@ def _enterprise_dataclassification_team_boards_bulk_serialize( ) @validate_call - def enterprise_dataclassification_team_settings_get( + def enterprise_update_board_export_job( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - team_id: Annotated[StrictStr, Field(description="id of the team")], + org_id: Annotated[StrictStr, Field(description="Unique identifier of the organization.")], + job_id: Annotated[StrictStr, Field(description="Unique identifier of the board export job.")], + enterprise_update_board_export_job_request: Optional[EnterpriseUpdateBoardExportJobRequest] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2407,15 +2492,17 @@ def enterprise_dataclassification_team_settings_get( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DataClassificationTeamSettings: - """Get team settings + ) -> EnterpriseUpdateBoardExportJob200Response: + """Update board export job status - Retrieves board classification settings for an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates the status of the board export job.
Currently, only the cancellation of an ongoing export job is supported.

Required scope

boards:export

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin and eDiscovery is enabled in the Settings. You can request temporary access to Enterprise APIs using this form.

- :param org_id: id of the organization (required) + :param org_id: Unique identifier of the organization. (required) :type org_id: str - :param team_id: id of the team (required) - :type team_id: str + :param job_id: Unique identifier of the board export job. (required) + :type job_id: str + :param enterprise_update_board_export_job_request: + :type enterprise_update_board_export_job_request: EnterpriseUpdateBoardExportJobRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2438,9 +2525,10 @@ def enterprise_dataclassification_team_settings_get( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_team_settings_get_serialize( + _param = self._enterprise_update_board_export_job_serialize( org_id=org_id, - team_id=team_id, + job_id=job_id, + enterprise_update_board_export_job_request=enterprise_update_board_export_job_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2448,7 +2536,7 @@ def enterprise_dataclassification_team_settings_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationTeamSettings", + "200": "EnterpriseUpdateBoardExportJob200Response", "400": None, "401": None, "403": None, @@ -2462,10 +2550,11 @@ def enterprise_dataclassification_team_settings_get( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_settings_get_serialize( + def _enterprise_update_board_export_job_serialize( self, org_id, - team_id, + job_id, + enterprise_update_board_export_job_request, _request_auth, _content_type, _headers, @@ -2486,22 +2575,32 @@ def _enterprise_dataclassification_team_settings_get_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if job_id is not None: + _path_params["job_id"] = job_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if enterprise_update_board_export_job_request is not None: + _body_params = enterprise_update_board_export_job_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", + method="PUT", + resource_path="/v2/orgs/{org_id}/boards/export/jobs/{job_id}/status", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2515,11 +2614,11 @@ def _enterprise_dataclassification_team_settings_get_serialize( ) @validate_call - def enterprise_dataclassification_team_settings_set( + def enterprise_dataclassification_board_get( self, org_id: Annotated[StrictStr, Field(description="id of the organization")], team_id: Annotated[StrictStr, Field(description="id of the team")], - update_team_settings_request: UpdateTeamSettingsRequest, + board_id: Annotated[StrictStr, Field(description="Unique identifier of the board that you want to retrieve.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2529,17 +2628,17 @@ def enterprise_dataclassification_team_settings_set( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DataClassificationTeamSettings: - """Update team settings + ) -> BoardDataClassificationLabel: + """Get board classification - Updates board classification settings for an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves board classification for a board.

Required scope

boards:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

:param org_id: id of the organization (required) :type org_id: str :param team_id: id of the team (required) :type team_id: str - :param update_team_settings_request: (required) - :type update_team_settings_request: UpdateTeamSettingsRequest + :param board_id: Unique identifier of the board that you want to retrieve. (required) + :type board_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2562,10 +2661,10 @@ def enterprise_dataclassification_team_settings_set( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_team_settings_set_serialize( + _param = self._enterprise_dataclassification_board_get_serialize( org_id=org_id, team_id=team_id, - update_team_settings_request=update_team_settings_request, + board_id=board_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2573,7 +2672,7 @@ def enterprise_dataclassification_team_settings_set( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationTeamSettings", + "200": "BoardDataClassificationLabel", "400": None, "401": None, "403": None, @@ -2587,11 +2686,11 @@ def enterprise_dataclassification_team_settings_set( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_settings_set_serialize( + def _enterprise_dataclassification_board_get_serialize( self, org_id, team_id, - update_team_settings_request, + board_id, _request_auth, _content_type, _headers, @@ -2614,30 +2713,22 @@ def _enterprise_dataclassification_team_settings_set_serialize( _path_params["org_id"] = org_id if team_id is not None: _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_team_settings_request is not None: - _body_params = update_team_settings_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2651,12 +2742,12 @@ def _enterprise_dataclassification_team_settings_set_serialize( ) @validate_call - def create_items( + def enterprise_dataclassification_board_set( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - item_create: Annotated[List[ItemCreate], Field(min_length=1, max_length=20)], + org_id: Annotated[StrictStr, Field(description="id of the organization")], + team_id: Annotated[StrictStr, Field(description="id of the team")], + board_id: Annotated[StrictStr, Field(description="Unique identifier of the board that you want to update.")], + data_classification_label_id: DataClassificationLabelId, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2666,15 +2757,19 @@ def create_items( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Items: - """Create items in bulk + ) -> BoardDataClassificationLabel: + """Update board classification - Adds different types of items to a board. You can add up to 20 items of the same or different type per create call. For example, you can create 3 shape items, 4 card items, and 5 sticky notes in one create call. The bulk create operation is transactional. If any item's create operation fails, the create operation for all the remaining items also fails, and none of the items will be created.

To try out this API in our documentation:

1. In the **BODY PARAMS** section, scroll down until you see **ADD OBJECT** (Figure 1).

“add
Figure 1. Add object user interface in readme

2. Click **ADD OBJECT**, and then select or enter the appropriate values for parameters of the item that you want to add.

3. Repeat steps 1 and 2 for each item that you want to add.

Required scope

boards:write

Rate limiting

Level 2 per item. For example, if you want to create one sticky note, one card, and one shape item in one call, the rate limiting applicable will be 300 credits. This is because create item calls take Level 2 rate limiting of 100 credits each, 100 for sticky note, 100 for card, and 100 for shape item. + Updates board classification for an existing board.

Required scope

boards:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param org_id: id of the organization (required) + :type org_id: str + :param team_id: id of the team (required) + :type team_id: str + :param board_id: Unique identifier of the board that you want to update. (required) :type board_id: str - :param item_create: (required) - :type item_create: List[ItemCreate] + :param data_classification_label_id: (required) + :type data_classification_label_id: DataClassificationLabelId :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2697,9 +2792,11 @@ def create_items( :return: Returns the result object. """ # noqa: E501 - _param = self._create_items_serialize( + _param = self._enterprise_dataclassification_board_set_serialize( + org_id=org_id, + team_id=team_id, board_id=board_id, - item_create=item_create, + data_classification_label_id=data_classification_label_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2707,9 +2804,12 @@ def create_items( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Items", - "400": "BulkOperationError", - "429": "Error", + "200": "BoardDataClassificationLabel", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2718,10 +2818,12 @@ def create_items( response_types_map=_response_types_map, ).data - def _create_items_serialize( + def _enterprise_dataclassification_board_set_serialize( self, + org_id, + team_id, board_id, - item_create, + data_classification_label_id, _request_auth, _content_type, _headers, @@ -2730,9 +2832,7 @@ def _create_items_serialize( _host = None - _collection_formats: Dict[str, str] = { - "ItemCreate": "", - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -2742,14 +2842,18 @@ def _create_items_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id if board_id is not None: _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if item_create is not None: - _body_params = item_create + if data_classification_label_id is not None: + _body_params = data_classification_label_id # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -2767,7 +2871,7 @@ def _create_items_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id}/items/bulk", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2781,21 +2885,9 @@ def _create_items_serialize( ) @validate_call - def create_items_in_bulk_using_file_from_device( + def enterprise_dataclassification_organization_settings_get( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - data: Annotated[ - Union[StrictBytes, StrictStr], - Field( - description="JSON file containing bulk data, where each object represents an item to be created. For details, see [JSON file example](https://developers.miro.com/reference/json-data-example)." - ), - ], - resources: Annotated[ - List[Union[StrictBytes, StrictStr]], - Field(description="Array of items to create (PDFs, images, etc.). Maximum of 20 items."), - ], + org_id: Annotated[StrictStr, Field(description="id of the organization")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2805,17 +2897,13 @@ def create_items_in_bulk_using_file_from_device( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Items: - """Create items in bulk using file from device + ) -> DataClassificationOrganizationSettings: + """Get organization settings - Adds different types of items to a board using files from a device. You can add up to 20 items of the same or different type per create call. For example, you can create 5 document items and 5 images in one create call. The bulk create operation is transactional. If any item's create operation fails, the create operation for all the remaining items also fails, and none of the items will be created. To try out this API in our documentation: 1. In the **BODY PARAMS** section, select **ADD FILE**, and then upload a local file. Repeat for each item that you want to add. 2. Upload a JSON file that contains the bulk data for the items you want to create.

Required scope

boards:write

Rate limiting

Level 2 per item
+ Retrieves board classification settings for an existing organization.

Required scope

organizations:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param data: JSON file containing bulk data, where each object represents an item to be created. For details, see [JSON file example](https://developers.miro.com/reference/json-data-example). (required) - :type data: bytearray - :param resources: Array of items to create (PDFs, images, etc.). Maximum of 20 items. (required) - :type resources: List[bytearray] + :param org_id: id of the organization (required) + :type org_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2838,10 +2926,8 @@ def create_items_in_bulk_using_file_from_device( :return: Returns the result object. """ # noqa: E501 - _param = self._create_items_in_bulk_using_file_from_device_serialize( - board_id=board_id, - data=data, - resources=resources, + _param = self._enterprise_dataclassification_organization_settings_get_serialize( + org_id=org_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2849,7 +2935,12 @@ def create_items_in_bulk_using_file_from_device( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Items", + "200": "DataClassificationOrganizationSettings", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2858,11 +2949,9 @@ def create_items_in_bulk_using_file_from_device( response_types_map=_response_types_map, ).data - def _create_items_in_bulk_using_file_from_device_serialize( + def _enterprise_dataclassification_organization_settings_get_serialize( self, - board_id, - data, - resources, + org_id, _request_auth, _content_type, _headers, @@ -2871,9 +2960,7 @@ def _create_items_in_bulk_using_file_from_device_serialize( _host = None - _collection_formats: Dict[str, str] = { - "resources": "csv", - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -2883,34 +2970,22 @@ def _create_items_in_bulk_using_file_from_device_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters # process the header parameters # process the form parameters - if data is not None: - _files["data"] = data - if resources is not None: - _files["resources"] = resources # process the body parameter # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk", + method="GET", + resource_path="/v2/orgs/{org_id}/data-classification-settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2924,9 +2999,11 @@ def _create_items_in_bulk_using_file_from_device_serialize( ) @validate_call - def get_resource_type( + def enterprise_dataclassification_team_boards_bulk( self, - resource: StrictStr, + org_id: Annotated[StrictStr, Field(description="id of the organization")], + team_id: Annotated[StrictStr, Field(description="id of the team")], + update_boards_data_classification_label_request: UpdateBoardsDataClassificationLabelRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2936,13 +3013,17 @@ def get_resource_type( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ResourceType: - """Get resource type + ) -> UpdateBoardsDataClassificationLabel: + """Bulk update boards classification - Retrieve metadata for the available resource types (User and Group) that are supported. + Updates board classification for not-classified only or all boards in an existing team.

Required scope

boards:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param resource: (required) - :type resource: str + :param org_id: id of the organization (required) + :type org_id: str + :param team_id: id of the team (required) + :type team_id: str + :param update_boards_data_classification_label_request: (required) + :type update_boards_data_classification_label_request: UpdateBoardsDataClassificationLabelRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2965,8 +3046,10 @@ def get_resource_type( :return: Returns the result object. """ # noqa: E501 - _param = self._get_resource_type_serialize( - resource=resource, + _param = self._enterprise_dataclassification_team_boards_bulk_serialize( + org_id=org_id, + team_id=team_id, + update_boards_data_classification_label_request=update_boards_data_classification_label_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2974,12 +3057,12 @@ def get_resource_type( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ResourceType", + "200": "UpdateBoardsDataClassificationLabel", "400": None, "401": None, "403": None, "404": None, - "500": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2988,9 +3071,11 @@ def get_resource_type( response_types_map=_response_types_map, ).data - def _get_resource_type_serialize( + def _enterprise_dataclassification_team_boards_bulk_serialize( self, - resource, + org_id, + team_id, + update_boards_data_classification_label_request, _request_auth, _content_type, _headers, @@ -3009,22 +3094,34 @@ def _get_resource_type_serialize( _body_params: Optional[bytes] = None # process the path parameters - if resource is not None: - _path_params["resource"] = resource + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if update_boards_data_classification_label_request is not None: + _body_params = update_boards_data_classification_label_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/ResourceTypes/{resource}", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3038,9 +3135,10 @@ def _get_resource_type_serialize( ) @validate_call - def get_schema( + def enterprise_dataclassification_team_settings_get( self, - uri: Annotated[StrictStr, Field(description="Schema URI of a particular resource type.")], + org_id: Annotated[StrictStr, Field(description="id of the organization")], + team_id: Annotated[StrictStr, Field(description="id of the team")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3050,13 +3148,15 @@ def get_schema( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> SchemaResource: - """Get schema + ) -> DataClassificationTeamSettings: + """Get team settings - Retrieve information about how users, groups, and enterprise-user attributes URIs that are formatted. + Retrieves board classification settings for an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param uri: Schema URI of a particular resource type. (required) - :type uri: str + :param org_id: id of the organization (required) + :type org_id: str + :param team_id: id of the team (required) + :type team_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3079,8 +3179,9 @@ def get_schema( :return: Returns the result object. """ # noqa: E501 - _param = self._get_schema_serialize( - uri=uri, + _param = self._enterprise_dataclassification_team_settings_get_serialize( + org_id=org_id, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3088,12 +3189,12 @@ def get_schema( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "SchemaResource", + "200": "DataClassificationTeamSettings", "400": None, "401": None, "403": None, "404": None, - "500": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3102,9 +3203,10 @@ def get_schema( response_types_map=_response_types_map, ).data - def _get_schema_serialize( + def _enterprise_dataclassification_team_settings_get_serialize( self, - uri, + org_id, + team_id, _request_auth, _content_type, _headers, @@ -3123,22 +3225,24 @@ def _get_schema_serialize( _body_params: Optional[bytes] = None # process the path parameters - if uri is not None: - _path_params["uri"] = uri + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Schemas/{uri}", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3152,8 +3256,11 @@ def _get_schema_serialize( ) @validate_call - def list_resource_types( + def enterprise_dataclassification_team_settings_set( self, + org_id: Annotated[StrictStr, Field(description="id of the organization")], + team_id: Annotated[StrictStr, Field(description="id of the team")], + update_team_settings_request: UpdateTeamSettingsRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3163,11 +3270,17 @@ def list_resource_types( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ResourceTypeListResponse: - """List resource types + ) -> DataClassificationTeamSettings: + """Update team settings - Retrieve information about which SCIM resources are supported.

Currently, Miro supports Users and Groups as Resource Types. + Updates board classification settings for an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ :param org_id: id of the organization (required) + :type org_id: str + :param team_id: id of the team (required) + :type team_id: str + :param update_team_settings_request: (required) + :type update_team_settings_request: UpdateTeamSettingsRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3190,17 +3303,23 @@ def list_resource_types( :return: Returns the result object. """ # noqa: E501 - _param = self._list_resource_types_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._enterprise_dataclassification_team_settings_set_serialize( + org_id=org_id, + team_id=team_id, + update_team_settings_request=update_team_settings_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ResourceTypeListResponse", + "200": "DataClassificationTeamSettings", "400": None, "401": None, "403": None, "404": None, - "500": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3209,8 +3328,11 @@ def list_resource_types( response_types_map=_response_types_map, ).data - def _list_resource_types_serialize( + def _enterprise_dataclassification_team_settings_set_serialize( self, + org_id, + team_id, + update_team_settings_request, _request_auth, _content_type, _headers, @@ -3229,20 +3351,34 @@ def _list_resource_types_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if update_team_settings_request is not None: + _body_params = update_team_settings_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/ResourceTypes", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3256,8 +3392,13 @@ def _list_resource_types_serialize( ) @validate_call - def list_schemas( + def get_board_members( self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") + ], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + offset: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3267,11 +3408,17 @@ def list_schemas( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> SchemaListResponse: - """List schemas + ) -> BoardMembersPagedResponse: + """Get all board members - Retrieve metadata about Users, Groups, and extension attributes that are currently supported. + Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
+ :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) + :type board_id: str + :param limit: + :type limit: str + :param offset: + :type offset: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3294,17 +3441,21 @@ def list_schemas( :return: Returns the result object. """ # noqa: E501 - _param = self._list_schemas_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index - ) - - _response_types_map: Dict[str, Optional[str]] = { - "200": "SchemaListResponse", - "400": None, - "401": None, - "403": None, + _param = self._get_board_members_serialize( + board_id=board_id, + limit=limit, + offset=offset, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "BoardMembersPagedResponse", + "400": None, "404": None, - "500": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3313,8 +3464,11 @@ def list_schemas( response_types_map=_response_types_map, ).data - def _list_schemas_serialize( + def _get_board_members_serialize( self, + board_id, + limit, + offset, _request_auth, _content_type, _headers, @@ -3333,20 +3487,30 @@ def _list_schemas_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if offset is not None: + + _query_params.append(("offset", offset)) + # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Schemas", + resource_path="/v2/boards/{board_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3360,8 +3524,14 @@ def _list_schemas_serialize( ) @validate_call - def list_service_provider_configs( + def get_specific_board_member( self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") + ], + board_member_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3371,11 +3541,15 @@ def list_service_provider_configs( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ServiceProviderConfigResponse: - """Get Service Provider Config + ) -> BoardMemberWithLinks: + """Get specific board member - Retrieve supported operations and SCIM API basic configuration. + Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
+ :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) + :type board_id: str + :param board_member_id: Unique identifier (ID) of the board member whose role you want to retrieve. (required) + :type board_member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3398,17 +3572,20 @@ def list_service_provider_configs( :return: Returns the result object. """ # noqa: E501 - _param = self._list_service_provider_configs_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._get_specific_board_member_serialize( + board_id=board_id, + board_member_id=board_member_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ServiceProviderConfigResponse", + "200": "BoardMemberWithLinks", "400": None, - "401": None, - "403": None, "404": None, - "500": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3417,8 +3594,10 @@ def list_service_provider_configs( response_types_map=_response_types_map, ).data - def _list_service_provider_configs_serialize( + def _get_specific_board_member_serialize( self, + board_id, + board_member_id, _request_auth, _content_type, _headers, @@ -3437,20 +3616,24 @@ def _list_service_provider_configs_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if board_member_id is not None: + _path_params["board_member_id"] = board_member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/ServiceProviderConfig", + resource_path="/v2/boards/{board_id}/members/{board_member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3464,12 +3647,14 @@ def _list_service_provider_configs_serialize( ) @validate_call - def create_shape_item_flowchart( + def remove_board_member( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete an item.") + ], + board_member_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to delete.") ], - shape_create_request: ShapeCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3479,15 +3664,15 @@ def create_shape_item_flowchart( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Create shape item + ) -> object: + """Remove board member - Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Removes a board member from a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete an item. (required) :type board_id: str - :param shape_create_request: (required) - :type shape_create_request: ShapeCreateRequest + :param board_member_id: Unique identifier (ID) of the board member whose role you want to delete. (required) + :type board_member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3510,9 +3695,9 @@ def create_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._create_shape_item_flowchart_serialize( + _param = self._remove_board_member_serialize( board_id=board_id, - shape_create_request=shape_create_request, + board_member_id=board_member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3520,10 +3705,10 @@ def create_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ShapeItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "204": "object", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3532,10 +3717,10 @@ def create_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _create_shape_item_flowchart_serialize( + def _remove_board_member_serialize( self, board_id, - shape_create_request, + board_member_id, _request_auth, _content_type, _headers, @@ -3556,30 +3741,22 @@ def _create_shape_item_flowchart_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if board_member_id is not None: + _path_params["board_member_id"] = board_member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if shape_create_request is not None: - _body_params = shape_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2-experimental/boards/{board_id}/shapes", + method="DELETE", + resource_path="/v2/boards/{board_id}/members/{board_member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3593,12 +3770,12 @@ def _create_shape_item_flowchart_serialize( ) @validate_call - def delete_shape_item_flowchart( + def share_board( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + board_members_invite: BoardMembersInvite, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3608,15 +3785,15 @@ def delete_shape_item_flowchart( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete shape item + ) -> InvitationResult: + """Share board - Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Shares the board and Invites new members to collaborate on a board by sending an invitation email. Depending on the board's Sharing policy, there might be various scenarios where membership in the team is required in order to share the board with a user.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param board_members_invite: (required) + :type board_members_invite: BoardMembersInvite :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3639,9 +3816,9 @@ def delete_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_shape_item_flowchart_serialize( + _param = self._share_board_serialize( board_id=board_id, - item_id=item_id, + board_members_invite=board_members_invite, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3649,10 +3826,10 @@ def delete_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "201": "InvitationResult", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3661,10 +3838,10 @@ def delete_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _delete_shape_item_flowchart_serialize( + def _share_board_serialize( self, board_id, - item_id, + board_members_invite, _request_auth, _content_type, _headers, @@ -3685,22 +3862,30 @@ def _delete_shape_item_flowchart_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if board_members_invite is not None: + _body_params = board_members_invite # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3714,17 +3899,18 @@ def _delete_shape_item_flowchart_serialize( ) @validate_call - def get_items_experimental( + def update_board_member( self, board_id: Annotated[ StrictStr, Field( - description="Unique identifier (ID) of the board for which you want to retrieve the list of available items." + description="Unique identifier (ID) of the board for which you want to update the role of the board member." ), ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - type: Optional[StrictStr] = None, - cursor: Optional[StrictStr] = None, + board_member_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to update.") + ], + board_member_changes: BoardMemberChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3734,19 +3920,17 @@ def get_items_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItemCursorPaged: - """Get items on board + ) -> BoardMemberWithLinks: + """Update board member - Retrieves a list of items for a specific board. You can retrieve all items on the board, a list of child items inside a parent item, or a list of specific types of items by specifying URL query parameter values. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board for which you want to retrieve the list of available items. (required) + :param board_id: Unique identifier (ID) of the board for which you want to update the role of the board member. (required) :type board_id: str - :param limit: - :type limit: str - :param type: - :type type: str - :param cursor: - :type cursor: str + :param board_member_id: Unique identifier (ID) of the board member whose role you want to update. (required) + :type board_member_id: str + :param board_member_changes: (required) + :type board_member_changes: BoardMemberChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3769,11 +3953,10 @@ def get_items_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_experimental_serialize( + _param = self._update_board_member_serialize( board_id=board_id, - limit=limit, - type=type, - cursor=cursor, + board_member_id=board_member_id, + board_member_changes=board_member_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3781,10 +3964,10 @@ def get_items_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItemCursorPaged", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "BoardMemberWithLinks", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3793,12 +3976,11 @@ def get_items_experimental( response_types_map=_response_types_map, ).data - def _get_items_experimental_serialize( + def _update_board_member_serialize( self, board_id, - limit, - type, - cursor, + board_member_id, + board_member_changes, _request_auth, _content_type, _headers, @@ -3819,33 +4001,33 @@ def _get_items_experimental_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if board_member_id is not None: + _path_params["board_member_id"] = board_member_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if type is not None: - - _query_params.append(("type", type)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if board_member_changes is not None: + _body_params = board_member_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # authentication setting - _auth_settings: List[str] = [] - - return self.api_client.param_serialize( - method="GET", - resource_path="/v2-experimental/boards/{board_id}/items", - path_params=_path_params, + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="PATCH", + resource_path="/v2/boards/{board_id}/members/{board_member_id}", + path_params=_path_params, query_params=_query_params, header_params=_header_params, body=_body_params, @@ -3858,15 +4040,12 @@ def _get_items_experimental_serialize( ) @validate_call - def get_shape_item_flowchart( + def copy_board( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + copy_from: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board that you want to copy.") ], + copy_board_changes: Optional[CopyBoardChanges] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3876,15 +4055,15 @@ def get_shape_item_flowchart( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Get shape item + ) -> BoardWithLinksAndWithoutProject: + """Copy board - Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Creates a copy of an existing board. You can also update the name, description, sharing policy, and permissions policy for the new board in the request body.

Required scope

boards:write

Rate limiting

Level 4
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param copy_from: Unique identifier (ID) of the board that you want to copy. (required) + :type copy_from: str + :param copy_board_changes: + :type copy_board_changes: CopyBoardChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3907,9 +4086,9 @@ def get_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._get_shape_item_flowchart_serialize( - board_id=board_id, - item_id=item_id, + _param = self._copy_board_serialize( + copy_from=copy_from, + copy_board_changes=copy_board_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3917,10 +4096,11 @@ def get_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "201": "BoardWithLinksAndWithoutProject", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3929,10 +4109,10 @@ def get_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _get_shape_item_flowchart_serialize( + def _copy_board_serialize( self, - board_id, - item_id, + copy_from, + copy_board_changes, _request_auth, _content_type, _headers, @@ -3951,24 +4131,34 @@ def _get_shape_item_flowchart_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters + if copy_from is not None: + + _query_params.append(("copy_from", copy_from)) + # process the header parameters # process the form parameters # process the body parameter + if copy_board_changes is not None: + _body_params = copy_board_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", + method="PUT", + resource_path="/v2/boards", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3982,15 +4172,9 @@ def _get_shape_item_flowchart_serialize( ) @validate_call - def get_specific_item_experimental( + def create_board( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + board_changes: Optional[BoardChanges] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4000,15 +4184,13 @@ def get_specific_item_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItem: - """Get specific item on board + ) -> BoardWithLinks: + """Create board - Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Creates a board with the specified name and sharing policies.

Note

You can only create up to 3 team boards with the free plan.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param board_changes: + :type board_changes: BoardChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4031,9 +4213,8 @@ def get_specific_item_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_specific_item_experimental_serialize( - board_id=board_id, - item_id=item_id, + _param = self._create_board_serialize( + board_changes=board_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4041,10 +4222,11 @@ def get_specific_item_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "201": "BoardWithLinks", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4053,10 +4235,9 @@ def get_specific_item_experimental( response_types_map=_response_types_map, ).data - def _get_specific_item_experimental_serialize( + def _create_board_serialize( self, - board_id, - item_id, + board_changes, _request_auth, _content_type, _headers, @@ -4075,24 +4256,30 @@ def _get_specific_item_experimental_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if board_changes is not None: + _body_params = board_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2-experimental/boards/{board_id}/items/{item_id}", + method="POST", + resource_path="/v2/boards", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4106,13 +4293,11 @@ def _get_specific_item_experimental_serialize( ) @validate_call - def update_shape_item_flowchart( + def delete_board( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + StrictStr, Field(description="Unique identifier (ID) of the board that you want to delete.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - shape_update_request: ShapeUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4122,17 +4307,13 @@ def update_shape_item_flowchart( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Update shape item + ) -> object: + """Delete board - Updates a flowchart shape item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a board. Deleted boards go to Trash (on paid plans) and can be restored via UI within 90 days after deletion.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board that you want to delete. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param shape_update_request: (required) - :type shape_update_request: ShapeUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4155,10 +4336,8 @@ def update_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._update_shape_item_flowchart_serialize( + _param = self._delete_board_serialize( board_id=board_id, - item_id=item_id, - shape_update_request=shape_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4166,10 +4345,11 @@ def update_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "204": "object", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4178,11 +4358,9 @@ def update_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _update_shape_item_flowchart_serialize( + def _delete_board_serialize( self, board_id, - item_id, - shape_update_request, _request_auth, _content_type, _headers, @@ -4203,32 +4381,20 @@ def _update_shape_item_flowchart_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if shape_update_request is not None: - _body_params = shape_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", + method="DELETE", + resource_path="/v2/boards/{board_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4242,15 +4408,15 @@ def _update_shape_item_flowchart_serialize( ) @validate_call - def get_group( + def get_boards( self, - id: Annotated[StrictStr, Field(description="A server-assigned, unique identifier for this Group (team).")], - attributes: Annotated[ - Optional[StrictStr], - Field( - description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to retrieve attributes within complex attributes. For example: members.display" - ), - ] = None, + team_id: Optional[StrictStr] = None, + project_id: Optional[StrictStr] = None, + query: Optional[Annotated[str, Field(strict=True, max_length=500)]] = None, + owner: Optional[StrictStr] = None, + limit: Optional[Annotated[str, Field(strict=True)]] = None, + offset: Optional[StrictStr] = None, + sort: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4260,15 +4426,25 @@ def get_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupResource: - """Get group + ) -> BoardsPagedResponse: + """Get boards - Retrieves a single Group resource.
Note: Along with groups (teams), the users that are part of those groups (teams) are also retrieved. Only users that have member role in the organization are fetched. + Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters. Customize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards. When the `query` parameter is provided, results are capped at the first 10,000 matching boards (`offset` + `limit` must not exceed 10,000). To page through more boards, narrow the result set with `team_id`, `project_id`, or `owner` instead of relying on a higher `offset`. If you're an Enterprise customer with Company Admin permissions: - Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins). - Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.

Required scope

boards:read

Rate limiting

Level 1
- :param id: A server-assigned, unique identifier for this Group (team). (required) - :type id: str - :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to retrieve attributes within complex attributes. For example: members.display - :type attributes: str + :param team_id: + :type team_id: str + :param project_id: + :type project_id: str + :param query: + :type query: str + :param owner: + :type owner: str + :param limit: + :type limit: str + :param offset: + :type offset: str + :param sort: + :type sort: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4291,9 +4467,14 @@ def get_group( :return: Returns the result object. """ # noqa: E501 - _param = self._get_group_serialize( - id=id, - attributes=attributes, + _param = self._get_boards_serialize( + team_id=team_id, + project_id=project_id, + query=query, + owner=owner, + limit=limit, + offset=offset, + sort=sort, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4301,15 +4482,10 @@ def get_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupResource", + "200": "BoardsPagedResponse", "400": None, - "401": None, - "403": None, "404": None, - "409": None, - "413": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4318,12 +4494,17 @@ def get_group( response_types_map=_response_types_map, ).data - def _get_group_serialize( + def _get_boards_serialize( self, - id, - attributes, - _request_auth, - _content_type, + team_id, + project_id, + query, + owner, + limit, + offset, + sort, + _request_auth, + _content_type, _headers, _host_index, ) -> RequestSerialized: @@ -4340,26 +4521,48 @@ def _get_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id # process the query parameters - if attributes is not None: + if team_id is not None: - _query_params.append(("attributes", attributes)) + _query_params.append(("team_id", team_id)) + + if project_id is not None: + + _query_params.append(("project_id", project_id)) + + if query is not None: + + _query_params.append(("query", query)) + + if owner is not None: + + _query_params.append(("owner", owner)) + + if limit is not None: + + _query_params.append(("limit", limit)) + + if offset is not None: + + _query_params.append(("offset", offset)) + + if sort is not None: + + _query_params.append(("sort", sort)) # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Groups/{id}", + resource_path="/v2/boards", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4373,44 +4576,11 @@ def _get_group_serialize( ) @validate_call - def list_groups( + def get_specific_board( self, - attributes: Annotated[ - Optional[StrictStr], - Field( - description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to fetch attributes within complex attributes, for Example: members.display." - ), - ] = None, - filter: Annotated[ - Optional[StrictStr], - Field( - description='You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical "and"
or = Logical "or"
not = "Not" function
() = Precedence grouping
The value must be passed within parenthesis.

For Example: displayName eq "Product Team" will fetch information related to team matching the display name "Product Team".
Note: Filtering on complex attributes is not supported' - ), - ] = None, - start_index: Annotated[ - Optional[StrictInt], - Field( - description="Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1" - ), - ] = None, - count: Annotated[ - Optional[StrictInt], - Field( - description="Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12" - ), - ] = None, - sort_by: Annotated[ - Optional[StrictStr], - Field( - description="Specifies the attribute whose value will be used to order the response. Example sortBy=displayName" - ), - ] = None, - sort_order: Annotated[ - Optional[StrictStr], - Field( - description="Defines the order in which the 'sortBy' parameter is applied. Example: sortOrder=ascending" - ), - ] = None, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board that you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4420,23 +4590,13 @@ def list_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupListResponse: - """List groups + ) -> BoardWithLinksAndLastOpened: + """Get specific board - Retrieves the list of groups (teams) in the organization.

Note: Along with groups (teams), the users that are part of those groups (teams) are also retrieved. Only users that have member role in the organization are fetched. + Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
- :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to fetch attributes within complex attributes, for Example: members.display. - :type attributes: str - :param filter: You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical \"and\"
or = Logical \"or\"
not = \"Not\" function
() = Precedence grouping
The value must be passed within parenthesis.

For Example: displayName eq \"Product Team\" will fetch information related to team matching the display name \"Product Team\".
Note: Filtering on complex attributes is not supported - :type filter: str - :param start_index: Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1 - :type start_index: int - :param count: Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12 - :type count: int - :param sort_by: Specifies the attribute whose value will be used to order the response. Example sortBy=displayName - :type sort_by: str - :param sort_order: Defines the order in which the 'sortBy' parameter is applied. Example: sortOrder=ascending - :type sort_order: str + :param board_id: Unique identifier (ID) of the board that you want to retrieve. (required) + :type board_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4459,13 +4619,8 @@ def list_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._list_groups_serialize( - attributes=attributes, - filter=filter, - start_index=start_index, - count=count, - sort_by=sort_by, - sort_order=sort_order, + _param = self._get_specific_board_serialize( + board_id=board_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4473,13 +4628,10 @@ def list_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupListResponse", + "200": "BoardWithLinksAndLastOpened", "400": None, - "401": None, - "403": None, "404": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4488,14 +4640,9 @@ def list_groups( response_types_map=_response_types_map, ).data - def _list_groups_serialize( + def _get_specific_board_serialize( self, - attributes, - filter, - start_index, - count, - sort_by, - sort_order, + board_id, _request_auth, _content_type, _headers, @@ -4514,44 +4661,22 @@ def _list_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if attributes is not None: - - _query_params.append(("attributes", attributes)) - - if filter is not None: - - _query_params.append(("filter", filter)) - - if start_index is not None: - - _query_params.append(("startIndex", start_index)) - - if count is not None: - - _query_params.append(("count", count)) - - if sort_by is not None: - - _query_params.append(("sortBy", sort_by)) - - if sort_order is not None: - - _query_params.append(("sortOrder", sort_order)) - # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Groups", + resource_path="/v2/boards/{board_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4565,23 +4690,12 @@ def _list_groups_serialize( ) @validate_call - def patch_group( + def update_board( self, - id: Annotated[ - StrictStr, Field(description="Group (Team) ID. A server-assigned, unique identifier for this Group (team).") - ], - patch_group_resource: Annotated[ - PatchGroupResource, - Field( - description="Payload to add, replace, remove members in the specified group (team).

The body of a PATCH request must contain the attribute `Operations` and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one `op` member. " - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board that you want to update.") ], - attributes: Annotated[ - Optional[StrictStr], - Field( - description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
It is also possible to fetch attributes within complex attributes, for Example: members.display" - ), - ] = None, + board_changes: BoardChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4591,17 +4705,15 @@ def patch_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupResource: - """Patch group + ) -> BoardWithLinks: + """Update board - Updates an existing group resource, i.e. a team, overwriting values for specified attributes. Patch operation for group can be used to add, remove, or replace team members and to update the display name of the group (team).

To add a user to the group (team), use add operation.
To remove a user from a group (team), use remove operation.
To update a user resource, use the replace operation.
The last team admin cannot be removed from the team.

Note: Attributes that are not provided will remain unchanged. PATCH operation only updates the fields provided.

Team members removal specifics:
For remove or replace operations, the team member is removed from the team and from all team boards. The ownership of boards that belong to the removed team member is transferred to the oldest team member who currently has an admin role. After you remove a team member, adding the team member again to the team does not automatically restore their previous ownership of the boards. If the user is not registered fully in Miro and is not assigned to any other team, the user is also removed from the organization.

Add team members specifics:
All added team members are reactivated or recreated if they were deactivated or deleted earlier.

External users specifics:
When adding existing users with the role ORGANIZATION_EXTERNAL_USER or ORGANIZATION_TEAM_GUEST_USER to a team, we set FULL license and ORGANIZATION_INTERNAL_USER roles. + Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
- :param id: Group (Team) ID. A server-assigned, unique identifier for this Group (team). (required) - :type id: str - :param patch_group_resource: Payload to add, replace, remove members in the specified group (team).

The body of a PATCH request must contain the attribute `Operations` and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one `op` member. (required) - :type patch_group_resource: PatchGroupResource - :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
It is also possible to fetch attributes within complex attributes, for Example: members.display - :type attributes: str + :param board_id: Unique identifier (ID) of the board that you want to update. (required) + :type board_id: str + :param board_changes: (required) + :type board_changes: BoardChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4624,10 +4736,9 @@ def patch_group( :return: Returns the result object. """ # noqa: E501 - _param = self._patch_group_serialize( - id=id, - patch_group_resource=patch_group_resource, - attributes=attributes, + _param = self._update_board_serialize( + board_id=board_id, + board_changes=board_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4635,15 +4746,12 @@ def patch_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupResource", + "200": "BoardWithLinks", + "202": None, "400": None, - "401": None, - "403": None, "404": None, "409": None, - "413": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4652,11 +4760,10 @@ def patch_group( response_types_map=_response_types_map, ).data - def _patch_group_serialize( + def _update_board_serialize( self, - id, - patch_group_resource, - attributes, + board_id, + board_changes, _request_auth, _content_type, _headers, @@ -4675,29 +4782,23 @@ def _patch_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if attributes is not None: - - _query_params.append(("attributes", attributes)) - # process the header parameters # process the form parameters # process the body parameter - if patch_group_resource is not None: - _body_params = patch_group_resource + if board_changes is not None: + _body_params = board_changes # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type( - ["application/scim+json", "application/json"] - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -4706,7 +4807,7 @@ def _patch_group_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/Groups/{id}", + resource_path="/v2/boards/{board_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4720,12 +4821,12 @@ def _patch_group_serialize( ) @validate_call - def create_case( + def create_items( self, - org_id: Annotated[ - str, Field(strict=True, description="The ID of the organization in which you want to create a new case.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - case_request: CaseRequest, + item_create: Annotated[List[ItemCreate], Field(min_length=1, max_length=20)], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4735,15 +4836,15 @@ def create_case( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CaseResponse: - """Create case + ) -> Items: + """Create items in bulk - Creating a case for legal hold is the first critical step in the eDiscovery process when litigation or an investigation is anticipated. One of the purposes of creating a case is that it acts as a container that allows admins to group multiple legal holds under one case. For more information, see our Help Center page on creating a case.

This API creates a new case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Adds different types of items to a board. You can add up to 20 items of the same or different type per create call. For example, you can create 3 shape items, 4 card items, and 5 sticky notes in one create call. The bulk create operation is transactional. If any item's create operation fails, the create operation for all the remaining items also fails, and none of the items will be created.

To try out this API in our documentation:

1. In the **BODY PARAMS** section, scroll down until you see **ADD OBJECT** (Figure 1).

“add
Figure 1. Add object user interface in readme

2. Click **ADD OBJECT**, and then select or enter the appropriate values for parameters of the item that you want to add.

3. Repeat steps 1 and 2 for each item that you want to add.

Required scope

boards:write

Rate limiting

Level 2 per item. For example, if you want to create one sticky note, one card, and one shape item in one call, the rate limiting applicable will be 300 credits. This is because create item calls take Level 2 rate limiting of 100 credits each, 100 for sticky note, 100 for card, and 100 for shape item. - :param org_id: The ID of the organization in which you want to create a new case. (required) - :type org_id: str - :param case_request: (required) - :type case_request: CaseRequest + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param item_create: (required) + :type item_create: List[ItemCreate] :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4766,9 +4867,9 @@ def create_case( :return: Returns the result object. """ # noqa: E501 - _param = self._create_case_serialize( - org_id=org_id, - case_request=case_request, + _param = self._create_items_serialize( + board_id=board_id, + item_create=item_create, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4776,12 +4877,9 @@ def create_case( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CaseResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "201": "Items", + "400": "BulkOperationError", + "429": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4790,10 +4888,10 @@ def create_case( response_types_map=_response_types_map, ).data - def _create_case_serialize( + def _create_items_serialize( self, - org_id, - case_request, + board_id, + item_create, _request_auth, _content_type, _headers, @@ -4802,7 +4900,9 @@ def _create_case_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "ItemCreate": "", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -4812,14 +4912,14 @@ def _create_case_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if case_request is not None: - _body_params = case_request + if item_create is not None: + _body_params = item_create # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -4837,7 +4937,7 @@ def _create_case_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/orgs/{org_id}/cases", + resource_path="/v2/boards/{board_id}/items/bulk", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4851,16 +4951,21 @@ def _create_case_serialize( ) @validate_call - def create_legal_hold( + def create_items_in_bulk_using_file_from_device( self, - org_id: Annotated[ - str, - Field(strict=True, description="The ID of the organization in which you want to create a new legal hold."), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - case_id: Annotated[ - str, Field(strict=True, description="The ID of the case in which you want to create a new legal hold.") + data: Annotated[ + Union[StrictBytes, StrictStr], + Field( + description="JSON file containing bulk data, where each object represents an item to be created. For details, see [JSON file example](https://developers.miro.com/reference/json-data-example)." + ), + ], + resources: Annotated[ + List[Union[StrictBytes, StrictStr]], + Field(description="Array of items to create (PDFs, images, etc.). Maximum of 20 items."), ], - legal_hold_request: LegalHoldRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4870,17 +4975,17 @@ def create_legal_hold( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> LegalHoldResponse: - """Create legal hold + ) -> Items: + """Create items in bulk using file from device - After creating a case it is possible to add one or multiple legal holds to the case. Creating a legal hold involves identifying the relevant users associated with a case and applying the hold to prevent permanent deletion of content that those users own, co-own, create, edit or access. For more information, see our Help Center page on adding a legal hold to a case.

This API creates a new legal hold in a case for an organization. Newly created legal holds could take up to 24 hours to be processed.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Adds different types of items to a board using files from a device. You can add up to 20 items of the same or different type per create call. For example, you can create 5 document items and 5 images in one create call. The bulk create operation is transactional. If any item's create operation fails, the create operation for all the remaining items also fails, and none of the items will be created. To try out this API in our documentation: 1. In the **BODY PARAMS** section, select **ADD FILE**, and then upload a local file. Repeat for each item that you want to add. 2. Upload a JSON file that contains the bulk data for the items you want to create.

Required scope

boards:write

Rate limiting

Level 2 per item
- :param org_id: The ID of the organization in which you want to create a new legal hold. (required) - :type org_id: str - :param case_id: The ID of the case in which you want to create a new legal hold. (required) - :type case_id: str - :param legal_hold_request: (required) - :type legal_hold_request: LegalHoldRequest + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param data: JSON file containing bulk data, where each object represents an item to be created. For details, see [JSON file example](https://developers.miro.com/reference/json-data-example). (required) + :type data: bytearray + :param resources: Array of items to create (PDFs, images, etc.). Maximum of 20 items. (required) + :type resources: List[bytearray] :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4903,10 +5008,10 @@ def create_legal_hold( :return: Returns the result object. """ # noqa: E501 - _param = self._create_legal_hold_serialize( - org_id=org_id, - case_id=case_id, - legal_hold_request=legal_hold_request, + _param = self._create_items_in_bulk_using_file_from_device_serialize( + board_id=board_id, + data=data, + resources=resources, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4914,12 +5019,7 @@ def create_legal_hold( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "LegalHoldResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "201": "Items", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -4928,11 +5028,11 @@ def create_legal_hold( response_types_map=_response_types_map, ).data - def _create_legal_hold_serialize( + def _create_items_in_bulk_using_file_from_device_serialize( self, - org_id, - case_id, - legal_hold_request, + board_id, + data, + resources, _request_auth, _content_type, _headers, @@ -4941,7 +5041,9 @@ def _create_legal_hold_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + "resources": "csv", + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -4951,16 +5053,16 @@ def _create_legal_hold_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters + if data is not None: + _files["data"] = data + if resources is not None: + _files["resources"] = resources # process the body parameter - if legal_hold_request is not None: - _body_params = legal_hold_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -4969,7 +5071,7 @@ def _create_legal_hold_serialize( if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -4978,7 +5080,7 @@ def _create_legal_hold_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", + resource_path="/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4992,12 +5094,12 @@ def _create_legal_hold_serialize( ) @validate_call - def delete_case( + def create_card_item( self, - org_id: Annotated[ - str, Field(strict=True, description="The ID of the organization in which you want to close a case.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to close.")], + card_create_request: CardCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5007,15 +5109,15 @@ def delete_case( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Close case + ) -> CardItem: + """Create card item - Closing a case is the final stage in the eDiscovery process, marking the conclusion of a legal matter or investigation. You must ensure that all associated legal holds within the case are closed before closing the case. Closing a case will permanently delete it. For more information, see our Help Center page on closing a case.

This API closes a case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization in which you want to close a case. (required) - :type org_id: str - :param case_id: The ID of the case you want to close. (required) - :type case_id: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param card_create_request: (required) + :type card_create_request: CardCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5038,9 +5140,9 @@ def delete_case( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_case_serialize( - org_id=org_id, - case_id=case_id, + _param = self._create_card_item_serialize( + board_id=board_id, + card_create_request=card_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5048,10 +5150,8 @@ def delete_case( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "201": "CardItem", "400": None, - "401": None, - "403": None, "404": None, "429": None, } @@ -5062,10 +5162,10 @@ def delete_case( response_types_map=_response_types_map, ).data - def _delete_case_serialize( + def _create_card_item_serialize( self, - org_id, - case_id, + board_id, + card_create_request, _request_auth, _content_type, _headers, @@ -5084,21 +5184,32 @@ def _delete_case_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if card_create_request is not None: + _body_params = card_create_request + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/cases/{case_id}", + method="POST", + resource_path="/v2/boards/{board_id}/cards", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5112,15 +5223,12 @@ def _delete_case_serialize( ) @validate_call - def delete_legal_hold( + def delete_card_item( self, - org_id: Annotated[ - str, Field(strict=True, description="The ID of the organization in which you want to close a legal hold.") - ], - case_id: Annotated[ - str, Field(strict=True, description="The ID of the case in which you want to close a legal hold.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to close.")], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5130,17 +5238,15 @@ def delete_legal_hold( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Close legal hold + ) -> object: + """Delete card item - Closing a legal hold is one of the final steps in the eDiscovery process once the litigation or investigation has concluded. This process involves releasing the Miro boards and custodians that were under legal hold, allowing the preserved boards to return to normal operations. Closing a legal hold will permanently delete it. For more information, see our Help Center page on closing a legal hold.

This API closes a legal hold in a case for an organization. Once a legal hold is closed, it can take up to 24 hours to release the content items from the legal hold.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of the organization in which you want to close a legal hold. (required) - :type org_id: str - :param case_id: The ID of the case in which you want to close a legal hold. (required) - :type case_id: str - :param legal_hold_id: The ID of the legal hold you want to close. (required) - :type legal_hold_id: str + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5163,10 +5269,9 @@ def delete_legal_hold( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_legal_hold_serialize( - org_id=org_id, - case_id=case_id, - legal_hold_id=legal_hold_id, + _param = self._delete_card_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5174,10 +5279,8 @@ def delete_legal_hold( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "204": "object", "400": None, - "401": None, - "403": None, "404": None, "429": None, } @@ -5188,11 +5291,10 @@ def delete_legal_hold( response_types_map=_response_types_map, ).data - def _delete_legal_hold_serialize( + def _delete_card_item_serialize( self, - org_id, - case_id, - legal_hold_id, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -5211,23 +5313,24 @@ def _delete_legal_hold_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id - if legal_hold_id is not None: - _path_params["legal_hold_id"] = legal_hold_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="DELETE", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", + resource_path="/v2/boards/{board_id}/cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5241,16 +5344,15 @@ def _delete_legal_hold_serialize( ) @validate_call - def edit_case( + def get_card_item( self, - org_id: Annotated[ - str, - Field( - strict=True, description="The ID of the organization for which you want to edit the case information." - ), + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to edit.")], - case_request: CaseRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5260,17 +5362,15 @@ def edit_case( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CaseResponse: - """Edit case + ) -> CardItem: + """Get card item - Editing a case allows eDiscovery Admins to keep case details accurate and aligned with the evolving scope of a legal matter. As investigations progress, it may be necessary to update the case name or description to reflect changes in focus, terminology, or internal documentation standards. Since a case serves as the central container for one or more legal holds, keeping its information up to date helps ensure clarity, consistency, and easier navigation for all stakeholders involved in the legal process.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of the organization for which you want to edit the case information. (required) - :type org_id: str - :param case_id: The ID of the case you want to edit. (required) - :type case_id: str - :param case_request: (required) - :type case_request: CaseRequest + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5293,10 +5393,9 @@ def edit_case( :return: Returns the result object. """ # noqa: E501 - _param = self._edit_case_serialize( - org_id=org_id, - case_id=case_id, - case_request=case_request, + _param = self._get_card_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5304,10 +5403,8 @@ def edit_case( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CaseResponse", + "200": "CardItem", "400": None, - "401": None, - "403": None, "404": None, "429": None, } @@ -5318,11 +5415,10 @@ def edit_case( response_types_map=_response_types_map, ).data - def _edit_case_serialize( + def _get_card_item_serialize( self, - org_id, - case_id, - case_request, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -5341,34 +5437,24 @@ def _edit_case_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if case_request is not None: - _body_params = case_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/v2/orgs/{org_id}/cases/{case_id}", + method="GET", + resource_path="/v2/boards/{board_id}/cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5382,21 +5468,13 @@ def _edit_case_serialize( ) @validate_call - def edit_legal_hold( + def update_card_item( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to edit the legal hold information.", - ), - ], - case_id: Annotated[ - str, - Field(strict=True, description="The ID of the case for which you want to edit the legal hold information."), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], - legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to edit.")], - legal_hold_request: LegalHoldRequest, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + card_update_request: CardUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5406,19 +5484,17 @@ def edit_legal_hold( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> LegalHoldResponse: - """Edit legal hold + ) -> CardItem: + """Update card item - Editing a legal hold allows eDiscovery Admins to adjust and refine ongoing legal preservation efforts as case requirements evolve. Whether new custodians are identified, additional Miro boards become relevant, or existing boards or users are no longer in scope, editing a legal hold ensures that the correct data remains preserved and defensible throughout the legal process. Admins can update the legal hold’s name or description and add or remove users and boards as needed. This flexibility supports dynamic legal workflows and ensures that preservation stays precise, up to date, and aligned with the scope of the legal matter—maintaining compliance while avoiding unnecessary data retention.

When a legal hold is edited, boards newly added to the hold will begin having their versions preserved from that point forward, boards or users removed from the hold will stop being preserved, and their versions will no longer be preserved as part of that legal hold, boards that remain under hold will continue to have all versions preserved, including any deletions that occur after the hold was applied. This approach ensures organizations can respond to legal demands with accuracy and accountability as a case evolves.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Updates a card item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization for which you want to edit the legal hold information. (required) - :type org_id: str - :param case_id: The ID of the case for which you want to edit the legal hold information. (required) - :type case_id: str - :param legal_hold_id: The ID of the legal hold you want to edit. (required) - :type legal_hold_id: str - :param legal_hold_request: (required) - :type legal_hold_request: LegalHoldRequest + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param card_update_request: (required) + :type card_update_request: CardUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5441,11 +5517,10 @@ def edit_legal_hold( :return: Returns the result object. """ # noqa: E501 - _param = self._edit_legal_hold_serialize( - org_id=org_id, - case_id=case_id, - legal_hold_id=legal_hold_id, - legal_hold_request=legal_hold_request, + _param = self._update_card_item_serialize( + board_id=board_id, + item_id=item_id, + card_update_request=card_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5453,11 +5528,10 @@ def edit_legal_hold( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "LegalHoldResponse", + "200": "CardItem", "400": None, - "401": None, - "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -5467,12 +5541,11 @@ def edit_legal_hold( response_types_map=_response_types_map, ).data - def _edit_legal_hold_serialize( + def _update_card_item_serialize( self, - org_id, - case_id, - legal_hold_id, - legal_hold_request, + board_id, + item_id, + card_update_request, _request_auth, _content_type, _headers, @@ -5491,18 +5564,16 @@ def _edit_legal_hold_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id - if legal_hold_id is not None: - _path_params["legal_hold_id"] = legal_hold_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if legal_hold_request is not None: - _body_params = legal_hold_request + if card_update_request is not None: + _body_params = card_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -5519,8 +5590,8 @@ def _edit_legal_hold_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/cards/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5534,24 +5605,12 @@ def _edit_legal_hold_serialize( ) @validate_call - def get_all_cases( + def create_code_widget_item( self, - org_id: Annotated[ - str, - Field( - strict=True, description="The ID of the organization for which you want to retrieve the list of cases." - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of items in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " - ), - ] = None, + code_widget_create_request: Optional[CodeWidgetCreateRequest] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5561,17 +5620,15 @@ def get_all_cases( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> PaginatedCaseResponse: - """Get all cases + ) -> CodeWidgetItem: + """Create code widget item - Retrieves the list of eDiscovery cases in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Adds a code widget item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization for which you want to retrieve the list of cases. (required) - :type org_id: str - :param limit: The maximum number of items in the result list. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param code_widget_create_request: + :type code_widget_create_request: CodeWidgetCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5594,10 +5651,9 @@ def get_all_cases( :return: Returns the result object. """ # noqa: E501 - _param = self._get_all_cases_serialize( - org_id=org_id, - limit=limit, - cursor=cursor, + _param = self._create_code_widget_item_serialize( + board_id=board_id, + code_widget_create_request=code_widget_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5605,12 +5661,10 @@ def get_all_cases( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedCaseResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "201": "CodeWidgetItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -5619,11 +5673,10 @@ def get_all_cases( response_types_map=_response_types_map, ).data - def _get_all_cases_serialize( + def _create_code_widget_item_serialize( self, - org_id, - limit, - cursor, + board_id, + code_widget_create_request, _request_auth, _content_type, _headers, @@ -5642,30 +5695,32 @@ def _get_all_cases_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if code_widget_create_request is not None: + _body_params = code_widget_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/cases", + method="POST", + resource_path="/v2-experimental/boards/{board_id}/code_widgets", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5679,31 +5734,12 @@ def _get_all_cases_serialize( ) @validate_call - def get_all_legal_holds( + def delete_code_widget_item( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to retrieve the list of legal holds within a case.", - ), - ], - case_id: Annotated[ - str, - Field( - strict=True, description="The ID of the case for which you want to retrieve the list of legal holds." - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of items in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " - ), - ] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5713,19 +5749,15 @@ def get_all_legal_holds( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> PaginatedLegalHoldResponse: - """Get all legal holds within a case + ) -> object: + """Delete code widget item - Retrieves the list of all legal holds within a case for an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Deletes a code widget item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of the organization for which you want to retrieve the list of legal holds within a case. (required) - :type org_id: str - :param case_id: The ID of the case for which you want to retrieve the list of legal holds. (required) - :type case_id: str - :param limit: The maximum number of items in the result list. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5748,11 +5780,9 @@ def get_all_legal_holds( :return: Returns the result object. """ # noqa: E501 - _param = self._get_all_legal_holds_serialize( - org_id=org_id, - case_id=case_id, - limit=limit, - cursor=cursor, + _param = self._delete_code_widget_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5760,13 +5790,11 @@ def get_all_legal_holds( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedLegalHoldResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, - } + "204": "object", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", + } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( @@ -5774,12 +5802,10 @@ def get_all_legal_holds( response_types_map=_response_types_map, ).data - def _get_all_legal_holds_serialize( + def _delete_code_widget_item_serialize( self, - org_id, - case_id, - limit, - cursor, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -5798,19 +5824,11 @@ def _get_all_legal_holds_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter @@ -5822,8 +5840,8 @@ def _get_all_legal_holds_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", + method="DELETE", + resource_path="/v2-experimental/boards/{board_id}/code_widgets/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5837,16 +5855,15 @@ def _get_all_legal_holds_serialize( ) @validate_call - def get_case( + def get_code_widget_item( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to retrieve the case information.", - ), + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to retrieve.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5856,15 +5873,15 @@ def get_case( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CaseResponse: - """Get case + ) -> CodeWidgetItem: + """Get code widget item - Retrieves information about a case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Retrieves information for a specific code widget item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of the organization for which you want to retrieve the case information. (required) - :type org_id: str - :param case_id: The ID of the case you want to retrieve. (required) - :type case_id: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5887,9 +5904,9 @@ def get_case( :return: Returns the result object. """ # noqa: E501 - _param = self._get_case_serialize( - org_id=org_id, - case_id=case_id, + _param = self._get_code_widget_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5897,12 +5914,10 @@ def get_case( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CaseResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "CodeWidgetItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -5911,10 +5926,10 @@ def get_case( response_types_map=_response_types_map, ).data - def _get_case_serialize( + def _get_code_widget_item_serialize( self, - org_id, - case_id, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -5933,10 +5948,10 @@ def _get_case_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters @@ -5950,7 +5965,7 @@ def _get_case_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}", + resource_path="/v2-experimental/boards/{board_id}/code_widgets/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5964,22 +5979,16 @@ def _get_case_serialize( ) @validate_call - def get_legal_hold( + def get_code_widget_items( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to retrieve the legal hold information.", - ), - ], - case_id: Annotated[ - str, + board_id: Annotated[ + StrictStr, Field( - strict=True, description="The ID of the case for which you want to retrieve the legal hold information." + description="Unique identifier (ID) of the board for which you want to retrieve the list of code widget items." ), ], - legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to retrieve.")], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5989,17 +5998,17 @@ def get_legal_hold( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> LegalHoldResponse: - """Get legal hold information + ) -> CodeWidgetCursorPaged: + """Get code widget items - Retrieves information about a legal hold within a case for an organization.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Retrieves a list of code widget items for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.

Required scope

boards:read

Rate limiting

Level 2
- :param org_id: The ID of the organization for which you want to retrieve the legal hold information. (required) - :type org_id: str - :param case_id: The ID of the case for which you want to retrieve the legal hold information. (required) - :type case_id: str - :param legal_hold_id: The ID of the legal hold you want to retrieve. (required) - :type legal_hold_id: str + :param board_id: Unique identifier (ID) of the board for which you want to retrieve the list of code widget items. (required) + :type board_id: str + :param limit: + :type limit: str + :param cursor: + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6022,10 +6031,10 @@ def get_legal_hold( :return: Returns the result object. """ # noqa: E501 - _param = self._get_legal_hold_serialize( - org_id=org_id, - case_id=case_id, - legal_hold_id=legal_hold_id, + _param = self._get_code_widget_items_serialize( + board_id=board_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6033,12 +6042,10 @@ def get_legal_hold( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "LegalHoldResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "CodeWidgetCursorPaged", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6047,11 +6054,11 @@ def get_legal_hold( response_types_map=_response_types_map, ).data - def _get_legal_hold_serialize( + def _get_code_widget_items_serialize( self, - org_id, - case_id, - legal_hold_id, + board_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -6070,13 +6077,17 @@ def _get_legal_hold_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id - if legal_hold_id is not None: - _path_params["legal_hold_id"] = legal_hold_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -6089,7 +6100,7 @@ def _get_legal_hold_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", + resource_path="/v2-experimental/boards/{board_id}/code_widgets", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6103,39 +6114,13 @@ def _get_legal_hold_serialize( ) @validate_call - def get_legal_hold_content_items( + def move_code_widget_item( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to retrieve the list of content items under hold.", - ), - ], - case_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the case for which you want to retrieve the list of content items under hold.", - ), - ], - legal_hold_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the legal hold for which you want to retrieve the list of content items under hold.", - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to move the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of items in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " - ), - ] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to move.")], + position_change: PositionChange, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6145,21 +6130,17 @@ def get_legal_hold_content_items( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> PaginatedLegalHoldContentItemsResponse: - """Get content items under legal hold + ) -> CodeWidgetItem: + """Move code widget item - Once a legal hold is in place you can review or explore the preserved Miro boards to ensure that all relevant data is intact and ready for legal proceedings or investigations. For more information, see our Help Center page on reviewing boards under legal hold.

This API lists all content items under a specific legal hold in a case for an organization. Please verify that the legal hold is in 'ACTIVE' state to guarantee that the legal hold has finished processing the full list of content items under hold.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Updates the position of a code widget item on a board.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization for which you want to retrieve the list of content items under hold. (required) - :type org_id: str - :param case_id: The ID of the case for which you want to retrieve the list of content items under hold. (required) - :type case_id: str - :param legal_hold_id: The ID of the legal hold for which you want to retrieve the list of content items under hold. (required) - :type legal_hold_id: str - :param limit: The maximum number of items in the result list. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board where you want to move the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to move. (required) + :type item_id: str + :param position_change: (required) + :type position_change: PositionChange :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6182,12 +6163,10 @@ def get_legal_hold_content_items( :return: Returns the result object. """ # noqa: E501 - _param = self._get_legal_hold_content_items_serialize( - org_id=org_id, - case_id=case_id, - legal_hold_id=legal_hold_id, - limit=limit, - cursor=cursor, + _param = self._move_code_widget_item_serialize( + board_id=board_id, + item_id=item_id, + position_change=position_change, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6195,12 +6174,10 @@ def get_legal_hold_content_items( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedLegalHoldContentItemsResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "CodeWidgetItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6209,13 +6186,11 @@ def get_legal_hold_content_items( response_types_map=_response_types_map, ).data - def _get_legal_hold_content_items_serialize( + def _move_code_widget_item_serialize( self, - org_id, - case_id, - legal_hold_id, - limit, - cursor, + board_id, + item_id, + position_change, _request_auth, _content_type, _headers, @@ -6234,34 +6209,34 @@ def _get_legal_hold_content_items_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id - if legal_hold_id is not None: - _path_params["legal_hold_id"] = legal_hold_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if position_change is not None: + _body_params = position_change # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items", + method="PATCH", + resource_path="/v2-experimental/boards/{board_id}/code_widgets/{item_id}/position", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6275,31 +6250,13 @@ def _get_legal_hold_content_items_serialize( ) @validate_call - def get_legal_hold_export_jobs( + def update_code_widget_item( self, - org_id: Annotated[ - str, - Field( - strict=True, - description="The ID of the organization for which you want to retrieve the list of export jobs within a case.", - ), - ], - case_id: Annotated[ - str, - Field( - strict=True, description="The ID of the case for which you want to retrieve the list of export jobs." - ), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of items in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " - ), - ] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + code_widget_update_request: CodeWidgetUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6309,19 +6266,17 @@ def get_legal_hold_export_jobs( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> PaginatedCaseExportJobsResponse: - """Get board export jobs of a case + ) -> CodeWidgetItem: + """Update code widget item - Retrieves board export jobs for a case.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. + Updates a code widget item on a board based on the data properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization for which you want to retrieve the list of export jobs within a case. (required) - :type org_id: str - :param case_id: The ID of the case for which you want to retrieve the list of export jobs. (required) - :type case_id: str - :param limit: The maximum number of items in the result list. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param code_widget_update_request: (required) + :type code_widget_update_request: CodeWidgetUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6344,11 +6299,10 @@ def get_legal_hold_export_jobs( :return: Returns the result object. """ # noqa: E501 - _param = self._get_legal_hold_export_jobs_serialize( - org_id=org_id, - case_id=case_id, - limit=limit, - cursor=cursor, + _param = self._update_code_widget_item_serialize( + board_id=board_id, + item_id=item_id, + code_widget_update_request=code_widget_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6356,12 +6310,10 @@ def get_legal_hold_export_jobs( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedCaseExportJobsResponse", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "CodeWidgetItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6370,12 +6322,11 @@ def get_legal_hold_export_jobs( response_types_map=_response_types_map, ).data - def _get_legal_hold_export_jobs_serialize( + def _update_code_widget_item_serialize( self, - org_id, - case_id, - limit, - cursor, + board_id, + item_id, + code_widget_update_request, _request_auth, _content_type, _headers, @@ -6394,32 +6345,34 @@ def _get_legal_hold_export_jobs_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if case_id is not None: - _path_params["case_id"] = case_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if code_widget_update_request is not None: + _body_params = code_widget_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/export-jobs", + method="PATCH", + resource_path="/v2-experimental/boards/{board_id}/code_widgets/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6433,12 +6386,13 @@ def _get_legal_hold_export_jobs_serialize( ) @validate_call - def create_mindmap_nodes_experimental( + def create_connector( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board for which you want to create the connector."), ], - mindmap_create_request: MindmapCreateRequest, + connector_creation_data: ConnectorCreationData, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6448,15 +6402,15 @@ def create_mindmap_nodes_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> MindmapItem: - """Create mind map node + ) -> ConnectorWithLinks: + """Create connector - Adds a mind map node to a board. A root node is the starting point of a mind map. A node that is created under a root node is a child node. For information on mind maps, use cases, mind map structure, and more, see the Mind Map Overview page.

Required scope

boards:write

Rate limiting

Level 2

Known limitations on node placement: Currently, the create API supports explicit positions for nodes. This means that users can only place nodes based on the x, y coordinates provided in the position parameters. If the position is not provided in the request, nodes default to coordinates x=0, y=0, effectively placing them at the center of the board.

Upcoming changes: We understand the importance of flexibility in node placement. We are actively working on implementing changes to support positioning nodes relative to their parent node as well. This enhancement offers a more dynamic and intuitive mind mapping experience.

Additionally, we are actively working on providing the update API, further enhancing the functionality of mind map APIs. + Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param board_id: Unique identifier (ID) of the board for which you want to create the connector. (required) :type board_id: str - :param mindmap_create_request: (required) - :type mindmap_create_request: MindmapCreateRequest + :param connector_creation_data: (required) + :type connector_creation_data: ConnectorCreationData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6479,9 +6433,9 @@ def create_mindmap_nodes_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._create_mindmap_nodes_experimental_serialize( + _param = self._create_connector_serialize( board_id=board_id, - mindmap_create_request=mindmap_create_request, + connector_creation_data=connector_creation_data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6489,10 +6443,10 @@ def create_mindmap_nodes_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "MindmapItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "ConnectorWithLinks", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6501,10 +6455,10 @@ def create_mindmap_nodes_experimental( response_types_map=_response_types_map, ).data - def _create_mindmap_nodes_experimental_serialize( + def _create_connector_serialize( self, board_id, - mindmap_create_request, + connector_creation_data, _request_auth, _content_type, _headers, @@ -6529,8 +6483,8 @@ def _create_mindmap_nodes_experimental_serialize( # process the header parameters # process the form parameters # process the body parameter - if mindmap_create_request is not None: - _body_params = mindmap_create_request + if connector_creation_data is not None: + _body_params = connector_creation_data # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -6548,7 +6502,7 @@ def _create_mindmap_nodes_experimental_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes", + resource_path="/v2/boards/{board_id}/connectors", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6562,14 +6516,14 @@ def _create_mindmap_nodes_experimental_serialize( ) @validate_call - def delete_mindmap_node_experimental( + def delete_connector( self, board_id: Annotated[ StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to delete the mind map node."), + Field(description="Unique identifier (ID) of the board from which you want to delete the connector."), ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the mind map node that you want to delete.") + connector_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the connector that you want to delete.") ], _request_timeout: Union[ None, @@ -6581,14 +6535,14 @@ def delete_mindmap_node_experimental( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Delete mind map node + """Delete connector - Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board from which you want to delete the mind map node. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete the connector. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the mind map node that you want to delete. (required) - :type item_id: str + :param connector_id: Unique identifier (ID) of the connector that you want to delete. (required) + :type connector_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6611,9 +6565,9 @@ def delete_mindmap_node_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_mindmap_node_experimental_serialize( + _param = self._delete_connector_serialize( board_id=board_id, - item_id=item_id, + connector_id=connector_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6622,9 +6576,9 @@ def delete_mindmap_node_experimental( _response_types_map: Dict[str, Optional[str]] = { "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6633,10 +6587,10 @@ def delete_mindmap_node_experimental( response_types_map=_response_types_map, ).data - def _delete_mindmap_node_experimental_serialize( + def _delete_connector_serialize( self, board_id, - item_id, + connector_id, _request_auth, _content_type, _headers, @@ -6657,8 +6611,8 @@ def _delete_mindmap_node_experimental_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if connector_id is not None: + _path_params["connector_id"] = connector_id # process the query parameters # process the header parameters # process the form parameters @@ -6672,7 +6626,7 @@ def _delete_mindmap_node_experimental_serialize( return self.api_client.param_serialize( method="DELETE", - resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}", + resource_path="/v2/boards/{board_id}/connectors/{connector_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6686,14 +6640,16 @@ def _delete_mindmap_node_experimental_serialize( ) @validate_call - def get_mindmap_node_experimental( + def get_connector( self, board_id: Annotated[ StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a mind map node."), + Field( + description="Unique identifier (ID) of the board from which you want to retrieve a specific connector." + ), ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the mind map node that you want to retrieve.") + connector_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the connector that you want to retrieve.") ], _request_timeout: Union[ None, @@ -6704,15 +6660,15 @@ def get_mindmap_node_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> MindmapItem: - """Get specific mind map node + ) -> ConnectorWithLinks: + """Get specific connector - Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a mind map node. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific connector. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the mind map node that you want to retrieve. (required) - :type item_id: str + :param connector_id: Unique identifier (ID) of the connector that you want to retrieve. (required) + :type connector_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6735,9 +6691,9 @@ def get_mindmap_node_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_mindmap_node_experimental_serialize( + _param = self._get_connector_serialize( board_id=board_id, - item_id=item_id, + connector_id=connector_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6745,7 +6701,10 @@ def get_mindmap_node_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "MindmapItem", + "200": "ConnectorWithLinks", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6754,10 +6713,10 @@ def get_mindmap_node_experimental( response_types_map=_response_types_map, ).data - def _get_mindmap_node_experimental_serialize( + def _get_connector_serialize( self, board_id, - item_id, + connector_id, _request_auth, _content_type, _headers, @@ -6778,8 +6737,8 @@ def _get_mindmap_node_experimental_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if connector_id is not None: + _path_params["connector_id"] = connector_id # process the query parameters # process the header parameters # process the form parameters @@ -6793,7 +6752,7 @@ def _get_mindmap_node_experimental_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}", + resource_path="/v2/boards/{board_id}/connectors/{connector_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6807,16 +6766,16 @@ def _get_mindmap_node_experimental_serialize( ) @validate_call - def get_mindmap_nodes_experimental( + def get_connectors( self, board_id: Annotated[ StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve mind map nodes."), + Field( + description="Unique identifier (ID) of the board from which you want to retrieve a list of connectors." + ), ], - limit: Annotated[Optional[StrictStr], Field(description="Maximum number of results returned")] = None, - cursor: Annotated[ - Optional[StrictStr], Field(description="Points to the next portion of the results set") - ] = None, + limit: Optional[Annotated[str, Field(strict=True)]] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6826,16 +6785,16 @@ def get_mindmap_nodes_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> MindmapCursorPaged: - """Get mind map nodes + ) -> ConnectorsCursorPaged: + """Get connectors - Retrieves a list of mind map nodes for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Retrieves a list of connectors for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve mind map nodes. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a list of connectors. (required) :type board_id: str - :param limit: Maximum number of results returned + :param limit: :type limit: str - :param cursor: Points to the next portion of the results set + :param cursor: :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -6859,7 +6818,7 @@ def get_mindmap_nodes_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_mindmap_nodes_experimental_serialize( + _param = self._get_connectors_serialize( board_id=board_id, limit=limit, cursor=cursor, @@ -6870,7 +6829,10 @@ def get_mindmap_nodes_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "MindmapCursorPaged", + "200": "ConnectorsCursorPaged", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6879,7 +6841,7 @@ def get_mindmap_nodes_experimental( response_types_map=_response_types_map, ).data - def _get_mindmap_nodes_experimental_serialize( + def _get_connectors_serialize( self, board_id, limit, @@ -6925,7 +6887,7 @@ def _get_mindmap_nodes_experimental_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes", + resource_path="/v2/boards/{board_id}/connectors", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6939,9 +6901,16 @@ def _get_mindmap_nodes_experimental_serialize( ) @validate_call - def revoke_token_v2( + def update_connector( self, - revoke_token_request: RevokeTokenRequest, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board for which you want to update the connector."), + ], + connector_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the connector that you want to update.") + ], + connector_changes_data: ConnectorChangesData, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6951,13 +6920,17 @@ def revoke_token_v2( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Revoke token (v2) + ) -> ConnectorWithLinks: + """Update connector - Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. + Updates a connector on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param revoke_token_request: (required) - :type revoke_token_request: RevokeTokenRequest + :param board_id: Unique identifier (ID) of the board for which you want to update the connector. (required) + :type board_id: str + :param connector_id: Unique identifier (ID) of the connector that you want to update. (required) + :type connector_id: str + :param connector_changes_data: (required) + :type connector_changes_data: ConnectorChangesData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6980,8 +6953,10 @@ def revoke_token_v2( :return: Returns the result object. """ # noqa: E501 - _param = self._revoke_token_v2_serialize( - revoke_token_request=revoke_token_request, + _param = self._update_connector_serialize( + board_id=board_id, + connector_id=connector_id, + connector_changes_data=connector_changes_data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6989,8 +6964,11 @@ def revoke_token_v2( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "404": "ErrorResponse", + "200": "ConnectorWithLinks", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -6999,9 +6977,11 @@ def revoke_token_v2( response_types_map=_response_types_map, ).data - def _revoke_token_v2_serialize( + def _update_connector_serialize( self, - revoke_token_request, + board_id, + connector_id, + connector_changes_data, _request_auth, _content_type, _headers, @@ -7020,12 +7000,16 @@ def _revoke_token_v2_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if connector_id is not None: + _path_params["connector_id"] = connector_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if revoke_token_request is not None: - _body_params = revoke_token_request + if connector_changes_data is not None: + _body_params = connector_changes_data # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -7042,8 +7026,8 @@ def _revoke_token_v2_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/oauth/revoke", + method="PATCH", + resource_path="/v2/boards/{board_id}/connectors/{connector_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7057,10 +7041,9 @@ def _revoke_token_v2_serialize( ) @validate_call - def enterprise_get_organization_member( + def get_resource_type( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - member_id: Annotated[StrictStr, Field(description="id of the organization member")], + resource: StrictStr, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7070,15 +7053,13 @@ def enterprise_get_organization_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> OrganizationMember: - """Get organization member + ) -> ResourceType: + """Get resource type - Retrieves organization member information for an existing organization.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieve metadata for the available resource types (User and Group) that are supported. - :param org_id: id of the organization (required) - :type org_id: str - :param member_id: id of the organization member (required) - :type member_id: str + :param resource: (required) + :type resource: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7101,9 +7082,8 @@ def enterprise_get_organization_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_member_serialize( - org_id=org_id, - member_id=member_id, + _param = self._get_resource_type_serialize( + resource=resource, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7111,13 +7091,12 @@ def enterprise_get_organization_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "OrganizationMember", + "200": "ResourceType", "400": None, "401": None, "403": None, "404": None, - "409": None, - "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7126,10 +7105,9 @@ def enterprise_get_organization_member( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_member_serialize( + def _get_resource_type_serialize( self, - org_id, - member_id, + resource, _request_auth, _content_type, _headers, @@ -7148,24 +7126,22 @@ def _enterprise_get_organization_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if member_id is not None: - _path_params["member_id"] = member_id + if resource is not None: + _path_params["resource"] = resource # process the query parameters # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/members/{member_id}", + resource_path="/ResourceTypes/{resource}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7179,15 +7155,9 @@ def _enterprise_get_organization_member_serialize( ) @validate_call - def enterprise_get_organization_members( + def get_schema( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - emails: Optional[StrictStr] = None, - role: Optional[StrictStr] = None, - license: Optional[StrictStr] = None, - active: Optional[StrictBool] = None, - cursor: Optional[StrictStr] = None, - limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, + uri: Annotated[StrictStr, Field(description="Schema URI of a particular resource type.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7197,25 +7167,13 @@ def enterprise_get_organization_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> EnterpriseGetOrganizationMembers200Response: - """Get organization members + ) -> SchemaResource: + """Get schema - Retrieves organization members based on the organization ID and the cursor, or based on the user emails provided in the request.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieve information about how users, groups, and enterprise-user attributes URIs that are formatted. - :param org_id: id of the organization (required) - :type org_id: str - :param emails: - :type emails: str - :param role: - :type role: str - :param license: - :type license: str - :param active: - :type active: bool - :param cursor: - :type cursor: str - :param limit: - :type limit: int + :param uri: Schema URI of a particular resource type. (required) + :type uri: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7238,14 +7196,8 @@ def enterprise_get_organization_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_members_serialize( - org_id=org_id, - emails=emails, - role=role, - license=license, - active=active, - cursor=cursor, - limit=limit, + _param = self._get_schema_serialize( + uri=uri, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7253,13 +7205,12 @@ def enterprise_get_organization_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "EnterpriseGetOrganizationMembers200Response", + "200": "SchemaResource", "400": None, "401": None, "403": None, "404": None, - "409": None, - "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7268,15 +7219,9 @@ def enterprise_get_organization_members( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_members_serialize( + def _get_schema_serialize( self, - org_id, - emails, - role, - license, - active, - cursor, - limit, + uri, _request_auth, _content_type, _headers, @@ -7295,46 +7240,22 @@ def _enterprise_get_organization_members_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id + if uri is not None: + _path_params["uri"] = uri # process the query parameters - if emails is not None: - - _query_params.append(("emails", emails)) - - if role is not None: - - _query_params.append(("role", role)) - - if license is not None: - - _query_params.append(("license", license)) - - if active is not None: - - _query_params.append(("active", active)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if limit is not None: - - _query_params.append(("limit", limit)) - # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/members", + resource_path="/Schemas/{uri}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7348,9 +7269,8 @@ def _enterprise_get_organization_members_serialize( ) @validate_call - def enterprise_get_organization( + def list_resource_types( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7360,13 +7280,11 @@ def enterprise_get_organization( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Organization: - """Get organization info + ) -> ResourceTypeListResponse: + """List resource types - Retrieves organization information.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieve information about which SCIM resources are supported.

Currently, Miro supports Users and Groups as Resource Types. - :param org_id: id of the organization (required) - :type org_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7389,22 +7307,17 @@ def enterprise_get_organization( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_serialize( - org_id=org_id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index, + _param = self._list_resource_types_serialize( + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Organization", + "200": "ResourceTypeListResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, - "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7413,9 +7326,8 @@ def enterprise_get_organization( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_serialize( + def _list_resource_types_serialize( self, - org_id, _request_auth, _content_type, _headers, @@ -7434,22 +7346,20 @@ def _enterprise_get_organization_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}", + resource_path="/ResourceTypes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7463,12 +7373,8 @@ def _enterprise_get_organization_serialize( ) @validate_call - def enterprise_add_project_member( + def list_schemas( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project to which you want to add a user.")], - add_project_member_request: AddProjectMemberRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7478,19 +7384,11 @@ def enterprise_add_project_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectMember: - """Add member in a project + ) -> SchemaListResponse: + """List schemas - Add a Miro user to a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieve metadata about Users, Groups, and extension attributes that are currently supported. - :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project to which you want to add a user. (required) - :type project_id: str - :param add_project_member_request: (required) - :type add_project_member_request: AddProjectMemberRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7513,25 +7411,17 @@ def enterprise_add_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_add_project_member_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - add_project_member_request=add_project_member_request, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index, + _param = self._list_schemas_serialize( + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ProjectMember", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "SchemaListResponse", + "400": None, + "401": None, + "403": None, + "404": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7540,12 +7430,8 @@ def enterprise_add_project_member( response_types_map=_response_types_map, ).data - def _enterprise_add_project_member_serialize( + def _list_schemas_serialize( self, - org_id, - team_id, - project_id, - add_project_member_request, _request_auth, _content_type, _headers, @@ -7564,36 +7450,20 @@ def _enterprise_add_project_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if add_project_member_request is not None: - _body_params = add_project_member_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members", + method="GET", + resource_path="/Schemas", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7607,16 +7477,8 @@ def _enterprise_add_project_member_serialize( ) @validate_call - def enterprise_delete_project_member( + def list_service_provider_configs( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[ - StrictStr, Field(description="The ID of the project from which you want to remove a member.") - ], - member_id: Annotated[ - StrictStr, Field(description="The ID of the member that you want to remove from a project.") - ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7626,19 +7488,11 @@ def enterprise_delete_project_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Remove project member + ) -> ServiceProviderConfigResponse: + """Get Service Provider Config - Remove a member from a project. The user remains in the team even after the member is removed from a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieve supported operations and SCIM API basic configuration. - :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project from which you want to remove a member. (required) - :type project_id: str - :param member_id: The ID of the member that you want to remove from a project. (required) - :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7661,25 +7515,17 @@ def enterprise_delete_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_project_member_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - member_id=member_id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index, + _param = self._list_service_provider_configs_serialize( + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "ServiceProviderConfigResponse", + "400": None, + "401": None, + "403": None, + "404": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7688,12 +7534,8 @@ def enterprise_delete_project_member( response_types_map=_response_types_map, ).data - def _enterprise_delete_project_member_serialize( + def _list_service_provider_configs_serialize( self, - org_id, - team_id, - project_id, - member_id, _request_auth, _content_type, _headers, @@ -7712,28 +7554,20 @@ def _enterprise_delete_project_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id - if member_id is not None: - _path_params["member_id"] = member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", + method="GET", + resource_path="/ServiceProviderConfig", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7747,17 +7581,12 @@ def _enterprise_delete_project_member_serialize( ) @validate_call - def enterprise_get_project_member( + def create_document_item_using_url( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[ - StrictStr, - Field(description="The ID of the project from which you want to retrieve specific member information."), - ], - member_id: Annotated[ - StrictStr, Field(description="The ID of the member for which you want to retrieve information.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], + document_create_request: DocumentCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7767,19 +7596,15 @@ def enterprise_get_project_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectMember: - """Get project member + ) -> DocumentItem: + """Create document item using URL - Retrieves information for a specific project member.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project from which you want to retrieve specific member information. (required) - :type project_id: str - :param member_id: The ID of the member for which you want to retrieve information. (required) - :type member_id: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param document_create_request: (required) + :type document_create_request: DocumentCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7802,11 +7627,9 @@ def enterprise_get_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_member_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - member_id=member_id, + _param = self._create_document_item_using_url_serialize( + board_id=board_id, + document_create_request=document_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7814,13 +7637,10 @@ def enterprise_get_project_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectMember", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "201": "DocumentItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7829,12 +7649,10 @@ def enterprise_get_project_member( response_types_map=_response_types_map, ).data - def _enterprise_get_project_member_serialize( + def _create_document_item_using_url_serialize( self, - org_id, - team_id, - project_id, - member_id, + board_id, + document_create_request, _request_auth, _content_type, _headers, @@ -7853,28 +7671,32 @@ def _enterprise_get_project_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id - if member_id is not None: - _path_params["member_id"] = member_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if document_create_request is not None: + _body_params = document_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", + method="POST", + resource_path="/v2/boards/{board_id}/documents", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7888,25 +7710,12 @@ def _enterprise_get_project_member_serialize( ) @validate_call - def enterprise_get_project_members( + def delete_document_item( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[ - StrictStr, Field(description="The ID of the project for which you want to retrieve the list of members.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field( - description="The maximum number of results to return per call. If the number of project members in the response is greater than the limit specified, the response returns the cursor parameter with a value." - ), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." - ), - ] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7916,21 +7725,15 @@ def enterprise_get_project_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectMemberPage: - """List of project members + ) -> object: + """Delete document item - Retrieves the list of members for a specific project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project for which you want to retrieve the list of members. (required) - :type project_id: str - :param limit: The maximum number of results to return per call. If the number of project members in the response is greater than the limit specified, the response returns the cursor parameter with a value. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7953,12 +7756,9 @@ def enterprise_get_project_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_members_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - limit=limit, - cursor=cursor, + _param = self._delete_document_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7966,13 +7766,10 @@ def enterprise_get_project_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectMemberPage", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "204": "object", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -7981,13 +7778,10 @@ def enterprise_get_project_members( response_types_map=_response_types_map, ).data - def _enterprise_get_project_members_serialize( + def _delete_document_item_serialize( self, - org_id, - team_id, - project_id, - limit, - cursor, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -8006,21 +7800,11 @@ def _enterprise_get_project_members_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter @@ -8032,8 +7816,8 @@ def _enterprise_get_project_members_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members", + method="DELETE", + resource_path="/v2/boards/{board_id}/documents/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8047,15 +7831,15 @@ def _enterprise_get_project_members_serialize( ) @validate_call - def enterprise_update_project_member( + def get_document_item( self, - org_id: Annotated[ - StrictStr, Field(description="The ID of the organization to which the project member belongs.") + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project member belongs.")], - project_id: Annotated[StrictStr, Field(description="The ID of a Project.")], - member_id: Annotated[StrictStr, Field(description="The ID of the member whose details you want to update.")], - update_project_member_request: UpdateProjectMemberRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8065,21 +7849,15 @@ def enterprise_update_project_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectMember: - """Update project member + ) -> DocumentItem: + """Get document item - Updates details of a project member, such as the member's role.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of the organization to which the project member belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project member belongs. (required) - :type team_id: str - :param project_id: The ID of a Project. (required) - :type project_id: str - :param member_id: The ID of the member whose details you want to update. (required) - :type member_id: str - :param update_project_member_request: (required) - :type update_project_member_request: UpdateProjectMemberRequest + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8102,12 +7880,9 @@ def enterprise_update_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_member_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - member_id=member_id, - update_project_member_request=update_project_member_request, + _param = self._get_document_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8115,13 +7890,10 @@ def enterprise_update_project_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectMember", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "DocumentItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8130,13 +7902,10 @@ def enterprise_update_project_member( response_types_map=_response_types_map, ).data - def _enterprise_update_project_member_serialize( + def _get_document_item_serialize( self, - org_id, - team_id, - project_id, - member_id, - update_project_member_request, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -8155,38 +7924,24 @@ def _enterprise_update_project_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id - if member_id is not None: - _path_params["member_id"] = member_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_project_member_request is not None: - _body_params = update_project_member_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", + method="GET", + resource_path="/v2/boards/{board_id}/documents/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8200,13 +7955,13 @@ def _enterprise_update_project_member_serialize( ) @validate_call - def enterprise_get_project_settings( + def update_document_item_using_url( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[ - StrictStr, Field(description="The ID of the project for which you want to retrieve the project settings.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + document_update_request: DocumentUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8216,17 +7971,17 @@ def enterprise_get_project_settings( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectSettings: - """Get project settings + ) -> DocumentItem: + """Update document item using URL - Retrieves the project settings.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project for which you want to retrieve the project settings. (required) - :type project_id: str + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param document_update_request: (required) + :type document_update_request: DocumentUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8249,10 +8004,10 @@ def enterprise_get_project_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_settings_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, + _param = self._update_document_item_using_url_serialize( + board_id=board_id, + item_id=item_id, + document_update_request=document_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8260,12 +8015,11 @@ def enterprise_get_project_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectSettings", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "200": "DocumentItem", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8274,11 +8028,11 @@ def enterprise_get_project_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_project_settings_serialize( + def _update_document_item_using_url_serialize( self, - org_id, - team_id, - project_id, + board_id, + item_id, + document_update_request, _request_auth, _content_type, _headers, @@ -8297,26 +8051,34 @@ def _enterprise_get_project_settings_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if document_update_request is not None: + _body_params = document_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", + method="PATCH", + resource_path="/v2/boards/{board_id}/documents/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8330,12 +8092,12 @@ def _enterprise_get_project_settings_serialize( ) @validate_call - def enterprise_update_project_settings( + def create_embed_item( self, - org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], - team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project whose settings you want to update.")], - update_project_settings_request: UpdateProjectSettingsRequest, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + ], + embed_create_request: EmbedCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8345,19 +8107,15 @@ def enterprise_update_project_settings( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectSettings: - """Update project settings + ) -> EmbedItem: + """Create embed item - Updates the settings of a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization to which the project belongs. (required) - :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) - :type team_id: str - :param project_id: The ID of the project whose settings you want to update. (required) - :type project_id: str - :param update_project_settings_request: (required) - :type update_project_settings_request: UpdateProjectSettingsRequest + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param embed_create_request: (required) + :type embed_create_request: EmbedCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8380,11 +8138,9 @@ def enterprise_update_project_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_settings_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - update_project_settings_request=update_project_settings_request, + _param = self._create_embed_item_serialize( + board_id=board_id, + embed_create_request=embed_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8392,13 +8148,10 @@ def enterprise_update_project_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectSettings", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "201": "EmbedItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8407,12 +8160,10 @@ def enterprise_update_project_settings( response_types_map=_response_types_map, ).data - def _enterprise_update_project_settings_serialize( + def _create_embed_item_serialize( self, - org_id, - team_id, - project_id, - update_project_settings_request, + board_id, + embed_create_request, _request_auth, _content_type, _headers, @@ -8431,18 +8182,14 @@ def _enterprise_update_project_settings_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_project_settings_request is not None: - _body_params = update_project_settings_request + if embed_create_request is not None: + _body_params = embed_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -8459,8 +8206,8 @@ def _enterprise_update_project_settings_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", + method="POST", + resource_path="/v2/boards/{board_id}/embeds", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8474,15 +8221,12 @@ def _enterprise_update_project_settings_serialize( ) @validate_call - def enterprise_create_project( + def delete_embed_item( self, - org_id: Annotated[ - StrictStr, Field(description="The ID of the organization within which you you want to create a project.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - team_id: Annotated[ - StrictStr, Field(description="The ID of the team within which you you want to create a project.") - ], - create_project_request: CreateProjectRequest, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8492,17 +8236,15 @@ def enterprise_create_project( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Project: - """Create project + ) -> object: + """Delete embed item - Projects are essentially folders of boards with the option to manage user access for a smaller group of people within a team. Projects are here to help you organize your boards and make them easier to find and share. In other words, a project is a group of boards that you can share with your teammates all at once. For more information, see our Help Center page on Projects.

This API creates a new project in an existing team of an organization.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of the organization within which you you want to create a project. (required) - :type org_id: str - :param team_id: The ID of the team within which you you want to create a project. (required) - :type team_id: str - :param create_project_request: (required) - :type create_project_request: CreateProjectRequest + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8525,10 +8267,9 @@ def enterprise_create_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_project_serialize( - org_id=org_id, - team_id=team_id, - create_project_request=create_project_request, + _param = self._delete_embed_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8536,13 +8277,10 @@ def enterprise_create_project( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Project", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "204": "object", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8551,11 +8289,10 @@ def enterprise_create_project( response_types_map=_response_types_map, ).data - def _enterprise_create_project_serialize( + def _delete_embed_item_serialize( self, - org_id, - team_id, - create_project_request, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -8574,34 +8311,24 @@ def _enterprise_create_project_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_project_request is not None: - _body_params = create_project_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects", + method="DELETE", + resource_path="/v2/boards/{board_id}/embeds/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8615,13 +8342,15 @@ def _enterprise_create_project_serialize( ) @validate_call - def enterprise_delete_project( + def get_embed_item( self, - org_id: Annotated[ - StrictStr, Field(description="The ID of the organization from which you want to delete a project.") + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - team_id: Annotated[StrictStr, Field(description="The ID of the team from which you want to delete a project.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8631,17 +8360,15 @@ def enterprise_delete_project( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete project + ) -> EmbedItem: + """Get embed item - Deletes a project. After a project is deleted, all boards and users that belong to the project remain in the team.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of the organization from which you want to delete a project. (required) - :type org_id: str - :param team_id: The ID of the team from which you want to delete a project. (required) - :type team_id: str - :param project_id: The ID of the project that you want to delete. (required) - :type project_id: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8664,10 +8391,9 @@ def enterprise_delete_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_project_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, + _param = self._get_embed_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8675,13 +8401,10 @@ def enterprise_delete_project( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "EmbedItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8690,11 +8413,10 @@ def enterprise_delete_project( response_types_map=_response_types_map, ).data - def _enterprise_delete_project_serialize( + def _get_embed_item_serialize( self, - org_id, - team_id, - project_id, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -8713,12 +8435,10 @@ def _enterprise_delete_project_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters @@ -8731,8 +8451,8 @@ def _enterprise_delete_project_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", + method="GET", + resource_path="/v2/boards/{board_id}/embeds/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8746,18 +8466,13 @@ def _enterprise_delete_project_serialize( ) @validate_call - def enterprise_get_project( + def update_embed_item( self, - org_id: Annotated[ - StrictStr, - Field(description="The ID of the organization from which you want to retrieve the project information."), - ], - team_id: Annotated[ - StrictStr, Field(description="The ID of the team from which you want to retrieve the project information.") - ], - project_id: Annotated[ - StrictStr, Field(description="The ID of the project for which you want to retrieve the information.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + embed_update_request: EmbedUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8767,17 +8482,17 @@ def enterprise_get_project( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Project: - """Get project + ) -> EmbedItem: + """Update embed item - Retrieves project information, such as a name for an existing project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates an embed item on a board based on the data properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization from which you want to retrieve the project information. (required) - :type org_id: str - :param team_id: The ID of the team from which you want to retrieve the project information. (required) - :type team_id: str - :param project_id: The ID of the project for which you want to retrieve the information. (required) - :type project_id: str + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param embed_update_request: (required) + :type embed_update_request: EmbedUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8800,10 +8515,10 @@ def enterprise_get_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, + _param = self._update_embed_item_serialize( + board_id=board_id, + item_id=item_id, + embed_update_request=embed_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8811,12 +8526,11 @@ def enterprise_get_project( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Project", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "200": "EmbedItem", + "400": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8825,11 +8539,11 @@ def enterprise_get_project( response_types_map=_response_types_map, ).data - def _enterprise_get_project_serialize( + def _update_embed_item_serialize( self, - org_id, - team_id, - project_id, + board_id, + item_id, + embed_update_request, _request_auth, _content_type, _headers, @@ -8848,26 +8562,34 @@ def _enterprise_get_project_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if embed_update_request is not None: + _body_params = embed_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/embeds/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8881,30 +8603,12 @@ def _enterprise_get_project_serialize( ) @validate_call - def enterprise_get_projects( + def create_shape_item_flowchart( self, - org_id: Annotated[ - StrictStr, - Field( - description="The ID of the organization from which you want to retrieve the list of available projects." - ), - ], - team_id: Annotated[ - StrictStr, - Field(description="The ID of the team from which you want to retrieve the list of available projects."), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field( - description="The maximum number of results to return per call. If the number of projects in the response is greater than the limit specified, the response returns the cursor parameter with a value." - ), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." - ), - ] = None, + shape_create_request: ShapeCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8914,19 +8618,15 @@ def enterprise_get_projects( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectPage: - """List of projects + ) -> ShapeItem: + """Create shape item - Retrieves the list of projects in an existing team of an organization. You can retrieve all projects, including all private projects (projects that haven't been specifically shared with you) by enabling Content Admin permissions. To enable Content Admin permissions, see [Content Admin permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins).

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of the organization from which you want to retrieve the list of available projects. (required) - :type org_id: str - :param team_id: The ID of the team from which you want to retrieve the list of available projects. (required) - :type team_id: str - :param limit: The maximum number of results to return per call. If the number of projects in the response is greater than the limit specified, the response returns the cursor parameter with a value. - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param shape_create_request: (required) + :type shape_create_request: ShapeCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -8949,11 +8649,9 @@ def enterprise_get_projects( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_projects_serialize( - org_id=org_id, - team_id=team_id, - limit=limit, - cursor=cursor, + _param = self._create_shape_item_flowchart_serialize( + board_id=board_id, + shape_create_request=shape_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8961,12 +8659,10 @@ def enterprise_get_projects( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectPage", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "201": "ShapeItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8975,12 +8671,10 @@ def enterprise_get_projects( response_types_map=_response_types_map, ).data - def _enterprise_get_projects_serialize( + def _create_shape_item_flowchart_serialize( self, - org_id, - team_id, - limit, - cursor, + board_id, + shape_create_request, _request_auth, _content_type, _headers, @@ -8999,32 +8693,32 @@ def _enterprise_get_projects_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if shape_create_request is not None: + _body_params = shape_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects", + method="POST", + resource_path="/v2-experimental/boards/{board_id}/shapes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9038,12 +8732,12 @@ def _enterprise_get_projects_serialize( ) @validate_call - def enterprise_update_project( + def delete_shape_item_flowchart( self, - org_id: Annotated[StrictStr, Field(description="The ID of an Organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a Team.")], - project_id: Annotated[StrictStr, Field(description="The ID of a Project.")], - update_project_request: UpdateProjectRequest, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9053,19 +8747,15 @@ def enterprise_update_project( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Project: - """Update project + ) -> object: + """Delete shape item - Update information about a project, such as the project name.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of an Organization. (required) - :type org_id: str - :param team_id: The ID of a Team. (required) - :type team_id: str - :param project_id: The ID of a Project. (required) - :type project_id: str - :param update_project_request: (required) - :type update_project_request: UpdateProjectRequest + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9088,11 +8778,9 @@ def enterprise_update_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_serialize( - org_id=org_id, - team_id=team_id, - project_id=project_id, - update_project_request=update_project_request, + _param = self._delete_shape_item_flowchart_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9100,13 +8788,10 @@ def enterprise_update_project( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Project", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "204": "object", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9115,12 +8800,10 @@ def enterprise_update_project( response_types_map=_response_types_map, ).data - def _enterprise_update_project_serialize( + def _delete_shape_item_flowchart_serialize( self, - org_id, - team_id, - project_id, - update_project_request, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -9139,36 +8822,24 @@ def _enterprise_update_project_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if project_id is not None: - _path_params["project_id"] = project_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_project_request is not None: - _body_params = update_project_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", + method="DELETE", + resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9182,14 +8853,17 @@ def _enterprise_update_project_serialize( ) @validate_call - def enterprise_post_user_sessions_reset( + def get_items_experimental( self, - email: Annotated[ + board_id: Annotated[ StrictStr, Field( - description="Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices." + description="Unique identifier (ID) of the board for which you want to retrieve the list of available items." ), ], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + type: Optional[StrictStr] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9199,13 +8873,19 @@ def enterprise_post_user_sessions_reset( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Reset all sessions of a user + ) -> GenericItemCursorPaged: + """Get items on board - Reset all sessions of a user. Admins can now take immediate action to restrict user access to company data in case of security concerns. Calling this API ends all active Miro sessions across devices for a particular user, requiring the user to sign in again. This is useful in situations where a user leaves the company, their credentials are compromised, or there's suspicious activity on their account.

Required scope

sessions:delete

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves a list of items for a specific board. You can retrieve all items on the board, a list of child items inside a parent item, or a list of specific types of items by specifying URL query parameter values. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param email: Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices. (required) - :type email: str + :param board_id: Unique identifier (ID) of the board for which you want to retrieve the list of available items. (required) + :type board_id: str + :param limit: + :type limit: str + :param type: + :type type: str + :param cursor: + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9228,8 +8908,11 @@ def enterprise_post_user_sessions_reset( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_post_user_sessions_reset_serialize( - email=email, + _param = self._get_items_experimental_serialize( + board_id=board_id, + limit=limit, + type=type, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9237,12 +8920,10 @@ def enterprise_post_user_sessions_reset( ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "GenericItemCursorPaged", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9251,9 +8932,12 @@ def enterprise_post_user_sessions_reset( response_types_map=_response_types_map, ).data - def _enterprise_post_user_sessions_reset_serialize( + def _get_items_experimental_serialize( self, - email, + board_id, + limit, + type, + cursor, _request_auth, _content_type, _headers, @@ -9272,21 +8956,34 @@ def _enterprise_post_user_sessions_reset_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if email is not None: + if limit is not None: - _query_params.append(("email", email)) + _query_params.append(("limit", limit)) + + if type is not None: + + _query_params.append(("type", type)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/sessions/reset_all", + method="GET", + resource_path="/v2-experimental/boards/{board_id}/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9300,11 +8997,15 @@ def _enterprise_post_user_sessions_reset_serialize( ) @validate_call - def enterprise_boards_create_group( + def get_shape_item_flowchart( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - board_id: Annotated[StrictStr, Field(description="The ID of the board.")], - create_board_user_groups_request: CreateBoardUserGroupsRequest, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9314,17 +9015,15 @@ def enterprise_boards_create_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardUserGroup: - """Create board user group assignments + ) -> ShapeItem: + """Get shape item - Shares a board with user groups with a specified role. Updates the role if already shared.

Required scope

organizations:groups:read
boards:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param board_id: The ID of the board. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str - :param create_board_user_groups_request: (required) - :type create_board_user_groups_request: CreateBoardUserGroupsRequest + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9347,10 +9046,9 @@ def enterprise_boards_create_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_boards_create_group_serialize( - org_id=org_id, + _param = self._get_shape_item_flowchart_serialize( board_id=board_id, - create_board_user_groups_request=create_board_user_groups_request, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9358,12 +9056,10 @@ def enterprise_boards_create_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardUserGroup", - "400": None, - "401": None, - "403": None, - "409": None, - "429": None, + "200": "ShapeItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9372,11 +9068,10 @@ def enterprise_boards_create_group( response_types_map=_response_types_map, ).data - def _enterprise_boards_create_group_serialize( + def _get_shape_item_flowchart_serialize( self, - org_id, board_id, - create_board_user_groups_request, + item_id, _request_auth, _content_type, _headers, @@ -9395,34 +9090,24 @@ def _enterprise_boards_create_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_board_user_groups_request is not None: - _body_params = create_board_user_groups_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups", + method="GET", + resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9436,11 +9121,15 @@ def _enterprise_boards_create_group_serialize( ) @validate_call - def enterprise_boards_delete_groups( + def get_specific_item_experimental( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - board_id: Annotated[StrictStr, Field(description="The ID of the board.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9450,17 +9139,15 @@ def enterprise_boards_delete_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete board user group assignment + ) -> GenericItem: + """Get specific item on board - Removes a user group from the specified board.

Required scope

organizations:groups:read
boards:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param board_id: The ID of the board. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9483,10 +9170,9 @@ def enterprise_boards_delete_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_boards_delete_groups_serialize( - org_id=org_id, + _param = self._get_specific_item_experimental_serialize( board_id=board_id, - group_id=group_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9494,13 +9180,10 @@ def enterprise_boards_delete_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": None, - "401": None, - "403": None, - "404": None, - "409": None, - "429": None, + "200": "GenericItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9509,11 +9192,10 @@ def enterprise_boards_delete_groups( response_types_map=_response_types_map, ).data - def _enterprise_boards_delete_groups_serialize( + def _get_specific_item_experimental_serialize( self, - org_id, board_id, - group_id, + item_id, _request_auth, _content_type, _headers, @@ -9532,23 +9214,24 @@ def _enterprise_boards_delete_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id - if group_id is not None: - _path_params["group_id"] = group_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups/{group_id}", + method="GET", + resource_path="/v2-experimental/boards/{board_id}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9562,20 +9245,13 @@ def _enterprise_boards_delete_groups_serialize( ) @validate_call - def enterprise_boards_get_groups( + def update_shape_item_flowchart( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - board_id: Annotated[StrictStr, Field(description="The ID of the board.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of user groups in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + shape_update_request: ShapeUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9585,19 +9261,17 @@ def enterprise_boards_get_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardUserGroupsPage: - """Get board user group assignments + ) -> ShapeItem: + """Update shape item - Retrieves information about user groups invited to the specified board.

Required scope

organizations:groups:read
boards:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates a flowchart shape item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param board_id: The ID of the board. (required) + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str - :param limit: The maximum number of user groups in the result list. - :type limit: int - :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param shape_update_request: (required) + :type shape_update_request: ShapeUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9620,11 +9294,10 @@ def enterprise_boards_get_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_boards_get_groups_serialize( - org_id=org_id, + _param = self._update_shape_item_flowchart_serialize( board_id=board_id, - limit=limit, - cursor=cursor, + item_id=item_id, + shape_update_request=shape_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9632,12 +9305,10 @@ def enterprise_boards_get_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardUserGroupsPage", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "ShapeItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9646,12 +9317,11 @@ def enterprise_boards_get_groups( response_types_map=_response_types_map, ).data - def _enterprise_boards_get_groups_serialize( + def _update_shape_item_flowchart_serialize( self, - org_id, board_id, - limit, - cursor, + item_id, + shape_update_request, _request_auth, _content_type, _headers, @@ -9670,32 +9340,34 @@ def _enterprise_boards_get_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if shape_update_request is not None: + _body_params = shape_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups", + method="PATCH", + resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9709,11 +9381,15 @@ def _enterprise_boards_get_groups_serialize( ) @validate_call - def enterprise_project_create_group( + def get_group( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project.")], - create_project_user_groups_request: CreateProjectUserGroupsRequest, + id: Annotated[StrictStr, Field(description="A server-assigned, unique identifier for this Group (team).")], + attributes: Annotated[ + Optional[StrictStr], + Field( + description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to retrieve attributes within complex attributes. For example: members.display" + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9723,17 +9399,15 @@ def enterprise_project_create_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectUserGroup: - """Create project user group assignments + ) -> GroupResource: + """Get group - Shares a project with user groups with a specified role. Updates the role if already shared.

Required scope

organizations:groups:read
projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves a single Group resource.
Note: Along with groups (teams), the users that are part of those groups (teams) are also retrieved. Only users that have member role in the organization are fetched. - :param org_id: The ID of an organization. (required) - :type org_id: str - :param project_id: The ID of the project. (required) - :type project_id: str - :param create_project_user_groups_request: (required) - :type create_project_user_groups_request: CreateProjectUserGroupsRequest + :param id: A server-assigned, unique identifier for this Group (team). (required) + :type id: str + :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to retrieve attributes within complex attributes. For example: members.display + :type attributes: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9756,10 +9430,9 @@ def enterprise_project_create_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_project_create_group_serialize( - org_id=org_id, - project_id=project_id, - create_project_user_groups_request=create_project_user_groups_request, + _param = self._get_group_serialize( + id=id, + attributes=attributes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9767,12 +9440,15 @@ def enterprise_project_create_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectUserGroup", + "200": "GroupResource", "400": None, "401": None, "403": None, + "404": None, "409": None, + "413": None, "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -9781,11 +9457,10 @@ def enterprise_project_create_group( response_types_map=_response_types_map, ).data - def _enterprise_project_create_group_serialize( + def _get_group_serialize( self, - org_id, - project_id, - create_project_user_groups_request, + id, + attributes, _request_auth, _content_type, _headers, @@ -9804,34 +9479,26 @@ def _enterprise_project_create_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if project_id is not None: - _path_params["project_id"] = project_id + if id is not None: + _path_params["id"] = id # process the query parameters + if attributes is not None: + + _query_params.append(("attributes", attributes)) + # process the header parameters # process the form parameters # process the body parameter - if create_project_user_groups_request is not None: - _body_params = create_project_user_groups_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups", + method="GET", + resource_path="/Groups/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9845,31 +9512,1280 @@ def _enterprise_project_create_group_serialize( ) @validate_call - def enterprise_project_delete_groups( + def list_groups( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - _request_timeout: Union[ - None, - Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + attributes: Annotated[ + Optional[StrictStr], + Field( + description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to fetch attributes within complex attributes, for Example: members.display." + ), ] = None, - _request_auth: Optional[Dict[StrictStr, Any]] = None, - _content_type: Optional[StrictStr] = None, - _headers: Optional[Dict[StrictStr, Any]] = None, - _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete project user group assignment + filter: Annotated[ + Optional[StrictStr], + Field( + description='You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical "and"
or = Logical "or"
not = "Not" function
() = Precedence grouping
The value must be passed within parenthesis.

For Example: displayName eq "Product Team" will fetch information related to team matching the display name "Product Team".
Note: Filtering on complex attributes is not supported' + ), + ] = None, + start_index: Annotated[ + Optional[StrictInt], + Field( + description="Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1" + ), + ] = None, + count: Annotated[ + Optional[StrictInt], + Field( + description="Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12" + ), + ] = None, + sort_by: Annotated[ + Optional[StrictStr], + Field( + description="Specifies the attribute whose value will be used to order the response. Example sortBy=displayName" + ), + ] = None, + sort_order: Annotated[ + Optional[StrictStr], + Field( + description="Defines the order in which the 'sortBy' parameter is applied. Example: sortOrder=ascending" + ), + ] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GroupListResponse: + """List groups + + Retrieves the list of groups (teams) in the organization.

Note: Along with groups (teams), the users that are part of those groups (teams) are also retrieved. Only users that have member role in the organization are fetched. + + :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
Note: It is also possible to fetch attributes within complex attributes, for Example: members.display. + :type attributes: str + :param filter: You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical \"and\"
or = Logical \"or\"
not = \"Not\" function
() = Precedence grouping
The value must be passed within parenthesis.

For Example: displayName eq \"Product Team\" will fetch information related to team matching the display name \"Product Team\".
Note: Filtering on complex attributes is not supported + :type filter: str + :param start_index: Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1 + :type start_index: int + :param count: Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12 + :type count: int + :param sort_by: Specifies the attribute whose value will be used to order the response. Example sortBy=displayName + :type sort_by: str + :param sort_order: Defines the order in which the 'sortBy' parameter is applied. Example: sortOrder=ascending + :type sort_order: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._list_groups_serialize( + attributes=attributes, + filter=filter, + start_index=start_index, + count=count, + sort_by=sort_by, + sort_order=sort_order, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "GroupListResponse", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, + "500": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _list_groups_serialize( + self, + attributes, + filter, + start_index, + count, + sort_by, + sort_order, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if attributes is not None: + + _query_params.append(("attributes", attributes)) + + if filter is not None: + + _query_params.append(("filter", filter)) + + if start_index is not None: + + _query_params.append(("startIndex", start_index)) + + if count is not None: + + _query_params.append(("count", count)) + + if sort_by is not None: + + _query_params.append(("sortBy", sort_by)) + + if sort_order is not None: + + _query_params.append(("sortOrder", sort_order)) + + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/Groups", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def patch_group( + self, + id: Annotated[ + StrictStr, Field(description="Group (Team) ID. A server-assigned, unique identifier for this Group (team).") + ], + patch_group_resource: Annotated[ + PatchGroupResource, + Field( + description="Payload to add, replace, remove members in the specified group (team).

The body of a PATCH request must contain the attribute `Operations` and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one `op` member. " + ), + ], + attributes: Annotated[ + Optional[StrictStr], + Field( + description="A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
It is also possible to fetch attributes within complex attributes, for Example: members.display" + ), + ] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GroupResource: + """Patch group + + Updates an existing group resource, i.e. a team, overwriting values for specified attributes. Patch operation for group can be used to add, remove, or replace team members and to update the display name of the group (team).

To add a user to the group (team), use add operation.
To remove a user from a group (team), use remove operation.
To update a user resource, use the replace operation.
The last team admin cannot be removed from the team.

Note: Attributes that are not provided will remain unchanged. PATCH operation only updates the fields provided.

Team members removal specifics:
For remove or replace operations, the team member is removed from the team and from all team boards. The ownership of boards that belong to the removed team member is transferred to the oldest team member who currently has an admin role. After you remove a team member, adding the team member again to the team does not automatically restore their previous ownership of the boards. If the user is not registered fully in Miro and is not assigned to any other team, the user is also removed from the organization.

Add team members specifics:
All added team members are reactivated or recreated if they were deactivated or deleted earlier.

External users specifics:
When adding existing users with the role ORGANIZATION_EXTERNAL_USER or ORGANIZATION_TEAM_GUEST_USER to a team, we set FULL license and ORGANIZATION_INTERNAL_USER roles. + + :param id: Group (Team) ID. A server-assigned, unique identifier for this Group (team). (required) + :type id: str + :param patch_group_resource: Payload to add, replace, remove members in the specified group (team).

The body of a PATCH request must contain the attribute `Operations` and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one `op` member. (required) + :type patch_group_resource: PatchGroupResource + :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id,displayName
It is also possible to fetch attributes within complex attributes, for Example: members.display + :type attributes: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._patch_group_serialize( + id=id, + patch_group_resource=patch_group_resource, + attributes=attributes, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "GroupResource", + "400": None, + "401": None, + "403": None, + "404": None, + "409": None, + "413": None, + "429": None, + "500": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _patch_group_serialize( + self, + id, + patch_group_resource, + attributes, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params["id"] = id + # process the query parameters + if attributes is not None: + + _query_params.append(("attributes", attributes)) + + # process the header parameters + # process the form parameters + # process the body parameter + if patch_group_resource is not None: + _body_params = patch_group_resource + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type( + ["application/scim+json", "application/json"] + ) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="PATCH", + resource_path="/Groups/{id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def create_image_item_using_url( + self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + ], + image_create_request: ImageCreateRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ImageItem: + """Create image item using URL + + Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
+ + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param image_create_request: (required) + :type image_create_request: ImageCreateRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_image_item_using_url_serialize( + board_id=board_id, + image_create_request=image_create_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "201": "ImageItem", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _create_image_item_using_url_serialize( + self, + board_id, + image_create_request, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if image_create_request is not None: + _body_params = image_create_request + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="POST", + resource_path="/v2/boards/{board_id}/images", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def delete_image_item( + self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> object: + """Delete image item + + Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_image_item_serialize( + board_id=board_id, + item_id=item_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "204": "object", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _delete_image_item_serialize( + self, + board_id, + item_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="DELETE", + resource_path="/v2/boards/{board_id}/images/{item_id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def get_image_item( + self, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ImageItem: + """Get image item + + Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_item_serialize( + board_id=board_id, + item_id=item_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "ImageItem", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _get_image_item_serialize( + self, + board_id, + item_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/v2/boards/{board_id}/images/{item_id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def update_image_item_using_url( + self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + image_update_request: ImageUpdateRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ImageItem: + """Update image item using URL + + Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param image_update_request: (required) + :type image_update_request: ImageUpdateRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._update_image_item_using_url_serialize( + board_id=board_id, + item_id=item_id, + image_update_request=image_update_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "ImageItem", + "400": None, + "404": None, + "409": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _update_image_item_using_url_serialize( + self, + board_id, + item_id, + image_update_request, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if image_update_request is not None: + _body_params = image_update_request + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="PATCH", + resource_path="/v2/boards/{board_id}/images/{item_id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def delete_item( + self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> object: + """Delete item + + Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_item_serialize( + board_id=board_id, + item_id=item_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "204": "object", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _delete_item_serialize( + self, + board_id, + item_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="DELETE", + resource_path="/v2/boards/{board_id}/items/{item_id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def get_items( + self, + board_id: Annotated[ + StrictStr, + Field( + description="Unique identifier (ID) of the board for which you want to retrieve the list of available items." + ), + ], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + type: Optional[StrictStr] = None, + cursor: Optional[StrictStr] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GenericItemCursorPaged: + """Get items on board + + Retrieves a list of items for a specific board. You can retrieve all items on the board, a list of child items inside a parent item, or a list of specific types of items by specifying URL query parameter values. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ + :param board_id: Unique identifier (ID) of the board for which you want to retrieve the list of available items. (required) + :type board_id: str + :param limit: + :type limit: str + :param type: + :type type: str + :param cursor: + :type cursor: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 - Removes a user group from the specified project.

Required scope

organizations:groups:read
projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ _param = self._get_items_serialize( + board_id=board_id, + limit=limit, + type=type, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) - :param org_id: The ID of an organization. (required) - :type org_id: str - :param project_id: The ID of the project. (required) - :type project_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + _response_types_map: Dict[str, Optional[str]] = { + "200": "GenericItemCursorPaged", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _get_items_serialize( + self, + board_id, + limit, + type, + cursor, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if type is not None: + + _query_params.append(("type", type)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/v2/boards/{board_id}/items", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def get_specific_item( + self, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GenericItem: + """Get specific item on board + + Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_specific_item_serialize( + board_id=board_id, + item_id=item_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "GenericItem", + "400": None, + "404": None, + "429": None, + } + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _get_specific_item_serialize( + self, + board_id, + item_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = {} + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/v2/boards/{board_id}/items/{item_id}", + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth, + ) + + @validate_call + def update_item_position_or_parent( + self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + generic_item_update: GenericItemUpdate, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GenericItem: + """Update item position or parent + + Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param generic_item_update: (required) + :type generic_item_update: GenericItemUpdate :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -9892,10 +10808,10 @@ def enterprise_project_delete_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_project_delete_groups_serialize( - org_id=org_id, - project_id=project_id, - group_id=group_id, + _param = self._update_item_position_or_parent_serialize( + board_id=board_id, + item_id=item_id, + generic_item_update=generic_item_update, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -9903,12 +10819,9 @@ def enterprise_project_delete_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "200": "GenericItem", "400": None, - "401": None, - "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -9918,11 +10831,11 @@ def enterprise_project_delete_groups( response_types_map=_response_types_map, ).data - def _enterprise_project_delete_groups_serialize( + def _update_item_position_or_parent_serialize( self, - org_id, - project_id, - group_id, + board_id, + item_id, + generic_item_update, _request_auth, _content_type, _headers, @@ -9941,23 +10854,34 @@ def _enterprise_project_delete_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if project_id is not None: - _path_params["project_id"] = project_id - if group_id is not None: - _path_params["group_id"] = group_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if generic_item_update is not None: + _body_params = generic_item_update + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups/{group_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -9971,20 +10895,12 @@ def _enterprise_project_delete_groups_serialize( ) @validate_call - def enterprise_projects_get_groups( + def create_case( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - project_id: Annotated[StrictStr, Field(description="The ID of the project.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of user groups in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + org_id: Annotated[ + str, Field(strict=True, description="The ID of the organization in which you want to create a new case.") + ], + case_request: CaseRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -9994,19 +10910,15 @@ def enterprise_projects_get_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ProjectUserGroupsPage: - """Get project user group assignments + ) -> CaseResponse: + """Create case - Retrieves information about user groups invited to the specified project.

Required scope

organizations:groups:read
projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Creating a case for legal hold is the first critical step in the eDiscovery process when litigation or an investigation is anticipated. One of the purposes of creating a case is that it acts as a container that allows admins to group multiple legal holds under one case. For more information, see our Help Center page on creating a case.

This API creates a new case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization in which you want to create a new case. (required) :type org_id: str - :param project_id: The ID of the project. (required) - :type project_id: str - :param limit: The maximum number of user groups in the result list. - :type limit: int - :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param case_request: (required) + :type case_request: CaseRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10029,11 +10941,9 @@ def enterprise_projects_get_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_projects_get_groups_serialize( + _param = self._create_case_serialize( org_id=org_id, - project_id=project_id, - limit=limit, - cursor=cursor, + case_request=case_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10041,7 +10951,7 @@ def enterprise_projects_get_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectUserGroupsPage", + "200": "CaseResponse", "400": None, "401": None, "403": None, @@ -10055,12 +10965,10 @@ def enterprise_projects_get_groups( response_types_map=_response_types_map, ).data - def _enterprise_projects_get_groups_serialize( + def _create_case_serialize( self, org_id, - project_id, - limit, - cursor, + case_request, _request_auth, _content_type, _headers, @@ -10081,30 +10989,30 @@ def _enterprise_projects_get_groups_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if project_id is not None: - _path_params["project_id"] = project_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if case_request is not None: + _body_params = case_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups", + method="POST", + resource_path="/v2/orgs/{org_id}/cases", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10118,11 +11026,16 @@ def _enterprise_projects_get_groups_serialize( ) @validate_call - def enterprise_delete_team_member( + def create_legal_hold( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], + org_id: Annotated[ + str, + Field(strict=True, description="The ID of the organization in which you want to create a new legal hold."), + ], + case_id: Annotated[ + str, Field(strict=True, description="The ID of the case in which you want to create a new legal hold.") + ], + legal_hold_request: LegalHoldRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10132,17 +11045,17 @@ def enterprise_delete_team_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete team member from team + ) -> LegalHoldResponse: + """Create legal hold - Deletes team member from team by id.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ After creating a case it is possible to add one or multiple legal holds to the case. Creating a legal hold involves identifying the relevant users associated with a case and applying the hold to prevent permanent deletion of content that those users own, co-own, create, edit or access. For more information, see our Help Center page on adding a legal hold to a case.

This API creates a new legal hold in a case for an organization. Newly created legal holds could take up to 24 hours to be processed.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization in which you want to create a new legal hold. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param member_id: The id of the Team Member (required) - :type member_id: str + :param case_id: The ID of the case in which you want to create a new legal hold. (required) + :type case_id: str + :param legal_hold_request: (required) + :type legal_hold_request: LegalHoldRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10165,10 +11078,10 @@ def enterprise_delete_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_team_member_serialize( + _param = self._create_legal_hold_serialize( org_id=org_id, - team_id=team_id, - member_id=member_id, + case_id=case_id, + legal_hold_request=legal_hold_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10176,12 +11089,11 @@ def enterprise_delete_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "200": "LegalHoldResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -10191,11 +11103,11 @@ def enterprise_delete_team_member( response_types_map=_response_types_map, ).data - def _enterprise_delete_team_member_serialize( + def _create_legal_hold_serialize( self, org_id, - team_id, - member_id, + case_id, + legal_hold_request, _request_auth, _content_type, _headers, @@ -10216,21 +11128,32 @@ def _enterprise_delete_team_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if member_id is not None: - _path_params["member_id"] = member_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if legal_hold_request is not None: + _body_params = legal_hold_request + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", + method="POST", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10244,11 +11167,12 @@ def _enterprise_delete_team_member_serialize( ) @validate_call - def enterprise_get_team_member( + def delete_case( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], + org_id: Annotated[ + str, Field(strict=True, description="The ID of the organization in which you want to close a case.") + ], + case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to close.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10258,17 +11182,15 @@ def enterprise_get_team_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamMember: - """Get team member + ) -> None: + """Close case - Retrieves team member by id.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Closing a case is the final stage in the eDiscovery process, marking the conclusion of a legal matter or investigation. You must ensure that all associated legal holds within the case are closed before closing the case. Closing a case will permanently delete it. For more information, see our Help Center page on closing a case.

This API closes a case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization in which you want to close a case. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param member_id: The id of the Team Member (required) - :type member_id: str + :param case_id: The ID of the case you want to close. (required) + :type case_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10291,10 +11213,9 @@ def enterprise_get_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_member_serialize( + _param = self._delete_case_serialize( org_id=org_id, - team_id=team_id, - member_id=member_id, + case_id=case_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10302,7 +11223,7 @@ def enterprise_get_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMember", + "204": None, "400": None, "401": None, "403": None, @@ -10316,11 +11237,10 @@ def enterprise_get_team_member( response_types_map=_response_types_map, ).data - def _enterprise_get_team_member_serialize( + def _delete_case_serialize( self, org_id, - team_id, - member_id, + case_id, _request_auth, _content_type, _headers, @@ -10341,24 +11261,19 @@ def _enterprise_get_team_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if member_id is not None: - _path_params["member_id"] = member_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", + method="DELETE", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10368,27 +11283,19 @@ def _enterprise_get_team_member_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, - ) - - @validate_call - def enterprise_get_team_members( - self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." - ), - ] = None, - role: Annotated[ - Optional[StrictStr], - Field( - description=' Role query. Filters members by role using full word match. Accepted values are: * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. * "non_team": External user, non-team user. * "team_guest": (Deprecated) Team-guest user, user with access only to a team without access to organization. ' - ), - ] = None, + _request_auth=_request_auth, + ) + + @validate_call + def delete_legal_hold( + self, + org_id: Annotated[ + str, Field(strict=True, description="The ID of the organization in which you want to close a legal hold.") + ], + case_id: Annotated[ + str, Field(strict=True, description="The ID of the case in which you want to close a legal hold.") + ], + legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to close.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10398,21 +11305,17 @@ def enterprise_get_team_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamMembersPage: - """List team members + ) -> None: + """Close legal hold - Retrieves team members by cursor.

Required scope

organizations:teams:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Closing a legal hold is one of the final steps in the eDiscovery process once the litigation or investigation has concluded. This process involves releasing the Miro boards and custodians that were under legal hold, allowing the preserved boards to return to normal operations. Closing a legal hold will permanently delete it. For more information, see our Help Center page on closing a legal hold.

This API closes a legal hold in a case for an organization. Once a legal hold is closed, it can take up to 24 hours to release the content items from the legal hold.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization in which you want to close a legal hold. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param limit: - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str - :param role: Role query. Filters members by role using full word match. Accepted values are: * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. * \"non_team\": External user, non-team user. * \"team_guest\": (Deprecated) Team-guest user, user with access only to a team without access to organization. - :type role: str + :param case_id: The ID of the case in which you want to close a legal hold. (required) + :type case_id: str + :param legal_hold_id: The ID of the legal hold you want to close. (required) + :type legal_hold_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10435,12 +11338,10 @@ def enterprise_get_team_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_members_serialize( + _param = self._delete_legal_hold_serialize( org_id=org_id, - team_id=team_id, - limit=limit, - cursor=cursor, - role=role, + case_id=case_id, + legal_hold_id=legal_hold_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10448,7 +11349,7 @@ def enterprise_get_team_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMembersPage", + "204": None, "400": None, "401": None, "403": None, @@ -10462,13 +11363,11 @@ def enterprise_get_team_members( response_types_map=_response_types_map, ).data - def _enterprise_get_team_members_serialize( + def _delete_legal_hold_serialize( self, org_id, - team_id, - limit, - cursor, - role, + case_id, + legal_hold_id, _request_auth, _content_type, _headers, @@ -10489,34 +11388,21 @@ def _enterprise_get_team_members_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if case_id is not None: + _path_params["case_id"] = case_id + if legal_hold_id is not None: + _path_params["legal_hold_id"] = legal_hold_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if role is not None: - - _query_params.append(("role", role)) - # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", + method="DELETE", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10530,11 +11416,16 @@ def _enterprise_get_team_members_serialize( ) @validate_call - def enterprise_invite_team_member( + def edit_case( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - team_member_invite: TeamMemberInvite, + org_id: Annotated[ + str, + Field( + strict=True, description="The ID of the organization for which you want to edit the case information." + ), + ], + case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to edit.")], + case_request: CaseRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10544,17 +11435,17 @@ def enterprise_invite_team_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamMember: - """Invite team members + ) -> CaseResponse: + """Edit case - Invites a new Miro user to an existing team. The user must exist in your Miro organization. Users who do not exist in your Miro organization can be invited to the team via [SCIM](https://developers.miro.com/docs/scim) and an external identity provider, such as Okta or Azure Active Directory.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Editing a case allows eDiscovery Admins to keep case details accurate and aligned with the evolving scope of a legal matter. As investigations progress, it may be necessary to update the case name or description to reflect changes in focus, terminology, or internal documentation standards. Since a case serves as the central container for one or more legal holds, keeping its information up to date helps ensure clarity, consistency, and easier navigation for all stakeholders involved in the legal process.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to edit the case information. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param team_member_invite: (required) - :type team_member_invite: TeamMemberInvite + :param case_id: The ID of the case you want to edit. (required) + :type case_id: str + :param case_request: (required) + :type case_request: CaseRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10577,10 +11468,10 @@ def enterprise_invite_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_invite_team_member_serialize( + _param = self._edit_case_serialize( org_id=org_id, - team_id=team_id, - team_member_invite=team_member_invite, + case_id=case_id, + case_request=case_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10588,12 +11479,11 @@ def enterprise_invite_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TeamMember", + "200": "CaseResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -10603,11 +11493,11 @@ def enterprise_invite_team_member( response_types_map=_response_types_map, ).data - def _enterprise_invite_team_member_serialize( + def _edit_case_serialize( self, org_id, - team_id, - team_member_invite, + case_id, + case_request, _request_auth, _content_type, _headers, @@ -10628,14 +11518,14 @@ def _enterprise_invite_team_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if team_member_invite is not None: - _body_params = team_member_invite + if case_request is not None: + _body_params = case_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -10652,8 +11542,8 @@ def _enterprise_invite_team_member_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", + method="PUT", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10667,12 +11557,21 @@ def _enterprise_invite_team_member_serialize( ) @validate_call - def enterprise_update_team_member( + def edit_legal_hold( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], - team_member_changes: TeamMemberChanges, + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to edit the legal hold information.", + ), + ], + case_id: Annotated[ + str, + Field(strict=True, description="The ID of the case for which you want to edit the legal hold information."), + ], + legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to edit.")], + legal_hold_request: LegalHoldRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10682,19 +11581,19 @@ def enterprise_update_team_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamMember: - """Update team member + ) -> LegalHoldResponse: + """Edit legal hold - Updates team member role in team by id.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Editing a legal hold allows eDiscovery Admins to adjust and refine ongoing legal preservation efforts as case requirements evolve. Whether new custodians are identified, additional Miro boards become relevant, or existing boards or users are no longer in scope, editing a legal hold ensures that the correct data remains preserved and defensible throughout the legal process. Admins can update the legal hold’s name or description and add or remove users and boards as needed. This flexibility supports dynamic legal workflows and ensures that preservation stays precise, up to date, and aligned with the scope of the legal matter—maintaining compliance while avoiding unnecessary data retention.

When a legal hold is edited, boards newly added to the hold will begin having their versions preserved from that point forward, boards or users removed from the hold will stop being preserved, and their versions will no longer be preserved as part of that legal hold, boards that remain under hold will continue to have all versions preserved, including any deletions that occur after the hold was applied. This approach ensures organizations can respond to legal demands with accuracy and accountability as a case evolves.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to edit the legal hold information. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param member_id: The id of the Team Member (required) - :type member_id: str - :param team_member_changes: (required) - :type team_member_changes: TeamMemberChanges + :param case_id: The ID of the case for which you want to edit the legal hold information. (required) + :type case_id: str + :param legal_hold_id: The ID of the legal hold you want to edit. (required) + :type legal_hold_id: str + :param legal_hold_request: (required) + :type legal_hold_request: LegalHoldRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10717,11 +11616,11 @@ def enterprise_update_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_member_serialize( + _param = self._edit_legal_hold_serialize( org_id=org_id, - team_id=team_id, - member_id=member_id, - team_member_changes=team_member_changes, + case_id=case_id, + legal_hold_id=legal_hold_id, + legal_hold_request=legal_hold_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10729,12 +11628,11 @@ def enterprise_update_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMember", + "200": "LegalHoldResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -10744,12 +11642,12 @@ def enterprise_update_team_member( response_types_map=_response_types_map, ).data - def _enterprise_update_team_member_serialize( + def _edit_legal_hold_serialize( self, org_id, - team_id, - member_id, - team_member_changes, + case_id, + legal_hold_id, + legal_hold_request, _request_auth, _content_type, _headers, @@ -10770,16 +11668,16 @@ def _enterprise_update_team_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if member_id is not None: - _path_params["member_id"] = member_id + if case_id is not None: + _path_params["case_id"] = case_id + if legal_hold_id is not None: + _path_params["legal_hold_id"] = legal_hold_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if team_member_changes is not None: - _body_params = team_member_changes + if legal_hold_request is not None: + _body_params = legal_hold_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -10796,8 +11694,8 @@ def _enterprise_update_team_member_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", + method="PUT", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10811,9 +11709,24 @@ def _enterprise_update_team_member_serialize( ) @validate_call - def enterprise_get_default_team_settings( + def get_all_cases( self, - org_id: Annotated[StrictStr, Field(description="The id of an Organization.")], + org_id: Annotated[ + str, + Field( + strict=True, description="The ID of the organization for which you want to retrieve the list of cases." + ), + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of items in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10823,13 +11736,17 @@ def enterprise_get_default_team_settings( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamSettings: - """Get default team settings + ) -> PaginatedCaseResponse: + """Get all cases - Retrieves default team settings of an existing organization.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of eDiscovery cases in an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The id of an Organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the list of cases. (required) :type org_id: str + :param limit: The maximum number of items in the result list. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10852,8 +11769,10 @@ def enterprise_get_default_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_default_team_settings_serialize( + _param = self._get_all_cases_serialize( org_id=org_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10861,7 +11780,7 @@ def enterprise_get_default_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "200": "PaginatedCaseResponse", "400": None, "401": None, "403": None, @@ -10875,9 +11794,11 @@ def enterprise_get_default_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_default_team_settings_serialize( + def _get_all_cases_serialize( self, org_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -10899,6 +11820,14 @@ def _enterprise_get_default_team_settings_serialize( if org_id is not None: _path_params["org_id"] = org_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -10911,7 +11840,7 @@ def _enterprise_get_default_team_settings_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/default_teams_settings", + resource_path="/v2/orgs/{org_id}/cases", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -10925,10 +11854,31 @@ def _enterprise_get_default_team_settings_serialize( ) @validate_call - def enterprise_get_team_settings( + def get_all_legal_holds( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to retrieve the list of legal holds within a case.", + ), + ], + case_id: Annotated[ + str, + Field( + strict=True, description="The ID of the case for which you want to retrieve the list of legal holds." + ), + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of items in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10938,15 +11888,19 @@ def enterprise_get_team_settings( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamSettings: - """Get team settings + ) -> PaginatedLegalHoldResponse: + """Get all legal holds within a case - Retrieves team settings of an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of all legal holds within a case for an organization.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the list of legal holds within a case. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str + :param case_id: The ID of the case for which you want to retrieve the list of legal holds. (required) + :type case_id: str + :param limit: The maximum number of items in the result list. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -10969,9 +11923,11 @@ def enterprise_get_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_settings_serialize( + _param = self._get_all_legal_holds_serialize( org_id=org_id, - team_id=team_id, + case_id=case_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -10979,7 +11935,7 @@ def enterprise_get_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "200": "PaginatedLegalHoldResponse", "400": None, "401": None, "403": None, @@ -10993,10 +11949,12 @@ def enterprise_get_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_team_settings_serialize( + def _get_all_legal_holds_serialize( self, org_id, - team_id, + case_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -11017,9 +11975,17 @@ def _enterprise_get_team_settings_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -11032,7 +11998,7 @@ def _enterprise_get_team_settings_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/settings", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11046,11 +12012,16 @@ def _enterprise_get_team_settings_serialize( ) @validate_call - def enterprise_update_team_settings( + def get_case( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - team_settings_changes: TeamSettingsChanges, + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to retrieve the case information.", + ), + ], + case_id: Annotated[str, Field(strict=True, description="The ID of the case you want to retrieve.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11060,17 +12031,15 @@ def enterprise_update_team_settings( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamSettings: - """Update team settings + ) -> CaseResponse: + """Get case - Updates team settings of an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information about a case in an organization.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the case information. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param team_settings_changes: (required) - :type team_settings_changes: TeamSettingsChanges + :param case_id: The ID of the case you want to retrieve. (required) + :type case_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11093,10 +12062,9 @@ def enterprise_update_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_settings_serialize( + _param = self._get_case_serialize( org_id=org_id, - team_id=team_id, - team_settings_changes=team_settings_changes, + case_id=case_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11104,12 +12072,11 @@ def enterprise_update_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "200": "CaseResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -11119,11 +12086,10 @@ def enterprise_update_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_update_team_settings_serialize( + def _get_case_serialize( self, org_id, - team_id, - team_settings_changes, + case_id, _request_auth, _content_type, _headers, @@ -11144,32 +12110,22 @@ def _enterprise_update_team_settings_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if team_settings_changes is not None: - _body_params = team_settings_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/settings", + method="GET", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11183,11 +12139,22 @@ def _enterprise_update_team_settings_serialize( ) @validate_call - def enterprise_teams_create_group( + def get_legal_hold( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - create_team_group_request: CreateTeamGroupRequest, + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to retrieve the legal hold information.", + ), + ], + case_id: Annotated[ + str, + Field( + strict=True, description="The ID of the case for which you want to retrieve the legal hold information." + ), + ], + legal_hold_id: Annotated[str, Field(strict=True, description="The ID of the legal hold you want to retrieve.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11197,17 +12164,17 @@ def enterprise_teams_create_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamGroup: - """Create user group to team connection + ) -> LegalHoldResponse: + """Get legal hold information - Adds a user group to a team in an organization.

Required scope

organizations:groups:read
organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

' + Retrieves information about a legal hold within a case for an organization.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the legal hold information. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param create_team_group_request: (required) - :type create_team_group_request: CreateTeamGroupRequest + :param case_id: The ID of the case for which you want to retrieve the legal hold information. (required) + :type case_id: str + :param legal_hold_id: The ID of the legal hold you want to retrieve. (required) + :type legal_hold_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11230,10 +12197,10 @@ def enterprise_teams_create_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_teams_create_group_serialize( + _param = self._get_legal_hold_serialize( org_id=org_id, - team_id=team_id, - create_team_group_request=create_team_group_request, + case_id=case_id, + legal_hold_id=legal_hold_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11241,11 +12208,11 @@ def enterprise_teams_create_group( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TeamGroup", + "200": "LegalHoldResponse", "400": None, "401": None, "403": None, - "409": None, + "404": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -11255,11 +12222,11 @@ def enterprise_teams_create_group( response_types_map=_response_types_map, ).data - def _enterprise_teams_create_group_serialize( + def _get_legal_hold_serialize( self, org_id, - team_id, - create_team_group_request, + case_id, + legal_hold_id, _request_auth, _content_type, _headers, @@ -11280,32 +12247,24 @@ def _enterprise_teams_create_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if case_id is not None: + _path_params["case_id"] = case_id + if legal_hold_id is not None: + _path_params["legal_hold_id"] = legal_hold_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_team_group_request is not None: - _body_params = create_team_group_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups", + method="GET", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11319,11 +12278,39 @@ def _enterprise_teams_create_group_serialize( ) @validate_call - def enterprise_teams_delete_group( + def get_legal_hold_content_items( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to retrieve the list of content items under hold.", + ), + ], + case_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the case for which you want to retrieve the list of content items under hold.", + ), + ], + legal_hold_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the legal hold for which you want to retrieve the list of content items under hold.", + ), + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of items in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11333,17 +12320,21 @@ def enterprise_teams_delete_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete user group to team connection + ) -> PaginatedLegalHoldContentItemsResponse: + """Get content items under legal hold - Removes a user group from a team in an existing organization.

Required scope

organizations:groups:read
organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Once a legal hold is in place you can review or explore the preserved Miro boards to ensure that all relevant data is intact and ready for legal proceedings or investigations. For more information, see our Help Center page on reviewing boards under legal hold.

This API lists all content items under a specific legal hold in a case for an organization. Please verify that the legal hold is in 'ACTIVE' state to guarantee that the legal hold has finished processing the full list of content items under hold.

Required scope

organization:cases:management

Rate limiting

Level 3

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the list of content items under hold. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + :param case_id: The ID of the case for which you want to retrieve the list of content items under hold. (required) + :type case_id: str + :param legal_hold_id: The ID of the legal hold for which you want to retrieve the list of content items under hold. (required) + :type legal_hold_id: str + :param limit: The maximum number of items in the result list. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11366,10 +12357,12 @@ def enterprise_teams_delete_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_teams_delete_group_serialize( + _param = self._get_legal_hold_content_items_serialize( org_id=org_id, - team_id=team_id, - group_id=group_id, + case_id=case_id, + legal_hold_id=legal_hold_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11377,12 +12370,11 @@ def enterprise_teams_delete_group( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "200": "PaginatedLegalHoldContentItemsResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -11392,11 +12384,13 @@ def enterprise_teams_delete_group( response_types_map=_response_types_map, ).data - def _enterprise_teams_delete_group_serialize( + def _get_legal_hold_content_items_serialize( self, org_id, - team_id, - group_id, + case_id, + legal_hold_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -11417,21 +12411,32 @@ def _enterprise_teams_delete_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if group_id is not None: - _path_params["group_id"] = group_id + if case_id is not None: + _path_params["case_id"] = case_id + if legal_hold_id is not None: + _path_params["legal_hold_id"] = legal_hold_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11445,11 +12450,31 @@ def _enterprise_teams_delete_group_serialize( ) @validate_call - def enterprise_teams_get_group( + def get_legal_hold_export_jobs( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + org_id: Annotated[ + str, + Field( + strict=True, + description="The ID of the organization for which you want to retrieve the list of export jobs within a case.", + ), + ], + case_id: Annotated[ + str, + Field( + strict=True, description="The ID of the case for which you want to retrieve the list of export jobs." + ), + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of items in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. " + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11459,17 +12484,19 @@ def enterprise_teams_get_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamGroup: - """Get user group of a team + ) -> PaginatedCaseExportJobsResponse: + """Get board export jobs of a case - Retrieves information about a specific user group of a team.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves board export jobs for a case.

Required scope

organization:cases:management

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on. You can only use this endpoint if you have both the Company Admin and eDiscovery Admin roles. - :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization for which you want to retrieve the list of export jobs within a case. (required) :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + :param case_id: The ID of the case for which you want to retrieve the list of export jobs. (required) + :type case_id: str + :param limit: The maximum number of items in the result list. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11492,10 +12519,11 @@ def enterprise_teams_get_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_teams_get_group_serialize( + _param = self._get_legal_hold_export_jobs_serialize( org_id=org_id, - team_id=team_id, - group_id=group_id, + case_id=case_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11503,7 +12531,7 @@ def enterprise_teams_get_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamGroup", + "200": "PaginatedCaseExportJobsResponse", "400": None, "401": None, "403": None, @@ -11517,11 +12545,12 @@ def enterprise_teams_get_group( response_types_map=_response_types_map, ).data - def _enterprise_teams_get_group_serialize( + def _get_legal_hold_export_jobs_serialize( self, org_id, - team_id, - group_id, + case_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -11542,11 +12571,17 @@ def _enterprise_teams_get_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id - if group_id is not None: - _path_params["group_id"] = group_id + if case_id is not None: + _path_params["case_id"] = case_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -11559,7 +12594,7 @@ def _enterprise_teams_get_group_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/export-jobs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11573,20 +12608,12 @@ def _enterprise_teams_get_group_serialize( ) @validate_call - def enterprise_teams_get_groups( + def create_mindmap_nodes_experimental( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of user groups in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + ], + mindmap_create_request: MindmapCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11596,19 +12623,15 @@ def enterprise_teams_get_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamGroupsPage: - """List of user group to team connections + ) -> MindmapItem: + """Create mind map node - Retrieves the list of user groups that are part of a team in an organization.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Adds a mind map node to a board. A root node is the starting point of a mind map. A node that is created under a root node is a child node. For information on mind maps, use cases, mind map structure, and more, see the Mind Map Overview page.

Required scope

boards:write

Rate limiting

Level 2

Known limitations on node placement: Currently, the create API supports explicit positions for nodes. This means that users can only place nodes based on the x, y coordinates provided in the position parameters. If the position is not provided in the request, nodes default to coordinates x=0, y=0, effectively placing them at the center of the board.

Upcoming changes: We understand the importance of flexibility in node placement. We are actively working on implementing changes to support positioning nodes relative to their parent node as well. This enhancement offers a more dynamic and intuitive mind mapping experience.

Additionally, we are actively working on providing the update API, further enhancing the functionality of mind map APIs. - :param org_id: The ID of an organization. (required) - :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param limit: The maximum number of user groups in the result list. - :type limit: int - :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param mindmap_create_request: (required) + :type mindmap_create_request: MindmapCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11631,11 +12654,9 @@ def enterprise_teams_get_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_teams_get_groups_serialize( - org_id=org_id, - team_id=team_id, - limit=limit, - cursor=cursor, + _param = self._create_mindmap_nodes_experimental_serialize( + board_id=board_id, + mindmap_create_request=mindmap_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11643,11 +12664,10 @@ def enterprise_teams_get_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamGroupsPage", - "400": None, - "401": None, - "403": None, - "429": None, + "201": "MindmapItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -11656,12 +12676,10 @@ def enterprise_teams_get_groups( response_types_map=_response_types_map, ).data - def _enterprise_teams_get_groups_serialize( + def _create_mindmap_nodes_experimental_serialize( self, - org_id, - team_id, - limit, - cursor, + board_id, + mindmap_create_request, _request_auth, _content_type, _headers, @@ -11680,32 +12698,32 @@ def _enterprise_teams_get_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if mindmap_create_request is not None: + _body_params = mindmap_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups", + method="POST", + resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11719,10 +12737,15 @@ def _enterprise_teams_get_groups_serialize( ) @validate_call - def enterprise_create_team( + def delete_mindmap_node_experimental( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - create_team_request: CreateTeamRequest, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to delete the mind map node."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the mind map node that you want to delete.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11732,15 +12755,15 @@ def enterprise_create_team( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Team: - """Create team + ) -> object: + """Delete mind map node - Creates a new team in an existing organization.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param create_team_request: (required) - :type create_team_request: CreateTeamRequest + :param board_id: Unique identifier (ID) of the board from which you want to delete the mind map node. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the mind map node that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11763,9 +12786,9 @@ def enterprise_create_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_team_serialize( - org_id=org_id, - create_team_request=create_team_request, + _param = self._delete_mindmap_node_experimental_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11773,12 +12796,10 @@ def enterprise_create_team( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Team", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "204": "object", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -11787,10 +12808,10 @@ def enterprise_create_team( response_types_map=_response_types_map, ).data - def _enterprise_create_team_serialize( - self, - org_id, - create_team_request, + def _delete_mindmap_node_experimental_serialize( + self, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -11809,32 +12830,24 @@ def _enterprise_create_team_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_team_request is not None: - _body_params = create_team_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/teams", + method="DELETE", + resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11848,10 +12861,15 @@ def _enterprise_create_team_serialize( ) @validate_call - def enterprise_delete_team( + def get_mindmap_node_experimental( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a mind map node."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the mind map node that you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11861,15 +12879,15 @@ def enterprise_delete_team( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete team + ) -> MindmapItem: + """Get specific mind map node - Deletes an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a mind map node. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the mind map node that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -11892,9 +12910,9 @@ def enterprise_delete_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_team_serialize( - org_id=org_id, - team_id=team_id, + _param = self._get_mindmap_node_experimental_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -11902,12 +12920,7 @@ def enterprise_delete_team( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "MindmapItem", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -11916,10 +12929,10 @@ def enterprise_delete_team( response_types_map=_response_types_map, ).data - def _enterprise_delete_team_serialize( + def _get_mindmap_node_experimental_serialize( self, - org_id, - team_id, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -11938,21 +12951,24 @@ def _enterprise_delete_team_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/teams/{team_id}", + method="GET", + resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -11966,10 +12982,16 @@ def _enterprise_delete_team_serialize( ) @validate_call - def enterprise_get_team( + def get_mindmap_nodes_experimental( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve mind map nodes."), + ], + limit: Annotated[Optional[StrictStr], Field(description="Maximum number of results returned")] = None, + cursor: Annotated[ + Optional[StrictStr], Field(description="Points to the next portion of the results set") + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -11979,15 +13001,17 @@ def enterprise_get_team( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Team: - """Get team + ) -> MindmapCursorPaged: + """Get mind map nodes - Retrieves team information for an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves a list of mind map nodes for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param org_id: The ID of an organization. (required) - :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve mind map nodes. (required) + :type board_id: str + :param limit: Maximum number of results returned + :type limit: str + :param cursor: Points to the next portion of the results set + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12010,9 +13034,10 @@ def enterprise_get_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_serialize( - org_id=org_id, - team_id=team_id, + _param = self._get_mindmap_nodes_experimental_serialize( + board_id=board_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12020,12 +13045,7 @@ def enterprise_get_team( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Team", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "MindmapCursorPaged", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12034,10 +13054,11 @@ def enterprise_get_team( response_types_map=_response_types_map, ).data - def _enterprise_get_team_serialize( + def _get_mindmap_nodes_experimental_serialize( self, - org_id, - team_id, + board_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -12056,11 +13077,17 @@ def _enterprise_get_team_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -12073,7 +13100,7 @@ def _enterprise_get_team_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}", + resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12087,22 +13114,29 @@ def _enterprise_get_team_serialize( ) @validate_call - def enterprise_get_teams( + def exchange_authorization_code_with_access_token( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, - cursor: Annotated[ - Optional[StrictStr], + grant_type: Annotated[ + StrictStr, Field(description="Always set the value for this parameter to `authorization_code`.") + ], + client_id: Annotated[ + StrictStr, Field(description="The Client ID of the app that is requesting user authorization.") + ], + client_secret: Annotated[ + StrictStr, Field(description="App client secret. **The client secret must be kept confidential.**") + ], + code: Annotated[ + StrictStr, Field( - description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." + description="Paste the authorization code that was provided as the `code` parameter value in the redirect URI." ), - ] = None, - name: Annotated[ - Optional[StrictStr], + ], + redirect_uri: Annotated[ + StrictStr, Field( - description='Name query. Filters teams by name using case insensitive partial match. A value "dev" will return both "Developer\'s team" and "Team for developers".' + description="Paste the redirect URI. The URI must match the original redirect URI that was used when requesting the authorization (including the trailing slash)." ), - ] = None, + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12112,19 +13146,21 @@ def enterprise_get_teams( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TeamsPage: - """List teams - - Retrieves list of teams in an existing organization.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- - :param org_id: The ID of an organization. (required) - :type org_id: str - :param limit: - :type limit: int - :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. - :type cursor: str - :param name: Name query. Filters teams by name using case insensitive partial match. A value \"dev\" will return both \"Developer's team\" and \"Team for developers\". - :type name: str + ) -> AccessTokenResponse: + """Step 3: Exchange authorization code with access token + + Exchange the authorization code returned to your redirect URI for an access token and a refresh token. + + :param grant_type: Always set the value for this parameter to `authorization_code`. (required) + :type grant_type: str + :param client_id: The Client ID of the app that is requesting user authorization. (required) + :type client_id: str + :param client_secret: App client secret. **The client secret must be kept confidential.** (required) + :type client_secret: str + :param code: Paste the authorization code that was provided as the `code` parameter value in the redirect URI. (required) + :type code: str + :param redirect_uri: Paste the redirect URI. The URI must match the original redirect URI that was used when requesting the authorization (including the trailing slash). (required) + :type redirect_uri: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12147,11 +13183,12 @@ def enterprise_get_teams( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_teams_serialize( - org_id=org_id, - limit=limit, - cursor=cursor, - name=name, + _param = self._exchange_authorization_code_with_access_token_serialize( + grant_type=grant_type, + client_id=client_id, + client_secret=client_secret, + code=code, + redirect_uri=redirect_uri, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12159,12 +13196,8 @@ def enterprise_get_teams( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamsPage", + "200": "AccessTokenResponse", "400": None, - "401": None, - "403": None, - "404": None, - "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12173,12 +13206,13 @@ def enterprise_get_teams( response_types_map=_response_types_map, ).data - def _enterprise_get_teams_serialize( + def _exchange_authorization_code_with_access_token_serialize( self, - org_id, - limit, - cursor, - name, + grant_type, + client_id, + client_secret, + code, + redirect_uri, _request_auth, _content_type, _headers, @@ -12197,20 +13231,26 @@ def _enterprise_get_teams_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id # process the query parameters - if limit is not None: + if grant_type is not None: - _query_params.append(("limit", limit)) + _query_params.append(("grant_type", grant_type)) - if cursor is not None: + if client_id is not None: - _query_params.append(("cursor", cursor)) + _query_params.append(("client_id", client_id)) - if name is not None: + if client_secret is not None: - _query_params.append(("name", name)) + _query_params.append(("client_secret", client_secret)) + + if code is not None: + + _query_params.append(("code", code)) + + if redirect_uri is not None: + + _query_params.append(("redirect_uri", redirect_uri)) # process the header parameters # process the form parameters @@ -12223,8 +13263,8 @@ def _enterprise_get_teams_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams", + method="POST", + resource_path="/v1/oauth/token", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12238,11 +13278,8 @@ def _enterprise_get_teams_serialize( ) @validate_call - def enterprise_update_team( + def get_access_token_context( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], - team_changes: TeamChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12252,17 +13289,11 @@ def enterprise_update_team( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Team: - """Update team + ) -> TokenContext: + """Get access token context - Updates an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token. - :param org_id: The ID of an organization. (required) - :type org_id: str - :param team_id: The ID of a team. (required) - :type team_id: str - :param team_changes: (required) - :type team_changes: TeamChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12285,23 +13316,13 @@ def enterprise_update_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_serialize( - org_id=org_id, - team_id=team_id, - team_changes=team_changes, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index, + _param = self._get_access_token_context_serialize( + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Team", + "200": "TokenContext", "400": None, - "401": None, - "403": None, - "404": None, - "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12310,11 +13331,8 @@ def enterprise_update_team( response_types_map=_response_types_map, ).data - def _enterprise_update_team_serialize( + def _get_access_token_context_serialize( self, - org_id, - team_id, - team_changes, _request_auth, _content_type, _headers, @@ -12333,34 +13351,20 @@ def _enterprise_update_team_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if team_id is not None: - _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if team_changes is not None: - _body_params = team_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}", + method="GET", + resource_path="/v1/oauth-token", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12374,9 +13378,9 @@ def _enterprise_update_team_serialize( ) @validate_call - def create_user( + def revoke_token( self, - create_user_resource: CreateUserResource, + access_token: Annotated[StrictStr, Field(description="Paste the access token that you want to revoke.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12386,13 +13390,13 @@ def create_user( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UserResource: - """Create user + ) -> None: + """(Deprecated) Revoke token (v1) - Creates a new user in the organization.


Note: All newly provisioned users are added to the default team. +

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated because the access token is passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. - :param create_user_resource: (required) - :type create_user_resource: CreateUserResource + :param access_token: Paste the access token that you want to revoke. (required) + :type access_token: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12414,9 +13418,10 @@ def create_user( :type _host_index: int, optional :return: Returns the result object. """ # noqa: E501 + warnings.warn("POST /v1/oauth/revoke is deprecated.", DeprecationWarning) - _param = self._create_user_serialize( - create_user_resource=create_user_resource, + _param = self._revoke_token_serialize( + access_token=access_token, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12424,15 +13429,8 @@ def create_user( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "UserResource", + "204": None, "400": None, - "401": None, - "403": None, - "404": None, - "409": None, - "413": None, - "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12441,9 +13439,9 @@ def create_user( response_types_map=_response_types_map, ).data - def _create_user_serialize( + def _revoke_token_serialize( self, - create_user_resource, + access_token, _request_auth, _content_type, _headers, @@ -12463,31 +13461,20 @@ def _create_user_serialize( # process the path parameters # process the query parameters + if access_token is not None: + + _query_params.append(("access_token", access_token)) + # process the header parameters # process the form parameters # process the body parameter - if create_user_resource is not None: - _body_params = create_user_resource - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type( - ["application/scim+json", "application/json"] - ) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="POST", - resource_path="/Users", + resource_path="/v1/oauth/revoke", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12501,9 +13488,9 @@ def _create_user_serialize( ) @validate_call - def delete_user( + def revoke_token_v2( self, - id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], + revoke_token_request: RevokeTokenRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12514,12 +13501,12 @@ def delete_user( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> None: - """Delete user + """Revoke token (v2) - Deletes a single user from the organization.

Note: A user who is the last admin in the team or the last admin in the organization cannot be deleted. User must be a member in the organization to be deleted. Users that have guest role in the organization cannot be deleted.

After a user is deleted, the ownership of all the boards that belong to the deleted user is transferred to the oldest team member who currently has an admin role. + Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. - :param id: User ID. A server-assigned, unique identifier for this user. (required) - :type id: str + :param revoke_token_request: (required) + :type revoke_token_request: RevokeTokenRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12542,19 +13529,17 @@ def delete_user( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_user_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._revoke_token_v2_serialize( + revoke_token_request=revoke_token_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { "204": None, - "400": None, - "401": None, - "403": None, - "404": None, - "409": None, - "429": None, - "500": None, + "404": "ErrorResponse", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12563,9 +13548,9 @@ def delete_user( response_types_map=_response_types_map, ).data - def _delete_user_serialize( + def _revoke_token_v2_serialize( self, - id, + revoke_token_request, _request_auth, _content_type, _headers, @@ -12584,19 +13569,30 @@ def _delete_user_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if revoke_token_request is not None: + _body_params = revoke_token_request + + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/Users/{id}", + method="POST", + resource_path="/v2/oauth/revoke", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12610,15 +13606,10 @@ def _delete_user_serialize( ) @validate_call - def get_user( + def enterprise_get_organization_member( self, - id: Annotated[StrictStr, Field(description="User ID of the user to be retrieved")], - attributes: Annotated[ - Optional[StrictStr], - Field( - description="A comma-separated list of attribute names to return in the response.


Example attributes - id, userName, displayName, name, userType, active, emails, photos, groups, roles.


Note: It is also possible to fetch attributes within complex attributes, for Example: emails.value" - ), - ] = None, + org_id: Annotated[StrictStr, Field(description="id of the organization")], + member_id: Annotated[StrictStr, Field(description="id of the organization member")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12628,15 +13619,15 @@ def get_user( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UserResource: - """Get user + ) -> OrganizationMember: + """Get organization member - Retrieves a single user resource.

Note
: Returns only users that are members in the organization. It does not return users that are added in the organization as guests. + Retrieves organization member information for an existing organization.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param id: User ID of the user to be retrieved (required) - :type id: str - :param attributes: A comma-separated list of attribute names to return in the response.


Example attributes - id, userName, displayName, name, userType, active, emails, photos, groups, roles.


Note: It is also possible to fetch attributes within complex attributes, for Example: emails.value - :type attributes: str + :param org_id: id of the organization (required) + :type org_id: str + :param member_id: id of the organization member (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12659,9 +13650,9 @@ def get_user( :return: Returns the result object. """ # noqa: E501 - _param = self._get_user_serialize( - id=id, - attributes=attributes, + _param = self._enterprise_get_organization_member_serialize( + org_id=org_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12669,13 +13660,13 @@ def get_user( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserResource", + "200": "OrganizationMember", "400": None, "401": None, "403": None, "404": None, + "409": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12684,10 +13675,10 @@ def get_user( response_types_map=_response_types_map, ).data - def _get_user_serialize( + def _enterprise_get_organization_member_serialize( self, - id, - attributes, + org_id, + member_id, _request_auth, _content_type, _headers, @@ -12706,26 +13697,24 @@ def _get_user_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id + if org_id is not None: + _path_params["org_id"] = org_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters - if attributes is not None: - - _query_params.append(("attributes", attributes)) - # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Users/{id}", + resource_path="/v2/orgs/{org_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12739,44 +13728,15 @@ def _get_user_serialize( ) @validate_call - def list_users( + def enterprise_get_organization_members( self, - attributes: Annotated[ - Optional[StrictStr], - Field( - description="A comma-separated list of attribute names to return in the response.

Example attributes: id, userName, displayName, name, userType, active, emails, photos, groups, roles. You can also retrieve attributes within complex attributes, for Example: emails.value. The API also supports sorting and the filter parameter." - ), - ] = None, - filter: Annotated[ - Optional[StrictStr], - Field( - description='You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical "and"
or = Logical "or"
not = "Not" function
() = Precedence grouping
The value must be passed within parenthesis.

Example filters:

For fetching users with user name as user@miro.com: userName eq "user@miro.com"

For fetching all active users in the organization: active eq true

For fetching users with "user" in their displayName: displayName co "user"

For fetching users that are member of a specific group (team): groups.value eq "3458764577585056871"

For fetching users that are not of userType Full: userType ne "Full"' - ), - ] = None, - start_index: Annotated[ - Optional[StrictInt], - Field( - description="Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1" - ), - ] = None, - count: Annotated[ - Optional[StrictInt], - Field( - description="Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12" - ), - ] = None, - sort_by: Annotated[ - Optional[StrictStr], - Field( - description="Specifies the attribute whose value will be used to order the response.

Example: sortBy=userName, sortBy=emails.value" - ), - ] = None, - sort_order: Annotated[ - Optional[StrictStr], - Field( - description="Defines the order in which the sortBy parameter is applied.

Example: sortOrder=ascending" - ), - ] = None, + org_id: Annotated[StrictStr, Field(description="id of the organization")], + emails: Optional[StrictStr] = None, + role: Optional[StrictStr] = None, + license: Optional[StrictStr] = None, + active: Optional[StrictBool] = None, + cursor: Optional[StrictStr] = None, + limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12786,23 +13746,25 @@ def list_users( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UserListResponse: - """List users + ) -> EnterpriseGetOrganizationMembers200Response: + """Get organization members - Retrieves the list of users in your organization.

Note
: The API returns users that are members in the organization, it does not return users that are added in the organization as guests. + Retrieves organization members based on the organization ID and the cursor, or based on the user emails provided in the request.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id, userName, displayName, name, userType, active, emails, photos, groups, roles. You can also retrieve attributes within complex attributes, for Example: emails.value. The API also supports sorting and the filter parameter. - :type attributes: str - :param filter: You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical \"and\"
or = Logical \"or\"
not = \"Not\" function
() = Precedence grouping
The value must be passed within parenthesis.

Example filters:

For fetching users with user name as user@miro.com: userName eq \"user@miro.com\"

For fetching all active users in the organization: active eq true

For fetching users with \"user\" in their displayName: displayName co \"user\"

For fetching users that are member of a specific group (team): groups.value eq \"3458764577585056871\"

For fetching users that are not of userType Full: userType ne \"Full\" - :type filter: str - :param start_index: Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1 - :type start_index: int - :param count: Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12 - :type count: int - :param sort_by: Specifies the attribute whose value will be used to order the response.

Example: sortBy=userName, sortBy=emails.value - :type sort_by: str - :param sort_order: Defines the order in which the sortBy parameter is applied.

Example: sortOrder=ascending - :type sort_order: str + :param org_id: id of the organization (required) + :type org_id: str + :param emails: + :type emails: str + :param role: + :type role: str + :param license: + :type license: str + :param active: + :type active: bool + :param cursor: + :type cursor: str + :param limit: + :type limit: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12825,13 +13787,14 @@ def list_users( :return: Returns the result object. """ # noqa: E501 - _param = self._list_users_serialize( - attributes=attributes, - filter=filter, - start_index=start_index, - count=count, - sort_by=sort_by, - sort_order=sort_order, + _param = self._enterprise_get_organization_members_serialize( + org_id=org_id, + emails=emails, + role=role, + license=license, + active=active, + cursor=cursor, + limit=limit, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12839,13 +13802,13 @@ def list_users( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserListResponse", + "200": "EnterpriseGetOrganizationMembers200Response", "400": None, "401": None, "403": None, "404": None, + "409": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -12854,14 +13817,15 @@ def list_users( response_types_map=_response_types_map, ).data - def _list_users_serialize( + def _enterprise_get_organization_members_serialize( self, - attributes, - filter, - start_index, - count, - sort_by, - sort_order, + org_id, + emails, + role, + license, + active, + cursor, + limit, _request_auth, _content_type, _headers, @@ -12880,44 +13844,46 @@ def _list_users_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters - if attributes is not None: + if emails is not None: - _query_params.append(("attributes", attributes)) + _query_params.append(("emails", emails)) - if filter is not None: + if role is not None: - _query_params.append(("filter", filter)) + _query_params.append(("role", role)) - if start_index is not None: + if license is not None: - _query_params.append(("startIndex", start_index)) + _query_params.append(("license", license)) - if count is not None: + if active is not None: - _query_params.append(("count", count)) + _query_params.append(("active", active)) - if sort_by is not None: + if cursor is not None: - _query_params.append(("sortBy", sort_by)) + _query_params.append(("cursor", cursor)) - if sort_order is not None: + if limit is not None: - _query_params.append(("sortOrder", sort_order)) + _query_params.append(("limit", limit)) # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/Users", + resource_path="/v2/orgs/{org_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -12931,15 +13897,9 @@ def _list_users_serialize( ) @validate_call - def patch_user( + def enterprise_get_organization( self, - id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], - patch_user_resource: Annotated[ - PatchUserResource, - Field( - description='Payload to update user information.

The body of a PATCH request must contain the attribute `Operations`, and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one "op" member.' - ), - ], + org_id: Annotated[StrictStr, Field(description="id of the organization")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12949,15 +13909,13 @@ def patch_user( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UserResource: - """Patch user + ) -> Organization: + """Get organization info - Updates an existing user resource, overwriting values for specified attributes. Attributes that are not provided will remain unchanged. PATCH operation only updates the fields provided.

Note: If the user is not a member in the organization, they cannot be updated. Additionally, users with guest role in the organization cannot be updated. + Retrieves organization information.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param id: User ID. A server-assigned, unique identifier for this user. (required) - :type id: str - :param patch_user_resource: Payload to update user information.

The body of a PATCH request must contain the attribute `Operations`, and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one \"op\" member. (required) - :type patch_user_resource: PatchUserResource + :param org_id: id of the organization (required) + :type org_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12980,9 +13938,8 @@ def patch_user( :return: Returns the result object. """ # noqa: E501 - _param = self._patch_user_serialize( - id=id, - patch_user_resource=patch_user_resource, + _param = self._enterprise_get_organization_serialize( + org_id=org_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12990,14 +13947,13 @@ def patch_user( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserResource", + "200": "Organization", "400": None, "401": None, "403": None, "404": None, "409": None, "429": None, - "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13006,10 +13962,9 @@ def patch_user( response_types_map=_response_types_map, ).data - def _patch_user_serialize( + def _enterprise_get_organization_serialize( self, - id, - patch_user_resource, + org_id, _request_auth, _content_type, _headers, @@ -13028,34 +13983,22 @@ def _patch_user_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if patch_user_resource is not None: - _body_params = patch_user_resource # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type( - ["application/scim+json", "application/json"] - ) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/Users/{id}", + method="GET", + resource_path="/v2/orgs/{org_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13069,10 +14012,12 @@ def _patch_user_serialize( ) @validate_call - def replace_user( + def enterprise_add_project_member( self, - id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], - user_resource: Annotated[UserResource, Field(description="Payload to update user information.")], + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project to which you want to add a user.")], + add_project_member_request: AddProjectMemberRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13082,15 +14027,19 @@ def replace_user( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> UserResource: - """Replace user + ) -> ProjectMember: + """Add member in a project - Updates an existing user resource. This is the easiest way to replace user information.

If the user is deactivated,
userName, userType, and roles.value cannot be updated.
emails.value, emails.display, emails.primary get ignored and do not return any error.

Note: If the user is not a member in the organization, they cannot be updated. Additionally, users with guest role in the organization cannot be updated. + Add a Miro user to a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param id: User ID. A server-assigned, unique identifier for this user. (required) - :type id: str - :param user_resource: Payload to update user information. (required) - :type user_resource: UserResource + :param org_id: The ID of the organization to which the project belongs. (required) + :type org_id: str + :param team_id: The ID of the team to which the project belongs. (required) + :type team_id: str + :param project_id: The ID of the project to which you want to add a user. (required) + :type project_id: str + :param add_project_member_request: (required) + :type add_project_member_request: AddProjectMemberRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13113,9 +14062,11 @@ def replace_user( :return: Returns the result object. """ # noqa: E501 - _param = self._replace_user_serialize( - id=id, - user_resource=user_resource, + _param = self._enterprise_add_project_member_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + add_project_member_request=add_project_member_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13123,14 +14074,13 @@ def replace_user( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserResource", - "400": None, - "401": None, - "403": None, - "404": None, - "409": None, - "429": None, - "500": None, + "201": "ProjectMember", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13139,10 +14089,12 @@ def replace_user( response_types_map=_response_types_map, ).data - def _replace_user_serialize( + def _enterprise_add_project_member_serialize( self, - id, - user_resource, + org_id, + team_id, + project_id, + add_project_member_request, _request_auth, _content_type, _headers, @@ -13161,25 +14113,27 @@ def _replace_user_serialize( _body_params: Optional[bytes] = None # process the path parameters - if id is not None: - _path_params["id"] = id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if user_resource is not None: - _body_params = user_resource + if add_project_member_request is not None: + _body_params = add_project_member_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type( - ["application/scim+json", "application/json"] - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -13187,8 +14141,8 @@ def _replace_user_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/Users/{id}", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13202,11 +14156,16 @@ def _replace_user_serialize( ) @validate_call - def enterprise_create_group_member( + def enterprise_delete_project_member( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - create_group_member_request: CreateGroupMemberRequest, + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[ + StrictStr, Field(description="The ID of the project from which you want to remove a member.") + ], + member_id: Annotated[ + StrictStr, Field(description="The ID of the member that you want to remove from a project.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13216,17 +14175,19 @@ def enterprise_create_group_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupMember: - """Create user group member + ) -> None: + """Remove project member - Adds a member to a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Remove a member from a project. The user remains in the team even after the member is removed from a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param create_group_member_request: (required) - :type create_group_member_request: CreateGroupMemberRequest + :param team_id: The ID of the team to which the project belongs. (required) + :type team_id: str + :param project_id: The ID of the project from which you want to remove a member. (required) + :type project_id: str + :param member_id: The ID of the member that you want to remove from a project. (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13249,10 +14210,11 @@ def enterprise_create_group_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_group_member_serialize( + _param = self._enterprise_delete_project_member_serialize( org_id=org_id, - group_id=group_id, - create_group_member_request=create_group_member_request, + team_id=team_id, + project_id=project_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13260,12 +14222,13 @@ def enterprise_create_group_member( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "GroupMember", - "400": None, - "401": None, - "403": None, - "409": None, - "429": None, + "204": None, + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13274,11 +14237,12 @@ def enterprise_create_group_member( response_types_map=_response_types_map, ).data - def _enterprise_create_group_member_serialize( + def _enterprise_delete_project_member_serialize( self, org_id, - group_id, - create_group_member_request, + team_id, + project_id, + member_id, _request_auth, _content_type, _headers, @@ -13299,32 +14263,26 @@ def _enterprise_create_group_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_group_member_request is not None: - _body_params = create_group_member_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", + method="DELETE", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13338,11 +14296,17 @@ def _enterprise_create_group_member_serialize( ) @validate_call - def enterprise_delete_group_member( + def enterprise_get_project_member( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - member_id: Annotated[StrictStr, Field(description="The ID of a group member.")], + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[ + StrictStr, + Field(description="The ID of the project from which you want to retrieve specific member information."), + ], + member_id: Annotated[ + StrictStr, Field(description="The ID of the member for which you want to retrieve information.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13352,16 +14316,18 @@ def enterprise_delete_group_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete user group member + ) -> ProjectMember: + """Get project member - Removes a member from a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves information for a specific project member.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param member_id: The ID of a group member. (required) + :param team_id: The ID of the team to which the project belongs. (required) + :type team_id: str + :param project_id: The ID of the project from which you want to retrieve specific member information. (required) + :type project_id: str + :param member_id: The ID of the member for which you want to retrieve information. (required) :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -13385,9 +14351,10 @@ def enterprise_delete_group_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_group_member_serialize( + _param = self._enterprise_get_project_member_serialize( org_id=org_id, - group_id=group_id, + team_id=team_id, + project_id=project_id, member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, @@ -13396,12 +14363,13 @@ def enterprise_delete_group_member( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "ProjectMember", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13410,10 +14378,11 @@ def enterprise_delete_group_member( response_types_map=_response_types_map, ).data - def _enterprise_delete_group_member_serialize( + def _enterprise_get_project_member_serialize( self, org_id, - group_id, + team_id, + project_id, member_id, _request_auth, _content_type, @@ -13435,8 +14404,10 @@ def _enterprise_delete_group_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id if member_id is not None: _path_params["member_id"] = member_id # process the query parameters @@ -13444,12 +14415,15 @@ def _enterprise_delete_group_member_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13463,11 +14437,25 @@ def _enterprise_delete_group_member_serialize( ) @validate_call - def enterprise_get_group_member( + def enterprise_get_project_members( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - member_id: Annotated[StrictStr, Field(description="The ID of a group member.")], + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[ + StrictStr, Field(description="The ID of the project for which you want to retrieve the list of members.") + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of project members in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13477,17 +14465,21 @@ def enterprise_get_group_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupMember: - """Get user group member + ) -> ProjectMemberPage: + """List of project members - Retrieves information about a user group member in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of members for a specific project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param member_id: The ID of a group member. (required) - :type member_id: str + :param team_id: The ID of the team to which the project belongs. (required) + :type team_id: str + :param project_id: The ID of the project for which you want to retrieve the list of members. (required) + :type project_id: str + :param limit: The maximum number of results to return per call. If the number of project members in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13510,10 +14502,12 @@ def enterprise_get_group_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_group_member_serialize( + _param = self._enterprise_get_project_members_serialize( org_id=org_id, - group_id=group_id, - member_id=member_id, + team_id=team_id, + project_id=project_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13521,12 +14515,13 @@ def enterprise_get_group_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupMember", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "ProjectMemberPage", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13535,11 +14530,13 @@ def enterprise_get_group_member( response_types_map=_response_types_map, ).data - def _enterprise_get_group_member_serialize( + def _enterprise_get_project_members_serialize( self, org_id, - group_id, - member_id, + team_id, + project_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -13560,11 +14557,19 @@ def _enterprise_get_group_member_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id - if member_id is not None: - _path_params["member_id"] = member_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -13577,7 +14582,7 @@ def _enterprise_get_group_member_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13591,20 +14596,15 @@ def _enterprise_get_group_member_serialize( ) @validate_call - def enterprise_get_group_members( + def enterprise_update_project_member( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of members in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a member in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + org_id: Annotated[ + StrictStr, Field(description="The ID of the organization to which the project member belongs.") + ], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project member belongs.")], + project_id: Annotated[StrictStr, Field(description="The ID of a Project.")], + member_id: Annotated[StrictStr, Field(description="The ID of the member whose details you want to update.")], + update_project_member_request: UpdateProjectMemberRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13614,19 +14614,21 @@ def enterprise_get_group_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupMembersPage: - """List of user group members + ) -> ProjectMember: + """Update project member - Retrieves the list of members who are part of a team in an existing organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates details of a project member, such as the member's role.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project member belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param limit: The maximum number of members in the result list. - :type limit: int - :param cursor: A representation of the position of a member in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param team_id: The ID of the team to which the project member belongs. (required) + :type team_id: str + :param project_id: The ID of a Project. (required) + :type project_id: str + :param member_id: The ID of the member whose details you want to update. (required) + :type member_id: str + :param update_project_member_request: (required) + :type update_project_member_request: UpdateProjectMemberRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13649,11 +14651,12 @@ def enterprise_get_group_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_group_members_serialize( + _param = self._enterprise_update_project_member_serialize( org_id=org_id, - group_id=group_id, - limit=limit, - cursor=cursor, + team_id=team_id, + project_id=project_id, + member_id=member_id, + update_project_member_request=update_project_member_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13661,11 +14664,13 @@ def enterprise_get_group_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupMembersPage", - "400": None, - "401": None, - "403": None, - "429": None, + "200": "ProjectMember", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13674,12 +14679,13 @@ def enterprise_get_group_members( response_types_map=_response_types_map, ).data - def _enterprise_get_group_members_serialize( + def _enterprise_update_project_member_serialize( self, org_id, - group_id, - limit, - cursor, + team_id, + project_id, + member_id, + update_project_member_request, _request_auth, _content_type, _headers, @@ -13700,30 +14706,36 @@ def _enterprise_get_group_members_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if update_project_member_request is not None: + _body_params = update_project_member_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13737,11 +14749,13 @@ def _enterprise_get_group_members_serialize( ) @validate_call - def enterprise_update_group_members( + def enterprise_get_project_settings( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - update_user_group_members_request: UpdateUserGroupMembersRequest, + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[ + StrictStr, Field(description="The ID of the project for which you want to retrieve the project settings.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13751,17 +14765,17 @@ def enterprise_update_group_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[UpdateUserGroupMembersResultInner]: - """Bulk edit of membership in user group + ) -> ProjectSettings: + """Get project settings - Add and remove members in one request. For example, remove user A and add user B.

Required scope

organizations:groups:write

Rate limiting

Level 1 per item. For example, if you want to add 10 users and remove 5, the rate limiting applicable will be 750 credits. This is because each user addition or deletion takes Level 1 rate limiting of 50 credits, so 15 * 50 = 750.

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the project settings.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param update_user_group_members_request: (required) - :type update_user_group_members_request: UpdateUserGroupMembersRequest + :param team_id: The ID of the team to which the project belongs. (required) + :type team_id: str + :param project_id: The ID of the project for which you want to retrieve the project settings. (required) + :type project_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13784,10 +14798,10 @@ def enterprise_update_group_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_group_members_serialize( + _param = self._enterprise_get_project_settings_serialize( org_id=org_id, - group_id=group_id, - update_user_group_members_request=update_user_group_members_request, + team_id=team_id, + project_id=project_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13795,14 +14809,12 @@ def enterprise_update_group_members( ) _response_types_map: Dict[str, Optional[str]] = { - "207": "List[UpdateUserGroupMembersResultInner]", - "400": None, - "401": None, - "403": None, - "404": None, - "409": None, - "413": None, - "429": None, + "200": "ProjectSettings", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13811,11 +14823,11 @@ def enterprise_update_group_members( response_types_map=_response_types_map, ).data - def _enterprise_update_group_members_serialize( + def _enterprise_get_project_settings_serialize( self, org_id, - group_id, - update_user_group_members_request, + team_id, + project_id, _request_auth, _content_type, _headers, @@ -13836,32 +14848,24 @@ def _enterprise_update_group_members_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if update_user_group_members_request is not None: - _body_params = update_user_group_members_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -13875,11 +14879,12 @@ def _enterprise_update_group_members_serialize( ) @validate_call - def enterprise_groups_get_team( + def enterprise_update_project_settings( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + org_id: Annotated[StrictStr, Field(description="The ID of the organization to which the project belongs.")], + team_id: Annotated[StrictStr, Field(description="The ID of the team to which the project belongs.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project whose settings you want to update.")], + update_project_settings_request: UpdateProjectSettingsRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -13889,17 +14894,19 @@ def enterprise_groups_get_team( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupTeam: - """Get user group team + ) -> ProjectSettings: + """Update project settings - Retrieves information of a team that the user group is a part of in an organization.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Updates the settings of a project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization to which the project belongs. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param team_id: The ID of a team. (required) + :param team_id: The ID of the team to which the project belongs. (required) :type team_id: str + :param project_id: The ID of the project whose settings you want to update. (required) + :type project_id: str + :param update_project_settings_request: (required) + :type update_project_settings_request: UpdateProjectSettingsRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -13922,10 +14929,11 @@ def enterprise_groups_get_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_groups_get_team_serialize( + _param = self._enterprise_update_project_settings_serialize( org_id=org_id, - group_id=group_id, team_id=team_id, + project_id=project_id, + update_project_settings_request=update_project_settings_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -13933,11 +14941,13 @@ def enterprise_groups_get_team( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupTeam", - "400": None, - "401": None, - "403": None, - "429": None, + "200": "ProjectSettings", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -13946,11 +14956,12 @@ def enterprise_groups_get_team( response_types_map=_response_types_map, ).data - def _enterprise_groups_get_team_serialize( + def _enterprise_update_project_settings_serialize( self, org_id, - group_id, team_id, + project_id, + update_project_settings_request, _request_auth, _content_type, _headers, @@ -13971,24 +14982,34 @@ def _enterprise_groups_get_team_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id if team_id is not None: _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if update_project_settings_request is not None: + _body_params = update_project_settings_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/teams/{team_id}", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14002,20 +15023,15 @@ def _enterprise_groups_get_team_serialize( ) @validate_call - def enterprise_groups_get_teams( + def enterprise_create_project( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of teams in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a team in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + org_id: Annotated[ + StrictStr, Field(description="The ID of the organization within which you you want to create a project.") + ], + team_id: Annotated[ + StrictStr, Field(description="The ID of the team within which you you want to create a project.") + ], + create_project_request: CreateProjectRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14025,19 +15041,17 @@ def enterprise_groups_get_teams( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupTeamsPage: - """Get teams of a user group + ) -> Project: + """Create project - Retrieves the list of teams that the user group is a part of.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Projects are essentially folders of boards with the option to manage user access for a smaller group of people within a team. Projects are here to help you organize your boards and make them easier to find and share. In other words, a project is a group of boards that you can share with your teammates all at once. For more information, see our Help Center page on Projects.

This API creates a new project in an existing team of an organization.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization within which you you want to create a project. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param limit: The maximum number of teams in the result list. - :type limit: int - :param cursor: A representation of the position of a team in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param team_id: The ID of the team within which you you want to create a project. (required) + :type team_id: str + :param create_project_request: (required) + :type create_project_request: CreateProjectRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14060,11 +15074,10 @@ def enterprise_groups_get_teams( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_groups_get_teams_serialize( + _param = self._enterprise_create_project_serialize( org_id=org_id, - group_id=group_id, - limit=limit, - cursor=cursor, + team_id=team_id, + create_project_request=create_project_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14072,11 +15085,13 @@ def enterprise_groups_get_teams( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupTeamsPage", - "400": None, - "401": None, - "403": None, - "429": None, + "201": "Project", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -14085,12 +15100,11 @@ def enterprise_groups_get_teams( response_types_map=_response_types_map, ).data - def _enterprise_groups_get_teams_serialize( + def _enterprise_create_project_serialize( self, org_id, - group_id, - limit, - cursor, + team_id, + create_project_request, _request_auth, _content_type, _headers, @@ -14111,30 +15125,32 @@ def _enterprise_groups_get_teams_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if create_project_request is not None: + _body_params = create_project_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/groups/{group_id}/teams", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14148,10 +15164,13 @@ def _enterprise_groups_get_teams_serialize( ) @validate_call - def enterprise_create_group( + def enterprise_delete_project( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - create_group_request: CreateGroupRequest, + org_id: Annotated[ + StrictStr, Field(description="The ID of the organization from which you want to delete a project.") + ], + team_id: Annotated[StrictStr, Field(description="The ID of the team from which you want to delete a project.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14161,15 +15180,17 @@ def enterprise_create_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Group: - """Create user group + ) -> None: + """Delete project - Creates a new user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Deletes a project. After a project is deleted, all boards and users that belong to the project remain in the team.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization from which you want to delete a project. (required) :type org_id: str - :param create_group_request: (required) - :type create_group_request: CreateGroupRequest + :param team_id: The ID of the team from which you want to delete a project. (required) + :type team_id: str + :param project_id: The ID of the project that you want to delete. (required) + :type project_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14192,9 +15213,10 @@ def enterprise_create_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_group_serialize( + _param = self._enterprise_delete_project_serialize( org_id=org_id, - create_group_request=create_group_request, + team_id=team_id, + project_id=project_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14202,12 +15224,13 @@ def enterprise_create_group( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Group", - "400": None, - "401": None, - "403": None, - "409": None, - "429": None, + "204": None, + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -14216,10 +15239,11 @@ def enterprise_create_group( response_types_map=_response_types_map, ).data - def _enterprise_create_group_serialize( + def _enterprise_delete_project_serialize( self, org_id, - create_group_request, + team_id, + project_id, _request_auth, _content_type, _headers, @@ -14240,30 +15264,24 @@ def _enterprise_create_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if create_group_request is not None: - _body_params = create_group_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/orgs/{org_id}/groups", + method="DELETE", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14277,10 +15295,18 @@ def _enterprise_create_group_serialize( ) @validate_call - def enterprise_delete_group( + def enterprise_get_project( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + org_id: Annotated[ + StrictStr, + Field(description="The ID of the organization from which you want to retrieve the project information."), + ], + team_id: Annotated[ + StrictStr, Field(description="The ID of the team from which you want to retrieve the project information.") + ], + project_id: Annotated[ + StrictStr, Field(description="The ID of the project for which you want to retrieve the information.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14290,15 +15316,17 @@ def enterprise_delete_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete user group + ) -> Project: + """Get project - Deletes a user group from an organization.

Required scope

organizations:groups:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves project information, such as a name for an existing project.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization from which you want to retrieve the project information. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + :param team_id: The ID of the team from which you want to retrieve the project information. (required) + :type team_id: str + :param project_id: The ID of the project for which you want to retrieve the information. (required) + :type project_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14321,9 +15349,10 @@ def enterprise_delete_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_group_serialize( + _param = self._enterprise_get_project_serialize( org_id=org_id, - group_id=group_id, + team_id=team_id, + project_id=project_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14331,12 +15360,12 @@ def enterprise_delete_group( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "Project", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -14345,10 +15374,11 @@ def enterprise_delete_group( response_types_map=_response_types_map, ).data - def _enterprise_delete_group_serialize( + def _enterprise_get_project_serialize( self, org_id, - group_id, + team_id, + project_id, _request_auth, _content_type, _headers, @@ -14369,19 +15399,24 @@ def _enterprise_delete_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/orgs/{org_id}/groups/{group_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14395,10 +15430,30 @@ def _enterprise_delete_group_serialize( ) @validate_call - def enterprise_get_group( + def enterprise_get_projects( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + org_id: Annotated[ + StrictStr, + Field( + description="The ID of the organization from which you want to retrieve the list of available projects." + ), + ], + team_id: Annotated[ + StrictStr, + Field(description="The ID of the team from which you want to retrieve the list of available projects."), + ], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field( + description="The maximum number of results to return per call. If the number of projects in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14408,15 +15463,19 @@ def enterprise_get_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Group: - """Get user group + ) -> ProjectPage: + """List of projects - Retrieves a user group in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Retrieves the list of projects in an existing team of an organization. You can retrieve all projects, including all private projects (projects that haven't been specifically shared with you) by enabling Content Admin permissions. To enable Content Admin permissions, see [Content Admin permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins).

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of the organization from which you want to retrieve the list of available projects. (required) :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str + :param team_id: The ID of the team from which you want to retrieve the list of available projects. (required) + :type team_id: str + :param limit: The maximum number of results to return per call. If the number of projects in the response is greater than the limit specified, the response returns the cursor parameter with a value. + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14439,9 +15498,11 @@ def enterprise_get_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_group_serialize( + _param = self._enterprise_get_projects_serialize( org_id=org_id, - group_id=group_id, + team_id=team_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14449,12 +15510,12 @@ def enterprise_get_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Group", - "400": None, - "401": None, - "403": None, - "404": None, - "429": None, + "200": "ProjectPage", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -14463,10 +15524,12 @@ def enterprise_get_group( response_types_map=_response_types_map, ).data - def _enterprise_get_group_serialize( + def _enterprise_get_projects_serialize( self, org_id, - group_id, + team_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -14487,9 +15550,17 @@ def _enterprise_get_group_serialize( # process the path parameters if org_id is not None: _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -14502,7 +15573,7 @@ def _enterprise_get_group_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/groups/{group_id}", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14516,19 +15587,12 @@ def _enterprise_get_group_serialize( ) @validate_call - def enterprise_get_groups( + def enterprise_update_project( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], - Field(description="The maximum number of user groups in the result list."), - ] = None, - cursor: Annotated[ - Optional[StrictStr], - Field( - description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." - ), - ] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an Organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a Team.")], + project_id: Annotated[StrictStr, Field(description="The ID of a Project.")], + update_project_request: UpdateProjectRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14538,17 +15602,19 @@ def enterprise_get_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupsPage: - """List of user groups + ) -> Project: + """Update project - Retrieves the list of user groups in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Update information about a project, such as the project name.

Note

Projects have been renamed to Spaces, and the terms can be used interchangeably.

Required scope

projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) + :param org_id: The ID of an Organization. (required) :type org_id: str - :param limit: The maximum number of user groups in the result list. - :type limit: int - :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. - :type cursor: str + :param team_id: The ID of a Team. (required) + :type team_id: str + :param project_id: The ID of a Project. (required) + :type project_id: str + :param update_project_request: (required) + :type update_project_request: UpdateProjectRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14571,10 +15637,11 @@ def enterprise_get_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_groups_serialize( + _param = self._enterprise_update_project_serialize( org_id=org_id, - limit=limit, - cursor=cursor, + team_id=team_id, + project_id=project_id, + update_project_request=update_project_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14582,11 +15649,13 @@ def enterprise_get_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupsPage", - "400": None, - "401": None, - "403": None, - "429": None, + "200": "Project", + "400": "Error400", + "401": "Error401", + "403": "Error403", + "404": "Error404", + "409": "Error409", + "429": "Error429", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -14595,11 +15664,12 @@ def enterprise_get_groups( response_types_map=_response_types_map, ).data - def _enterprise_get_groups_serialize( + def _enterprise_update_project_serialize( self, org_id, - limit, - cursor, + team_id, + project_id, + update_project_request, _request_auth, _content_type, _headers, @@ -14619,29 +15689,35 @@ def _enterprise_get_groups_serialize( # process the path parameters if org_id is not None: - _path_params["org_id"] = org_id - # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if project_id is not None: + _path_params["project_id"] = project_id + # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if update_project_request is not None: + _body_params = update_project_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/groups", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14655,11 +15731,14 @@ def _enterprise_get_groups_serialize( ) @validate_call - def enterprise_update_group( + def enterprise_post_user_sessions_reset( self, - org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], - group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], - update_group_request: UpdateGroupRequest, + email: Annotated[ + StrictStr, + Field( + description="Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices." + ), + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14669,17 +15748,13 @@ def enterprise_update_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Group: - """Update user group + ) -> None: + """Reset all sessions of a user - Updates a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ Reset all sessions of a user. Admins can now take immediate action to restrict user access to company data in case of security concerns. Calling this API ends all active Miro sessions across devices for a particular user, requiring the user to sign in again. This is useful in situations where a user leaves the company, their credentials are compromised, or there's suspicious activity on their account.

Required scope

sessions:delete

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param org_id: The ID of an organization. (required) - :type org_id: str - :param group_id: The ID of a user group. (required) - :type group_id: str - :param update_group_request: (required) - :type update_group_request: UpdateGroupRequest + :param email: Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices. (required) + :type email: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14702,10 +15777,8 @@ def enterprise_update_group( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_group_serialize( - org_id=org_id, - group_id=group_id, - update_group_request=update_group_request, + _param = self._enterprise_post_user_sessions_reset_serialize( + email=email, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14713,12 +15786,11 @@ def enterprise_update_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Group", + "200": None, "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -14728,11 +15800,9 @@ def enterprise_update_group( response_types_map=_response_types_map, ).data - def _enterprise_update_group_serialize( + def _enterprise_post_user_sessions_reset_serialize( self, - org_id, - group_id, - update_group_request, + email, _request_auth, _content_type, _headers, @@ -14751,34 +15821,21 @@ def _enterprise_update_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if org_id is not None: - _path_params["org_id"] = org_id - if group_id is not None: - _path_params["group_id"] = group_id # process the query parameters + if email is not None: + + _query_params.append(("email", email)) + # process the header parameters # process the form parameters # process the body parameter - if update_group_request is not None: - _body_params = update_group_request - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/groups/{group_id}", + method="POST", + resource_path="/v2/sessions/reset_all", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14792,12 +15849,12 @@ def _enterprise_update_group_serialize( ) @validate_call - def create_app_card_item( + def create_shape_item( self, board_id: Annotated[ StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - app_card_create_request: AppCardCreateRequest, + shape_create_request: ShapeCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -14807,15 +15864,15 @@ def create_app_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AppCardItem: - """Create app card item + ) -> ShapeItem: + """Create shape item - Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
:param board_id: Unique identifier (ID) of the board where you want to create the item. (required) :type board_id: str - :param app_card_create_request: (required) - :type app_card_create_request: AppCardCreateRequest + :param shape_create_request: (required) + :type shape_create_request: ShapeCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -14838,9 +15895,9 @@ def create_app_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_app_card_item_serialize( + _param = self._create_shape_item_serialize( board_id=board_id, - app_card_create_request=app_card_create_request, + shape_create_request=shape_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -14848,7 +15905,7 @@ def create_app_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "AppCardItem", + "201": "ShapeItem", "400": None, "404": None, "429": None, @@ -14860,10 +15917,10 @@ def create_app_card_item( response_types_map=_response_types_map, ).data - def _create_app_card_item_serialize( + def _create_shape_item_serialize( self, board_id, - app_card_create_request, + shape_create_request, _request_auth, _content_type, _headers, @@ -14888,8 +15945,8 @@ def _create_app_card_item_serialize( # process the header parameters # process the form parameters # process the body parameter - if app_card_create_request is not None: - _body_params = app_card_create_request + if shape_create_request is not None: + _body_params = shape_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -14907,7 +15964,7 @@ def _create_app_card_item_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id}/app_cards", + resource_path="/v2/boards/{board_id}/shapes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -14921,10 +15978,10 @@ def _create_app_card_item_serialize( ) @validate_call - def delete_app_card_item( + def delete_shape_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete an item.") + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ @@ -14937,11 +15994,11 @@ def delete_app_card_item( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Delete app card item + """Delete shape item - Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board from which you want to delete an item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) :type board_id: str :param item_id: Unique identifier (ID) of the item that you want to delete. (required) :type item_id: str @@ -14967,7 +16024,7 @@ def delete_app_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_app_card_item_serialize( + _param = self._delete_shape_item_serialize( board_id=board_id, item_id=item_id, _request_auth=_request_auth, @@ -14989,7 +16046,7 @@ def delete_app_card_item( response_types_map=_response_types_map, ).data - def _delete_app_card_item_serialize( + def _delete_shape_item_serialize( self, board_id, item_id, @@ -15028,7 +16085,7 @@ def _delete_app_card_item_serialize( return self.api_client.param_serialize( method="DELETE", - resource_path="/v2/boards/{board_id}/app_cards/{item_id}", + resource_path="/v2/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15042,7 +16099,7 @@ def _delete_app_card_item_serialize( ) @validate_call - def get_app_card_item( + def get_shape_item( self, board_id: Annotated[ StrictStr, @@ -15060,10 +16117,10 @@ def get_app_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AppCardItem: - """Get app card item + ) -> ShapeItem: + """Get shape item - Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
:param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str @@ -15091,7 +16148,7 @@ def get_app_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_app_card_item_serialize( + _param = self._get_shape_item_serialize( board_id=board_id, item_id=item_id, _request_auth=_request_auth, @@ -15101,7 +16158,7 @@ def get_app_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AppCardItem", + "200": "ShapeItem", "400": None, "404": None, "429": None, @@ -15113,7 +16170,7 @@ def get_app_card_item( response_types_map=_response_types_map, ).data - def _get_app_card_item_serialize( + def _get_shape_item_serialize( self, board_id, item_id, @@ -15152,7 +16209,7 @@ def _get_app_card_item_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/app_cards/{item_id}", + resource_path="/v2/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15166,13 +16223,13 @@ def _get_app_card_item_serialize( ) @validate_call - def update_app_card_item( + def update_shape_item( self, board_id: Annotated[ StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - app_card_update_request: AppCardUpdateRequest, + shape_update_request: ShapeUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15182,17 +16239,17 @@ def update_app_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AppCardItem: - """Update app card item + ) -> ShapeItem: + """Update shape item - Updates an app card item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Updates a shape item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
:param board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str :param item_id: Unique identifier (ID) of the item that you want to update. (required) :type item_id: str - :param app_card_update_request: (required) - :type app_card_update_request: AppCardUpdateRequest + :param shape_update_request: (required) + :type shape_update_request: ShapeUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15215,10 +16272,10 @@ def update_app_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_app_card_item_serialize( + _param = self._update_shape_item_serialize( board_id=board_id, item_id=item_id, - app_card_update_request=app_card_update_request, + shape_update_request=shape_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15226,7 +16283,7 @@ def update_app_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AppCardItem", + "200": "ShapeItem", "400": None, "404": None, "409": None, @@ -15239,11 +16296,11 @@ def update_app_card_item( response_types_map=_response_types_map, ).data - def _update_app_card_item_serialize( + def _update_shape_item_serialize( self, board_id, item_id, - app_card_update_request, + shape_update_request, _request_auth, _content_type, _headers, @@ -15270,8 +16327,8 @@ def _update_app_card_item_serialize( # process the header parameters # process the form parameters # process the body parameter - if app_card_update_request is not None: - _body_params = app_card_update_request + if shape_update_request is not None: + _body_params = shape_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -15289,7 +16346,7 @@ def _update_app_card_item_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/v2/boards/{board_id}/app_cards/{item_id}", + resource_path="/v2/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15303,13 +16360,11 @@ def _update_app_card_item_serialize( ) @validate_call - def get_board_members( + def enterprise_boards_create_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") - ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - offset: Optional[StrictStr] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + board_id: Annotated[StrictStr, Field(description="The ID of the board.")], + create_board_user_groups_request: CreateBoardUserGroupsRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15319,17 +16374,17 @@ def get_board_members( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardMembersPagedResponse: - """Get all board members + ) -> BoardUserGroup: + """Create board user group assignments - Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
+ Shares a board with user groups with a specified role. Updates the role if already shared.

Required scope

organizations:groups:read
boards:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param board_id: The ID of the board. (required) :type board_id: str - :param limit: - :type limit: str - :param offset: - :type offset: str + :param create_board_user_groups_request: (required) + :type create_board_user_groups_request: CreateBoardUserGroupsRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15352,10 +16407,10 @@ def get_board_members( :return: Returns the result object. """ # noqa: E501 - _param = self._get_board_members_serialize( + _param = self._enterprise_boards_create_group_serialize( + org_id=org_id, board_id=board_id, - limit=limit, - offset=offset, + create_board_user_groups_request=create_board_user_groups_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15363,9 +16418,11 @@ def get_board_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardMembersPagedResponse", + "200": "BoardUserGroup", "400": None, - "404": None, + "401": None, + "403": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -15375,11 +16432,11 @@ def get_board_members( response_types_map=_response_types_map, ).data - def _get_board_members_serialize( + def _enterprise_boards_create_group_serialize( self, + org_id, board_id, - limit, - offset, + create_board_user_groups_request, _request_auth, _content_type, _headers, @@ -15398,30 +16455,34 @@ def _get_board_members_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if offset is not None: - - _query_params.append(("offset", offset)) - # process the header parameters # process the form parameters # process the body parameter + if create_board_user_groups_request is not None: + _body_params = create_board_user_groups_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/members", + method="POST", + resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15432,17 +16493,14 @@ def _get_board_members_serialize( collection_formats=_collection_formats, _host=_host, _request_auth=_request_auth, - ) - - @validate_call - def get_specific_board_member( - self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") - ], - board_member_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to retrieve.") - ], + ) + + @validate_call + def enterprise_boards_delete_groups( + self, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + board_id: Annotated[StrictStr, Field(description="The ID of the board.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15452,15 +16510,17 @@ def get_specific_board_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardMemberWithLinks: - """Get specific board member + ) -> None: + """Delete board user group assignment - Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
+ Removes a user group from the specified board.

Required scope

organizations:groups:read
boards:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param board_id: The ID of the board. (required) :type board_id: str - :param board_member_id: Unique identifier (ID) of the board member whose role you want to retrieve. (required) - :type board_member_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15483,9 +16543,10 @@ def get_specific_board_member( :return: Returns the result object. """ # noqa: E501 - _param = self._get_specific_board_member_serialize( + _param = self._enterprise_boards_delete_groups_serialize( + org_id=org_id, board_id=board_id, - board_member_id=board_member_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15493,9 +16554,12 @@ def get_specific_board_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardMemberWithLinks", + "204": None, "400": None, + "401": None, + "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -15505,10 +16569,11 @@ def get_specific_board_member( response_types_map=_response_types_map, ).data - def _get_specific_board_member_serialize( + def _enterprise_boards_delete_groups_serialize( self, + org_id, board_id, - board_member_id, + group_id, _request_auth, _content_type, _headers, @@ -15527,24 +16592,23 @@ def _get_specific_board_member_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id - if board_member_id is not None: - _path_params["board_member_id"] = board_member_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/members/{board_member_id}", + method="DELETE", + resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15558,14 +16622,20 @@ def _get_specific_board_member_serialize( ) @validate_call - def remove_board_member( + def enterprise_boards_get_groups( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete an item.") - ], - board_member_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to delete.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + board_id: Annotated[StrictStr, Field(description="The ID of the board.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of user groups in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15575,15 +16645,19 @@ def remove_board_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Remove board member + ) -> BoardUserGroupsPage: + """Get board user group assignments - Removes a board member from a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves information about user groups invited to the specified board.

Required scope

organizations:groups:read
boards:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete an item. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param board_id: The ID of the board. (required) :type board_id: str - :param board_member_id: Unique identifier (ID) of the board member whose role you want to delete. (required) - :type board_member_id: str + :param limit: The maximum number of user groups in the result list. + :type limit: int + :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15606,9 +16680,11 @@ def remove_board_member( :return: Returns the result object. """ # noqa: E501 - _param = self._remove_board_member_serialize( + _param = self._enterprise_boards_get_groups_serialize( + org_id=org_id, board_id=board_id, - board_member_id=board_member_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15616,8 +16692,10 @@ def remove_board_member( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "BoardUserGroupsPage", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -15628,10 +16706,12 @@ def remove_board_member( response_types_map=_response_types_map, ).data - def _remove_board_member_serialize( + def _enterprise_boards_get_groups_serialize( self, + org_id, board_id, - board_member_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -15650,11 +16730,19 @@ def _remove_board_member_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id if board_id is not None: _path_params["board_id"] = board_id - if board_member_id is not None: - _path_params["board_member_id"] = board_member_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -15666,8 +16754,8 @@ def _remove_board_member_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/members/{board_member_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/boards/{board_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15681,12 +16769,11 @@ def _remove_board_member_serialize( ) @validate_call - def share_board( + def enterprise_project_create_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board to which the board member belongs.") - ], - board_members_invite: BoardMembersInvite, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project.")], + create_project_user_groups_request: CreateProjectUserGroupsRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15696,15 +16783,17 @@ def share_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> InvitationResult: - """Share board + ) -> ProjectUserGroup: + """Create project user group assignments - Shares the board and Invites new members to collaborate on a board by sending an invitation email. Depending on the board's Sharing policy, there might be various scenarios where membership in the team is required in order to share the board with a user.

Required scope

boards:write

Rate limiting

Level 3
+ Shares a project with user groups with a specified role. Updates the role if already shared.

Required scope

organizations:groups:read
projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board to which the board member belongs. (required) - :type board_id: str - :param board_members_invite: (required) - :type board_members_invite: BoardMembersInvite + :param org_id: The ID of an organization. (required) + :type org_id: str + :param project_id: The ID of the project. (required) + :type project_id: str + :param create_project_user_groups_request: (required) + :type create_project_user_groups_request: CreateProjectUserGroupsRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15727,9 +16816,10 @@ def share_board( :return: Returns the result object. """ # noqa: E501 - _param = self._share_board_serialize( - board_id=board_id, - board_members_invite=board_members_invite, + _param = self._enterprise_project_create_group_serialize( + org_id=org_id, + project_id=project_id, + create_project_user_groups_request=create_project_user_groups_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15737,9 +16827,11 @@ def share_board( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "InvitationResult", + "200": "ProjectUserGroup", "400": None, - "404": None, + "401": None, + "403": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -15749,10 +16841,11 @@ def share_board( response_types_map=_response_types_map, ).data - def _share_board_serialize( + def _enterprise_project_create_group_serialize( self, - board_id, - board_members_invite, + org_id, + project_id, + create_project_user_groups_request, _request_auth, _content_type, _headers, @@ -15771,14 +16864,16 @@ def _share_board_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if board_members_invite is not None: - _body_params = board_members_invite + if create_project_user_groups_request is not None: + _body_params = create_project_user_groups_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -15796,7 +16891,7 @@ def _share_board_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id}/members", + resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15810,18 +16905,11 @@ def _share_board_serialize( ) @validate_call - def update_board_member( + def enterprise_project_delete_groups( self, - board_id: Annotated[ - StrictStr, - Field( - description="Unique identifier (ID) of the board for which you want to update the role of the board member." - ), - ], - board_member_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board member whose role you want to update.") - ], - board_member_changes: BoardMemberChanges, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15831,17 +16919,17 @@ def update_board_member( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardMemberWithLinks: - """Update board member + ) -> None: + """Delete project user group assignment - Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
+ Removes a user group from the specified project.

Required scope

organizations:groups:read
projects:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board for which you want to update the role of the board member. (required) - :type board_id: str - :param board_member_id: Unique identifier (ID) of the board member whose role you want to update. (required) - :type board_member_id: str - :param board_member_changes: (required) - :type board_member_changes: BoardMemberChanges + :param org_id: The ID of an organization. (required) + :type org_id: str + :param project_id: The ID of the project. (required) + :type project_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15864,10 +16952,10 @@ def update_board_member( :return: Returns the result object. """ # noqa: E501 - _param = self._update_board_member_serialize( - board_id=board_id, - board_member_id=board_member_id, - board_member_changes=board_member_changes, + _param = self._enterprise_project_delete_groups_serialize( + org_id=org_id, + project_id=project_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -15875,9 +16963,12 @@ def update_board_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardMemberWithLinks", + "204": None, "400": None, + "401": None, + "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -15887,11 +16978,11 @@ def update_board_member( response_types_map=_response_types_map, ).data - def _update_board_member_serialize( + def _enterprise_project_delete_groups_serialize( self, - board_id, - board_member_id, - board_member_changes, + org_id, + project_id, + group_id, _request_auth, _content_type, _headers, @@ -15910,34 +17001,23 @@ def _update_board_member_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if board_member_id is not None: - _path_params["board_member_id"] = board_member_id - # process the query parameters - # process the header parameters - # process the form parameters - # process the body parameter - if board_member_changes is not None: - _body_params = board_member_changes - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + if org_id is not None: + _path_params["org_id"] = org_id + if project_id is not None: + _path_params["project_id"] = project_id + if group_id is not None: + _path_params["group_id"] = group_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/members/{board_member_id}", + method="DELETE", + resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -15951,12 +17031,20 @@ def _update_board_member_serialize( ) @validate_call - def copy_board( + def enterprise_projects_get_groups( self, - copy_from: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board that you want to copy.") - ], - copy_board_changes: Optional[CopyBoardChanges] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + project_id: Annotated[StrictStr, Field(description="The ID of the project.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of user groups in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -15966,15 +17054,19 @@ def copy_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardWithLinksAndWithoutProject: - """Copy board + ) -> ProjectUserGroupsPage: + """Get project user group assignments - Creates a copy of an existing board. You can also update the name, description, sharing policy, and permissions policy for the new board in the request body.

Required scope

boards:write

Rate limiting

Level 4
+ Retrieves information about user groups invited to the specified project.

Required scope

organizations:groups:read
projects:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param copy_from: Unique identifier (ID) of the board that you want to copy. (required) - :type copy_from: str - :param copy_board_changes: - :type copy_board_changes: CopyBoardChanges + :param org_id: The ID of an organization. (required) + :type org_id: str + :param project_id: The ID of the project. (required) + :type project_id: str + :param limit: The maximum number of user groups in the result list. + :type limit: int + :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -15997,9 +17089,11 @@ def copy_board( :return: Returns the result object. """ # noqa: E501 - _param = self._copy_board_serialize( - copy_from=copy_from, - copy_board_changes=copy_board_changes, + _param = self._enterprise_projects_get_groups_serialize( + org_id=org_id, + project_id=project_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16007,10 +17101,11 @@ def copy_board( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "BoardWithLinksAndWithoutProject", + "200": "ProjectUserGroupsPage", "400": None, + "401": None, + "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -16020,10 +17115,12 @@ def copy_board( response_types_map=_response_types_map, ).data - def _copy_board_serialize( + def _enterprise_projects_get_groups_serialize( self, - copy_from, - copy_board_changes, + org_id, + project_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -16042,34 +17139,32 @@ def _copy_board_serialize( _body_params: Optional[bytes] = None # process the path parameters + if org_id is not None: + _path_params["org_id"] = org_id + if project_id is not None: + _path_params["project_id"] = project_id # process the query parameters - if copy_from is not None: + if limit is not None: - _query_params.append(("copy_from", copy_from)) + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) # process the header parameters # process the form parameters # process the body parameter - if copy_board_changes is not None: - _body_params = copy_board_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/v2/boards", + method="GET", + resource_path="/v2/orgs/{org_id}/projects/{project_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16083,9 +17178,12 @@ def _copy_board_serialize( ) @validate_call - def create_board( + def create_sticky_note_item( self, - board_changes: Optional[BoardChanges] = None, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + ], + sticky_note_create_request: StickyNoteCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16095,13 +17193,15 @@ def create_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardWithLinks: - """Create board + ) -> StickyNoteItem: + """Create sticky note item - Creates a board with the specified name and sharing policies.

Note

You can only create up to 3 team boards with the free plan.

Required scope

boards:write

Rate limiting

Level 3
+ Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_changes: - :type board_changes: BoardChanges + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param sticky_note_create_request: (required) + :type sticky_note_create_request: StickyNoteCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16124,8 +17224,9 @@ def create_board( :return: Returns the result object. """ # noqa: E501 - _param = self._create_board_serialize( - board_changes=board_changes, + _param = self._create_sticky_note_item_serialize( + board_id=board_id, + sticky_note_create_request=sticky_note_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16133,10 +17234,9 @@ def create_board( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "BoardWithLinks", + "201": "StickyNoteItem", "400": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -16146,9 +17246,10 @@ def create_board( response_types_map=_response_types_map, ).data - def _create_board_serialize( + def _create_sticky_note_item_serialize( self, - board_changes, + board_id, + sticky_note_create_request, _request_auth, _content_type, _headers, @@ -16167,12 +17268,14 @@ def _create_board_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if board_changes is not None: - _body_params = board_changes + if sticky_note_create_request is not None: + _body_params = sticky_note_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -16190,7 +17293,7 @@ def _create_board_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards", + resource_path="/v2/boards/{board_id}/sticky_notes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16204,11 +17307,12 @@ def _create_board_serialize( ) @validate_call - def delete_board( + def delete_sticky_note_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board that you want to delete.") + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16219,12 +17323,14 @@ def delete_board( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Delete board + """Delete sticky note item - Deletes a board. Deleted boards go to Trash (on paid plans) and can be restored via UI within 90 days after deletion.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board that you want to delete. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16247,8 +17353,9 @@ def delete_board( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_board_serialize( + _param = self._delete_sticky_note_item_serialize( board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16259,7 +17366,6 @@ def delete_board( "204": "object", "400": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -16269,9 +17375,10 @@ def delete_board( response_types_map=_response_types_map, ).data - def _delete_board_serialize( + def _delete_sticky_note_item_serialize( self, board_id, + item_id, _request_auth, _content_type, _headers, @@ -16292,6 +17399,8 @@ def _delete_board_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters @@ -16305,7 +17414,7 @@ def _delete_board_serialize( return self.api_client.param_serialize( method="DELETE", - resource_path="/v2/boards/{board_id}", + resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16319,15 +17428,15 @@ def _delete_board_serialize( ) @validate_call - def get_boards( + def get_sticky_note_item( self, - team_id: Optional[StrictStr] = None, - project_id: Optional[StrictStr] = None, - query: Optional[Annotated[str, Field(strict=True, max_length=500)]] = None, - owner: Optional[StrictStr] = None, - limit: Optional[Annotated[str, Field(strict=True)]] = None, - offset: Optional[StrictStr] = None, - sort: Optional[StrictStr] = None, + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16337,25 +17446,15 @@ def get_boards( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardsPagedResponse: - """Get boards + ) -> StickyNoteItem: + """Get sticky note item - Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters. Customize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards. If you're an Enterprise customer with Company Admin permissions: - Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins). - Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific sticky note item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param team_id: - :type team_id: str - :param project_id: - :type project_id: str - :param query: - :type query: str - :param owner: - :type owner: str - :param limit: - :type limit: str - :param offset: - :type offset: str - :param sort: - :type sort: str + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16378,14 +17477,9 @@ def get_boards( :return: Returns the result object. """ # noqa: E501 - _param = self._get_boards_serialize( - team_id=team_id, - project_id=project_id, - query=query, - owner=owner, - limit=limit, - offset=offset, - sort=sort, + _param = self._get_sticky_note_item_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16393,7 +17487,7 @@ def get_boards( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardsPagedResponse", + "200": "StickyNoteItem", "400": None, "404": None, "429": None, @@ -16405,62 +17499,33 @@ def get_boards( response_types_map=_response_types_map, ).data - def _get_boards_serialize( + def _get_sticky_note_item_serialize( self, - team_id, - project_id, - query, - owner, - limit, - offset, - sort, - _request_auth, - _content_type, - _headers, - _host_index, - ) -> RequestSerialized: - - _host = None - - _collection_formats: Dict[str, str] = {} - - _path_params: Dict[str, str] = {} - _query_params: List[Tuple[str, str]] = [] - _header_params: Dict[str, Optional[str]] = _headers or {} - _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, str] = {} - _body_params: Optional[bytes] = None - - # process the path parameters - # process the query parameters - if team_id is not None: - - _query_params.append(("team_id", team_id)) - - if project_id is not None: - - _query_params.append(("project_id", project_id)) - - if query is not None: - - _query_params.append(("query", query)) - - if owner is not None: - - _query_params.append(("owner", owner)) - - if limit is not None: - - _query_params.append(("limit", limit)) - - if offset is not None: + board_id, + item_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: - _query_params.append(("offset", offset)) + _host = None - if sort is not None: + _collection_formats: Dict[str, str] = {} - _query_params.append(("sort", sort)) + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, str] = {} + _body_params: Optional[bytes] = None + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id + # process the query parameters # process the header parameters # process the form parameters # process the body parameter @@ -16473,7 +17538,7 @@ def _get_boards_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards", + resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16487,11 +17552,13 @@ def _get_boards_serialize( ) @validate_call - def get_specific_board( + def update_sticky_note_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board that you want to retrieve.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + sticky_note_update_request: StickyNoteUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16501,13 +17568,17 @@ def get_specific_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardWithLinksAndLastOpened: - """Get specific board + ) -> StickyNoteItem: + """Update sticky note item - Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
+ Updates a sticky note item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board that you want to retrieve. (required) + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param sticky_note_update_request: (required) + :type sticky_note_update_request: StickyNoteUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16530,8 +17601,10 @@ def get_specific_board( :return: Returns the result object. """ # noqa: E501 - _param = self._get_specific_board_serialize( + _param = self._update_sticky_note_item_serialize( board_id=board_id, + item_id=item_id, + sticky_note_update_request=sticky_note_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16539,9 +17612,10 @@ def get_specific_board( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardWithLinksAndLastOpened", + "200": "StickyNoteItem", "400": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -16551,9 +17625,11 @@ def get_specific_board( response_types_map=_response_types_map, ).data - def _get_specific_board_serialize( + def _update_sticky_note_item_serialize( self, board_id, + item_id, + sticky_note_update_request, _request_auth, _content_type, _headers, @@ -16574,20 +17650,32 @@ def _get_specific_board_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if sticky_note_update_request is not None: + _body_params = sticky_note_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16601,12 +17689,11 @@ def _get_specific_board_serialize( ) @validate_call - def update_board( + def enterprise_delete_team_member( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board that you want to update.") - ], - board_changes: BoardChanges, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16616,15 +17703,17 @@ def update_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardWithLinks: - """Update board + ) -> None: + """Delete team member from team - Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes team member from team by id.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board that you want to update. (required) - :type board_id: str - :param board_changes: (required) - :type board_changes: BoardChanges + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param member_id: The id of the Team Member (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16647,9 +17736,10 @@ def update_board( :return: Returns the result object. """ # noqa: E501 - _param = self._update_board_serialize( - board_id=board_id, - board_changes=board_changes, + _param = self._enterprise_delete_team_member_serialize( + org_id=org_id, + team_id=team_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16657,9 +17747,10 @@ def update_board( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardWithLinks", - "202": None, + "204": None, "400": None, + "401": None, + "403": None, "404": None, "409": None, "429": None, @@ -16671,10 +17762,11 @@ def update_board( response_types_map=_response_types_map, ).data - def _update_board_serialize( + def _enterprise_delete_team_member_serialize( self, - board_id, - board_changes, + org_id, + team_id, + member_id, _request_auth, _content_type, _headers, @@ -16693,32 +17785,23 @@ def _update_board_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if board_changes is not None: - _body_params = board_changes - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}", + method="DELETE", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16732,12 +17815,11 @@ def _update_board_serialize( ) @validate_call - def create_card_item( + def enterprise_get_team_member( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - card_create_request: CardCreateRequest, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16747,15 +17829,17 @@ def create_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CardItem: - """Create card item + ) -> TeamMember: + """Get team member - Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves team member by id.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param card_create_request: (required) - :type card_create_request: CardCreateRequest + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param member_id: The id of the Team Member (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16778,9 +17862,10 @@ def create_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_card_item_serialize( - board_id=board_id, - card_create_request=card_create_request, + _param = self._enterprise_get_team_member_serialize( + org_id=org_id, + team_id=team_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16788,8 +17873,10 @@ def create_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "CardItem", + "200": "TeamMember", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -16800,10 +17887,11 @@ def create_card_item( response_types_map=_response_types_map, ).data - def _create_card_item_serialize( + def _enterprise_get_team_member_serialize( self, - board_id, - card_create_request, + org_id, + team_id, + member_id, _request_auth, _content_type, _headers, @@ -16822,32 +17910,26 @@ def _create_card_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if card_create_request is not None: - _body_params = card_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/cards", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16861,12 +17943,23 @@ def _create_card_item_serialize( ) @validate_call - def delete_card_item( + def enterprise_get_team_members( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." + ), + ] = None, + role: Annotated[ + Optional[StrictStr], + Field( + description=' Role query. Filters members by role using full word match. Accepted values are: * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. * "non_team": External user, non-team user. * "team_guest": (Deprecated) Team-guest user, user with access only to a team without access to organization. ' + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -16876,15 +17969,21 @@ def delete_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete card item + ) -> TeamMembersPage: + """List team members - Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves team members by cursor.

Required scope

organizations:teams:read

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param limit: + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str + :param role: Role query. Filters members by role using full word match. Accepted values are: * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. * \"non_team\": External user, non-team user. * \"team_guest\": (Deprecated) Team-guest user, user with access only to a team without access to organization. + :type role: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -16907,9 +18006,12 @@ def delete_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_card_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_get_team_members_serialize( + org_id=org_id, + team_id=team_id, + limit=limit, + cursor=cursor, + role=role, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -16917,8 +18019,10 @@ def delete_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "TeamMembersPage", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -16929,10 +18033,13 @@ def delete_card_item( response_types_map=_response_types_map, ).data - def _delete_card_item_serialize( + def _enterprise_get_team_members_serialize( self, - board_id, - item_id, + org_id, + team_id, + limit, + cursor, + role, _request_auth, _content_type, _headers, @@ -16951,11 +18058,23 @@ def _delete_card_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if role is not None: + + _query_params.append(("role", role)) + # process the header parameters # process the form parameters # process the body parameter @@ -16967,8 +18086,8 @@ def _delete_card_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/cards/{item_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -16982,15 +18101,11 @@ def _delete_card_item_serialize( ) @validate_call - def get_card_item( + def enterprise_invite_team_member( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + team_member_invite: TeamMemberInvite, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17000,15 +18115,17 @@ def get_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CardItem: - """Get card item + ) -> TeamMember: + """Invite team members - Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
+ Invites a new Miro user to an existing team. The user must exist in your Miro organization. Users who do not exist in your Miro organization can be invited to the team via [SCIM](https://developers.miro.com/docs/scim) and an external identity provider, such as Okta or Azure Active Directory.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param team_member_invite: (required) + :type team_member_invite: TeamMemberInvite :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17031,9 +18148,10 @@ def get_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_card_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_invite_team_member_serialize( + org_id=org_id, + team_id=team_id, + team_member_invite=team_member_invite, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17041,9 +18159,12 @@ def get_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CardItem", + "201": "TeamMember", "400": None, + "401": None, + "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -17053,10 +18174,11 @@ def get_card_item( response_types_map=_response_types_map, ).data - def _get_card_item_serialize( + def _enterprise_invite_team_member_serialize( self, - board_id, - item_id, + org_id, + team_id, + team_member_invite, _request_auth, _content_type, _headers, @@ -17075,24 +18197,34 @@ def _get_card_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if team_member_invite is not None: + _body_params = team_member_invite # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/cards/{item_id}", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17106,13 +18238,12 @@ def _get_card_item_serialize( ) @validate_call - def update_card_item( + def enterprise_update_team_member( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - card_update_request: CardUpdateRequest, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], + team_member_changes: TeamMemberChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17122,17 +18253,19 @@ def update_card_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> CardItem: - """Update card item + ) -> TeamMember: + """Update team member - Updates a card item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Updates team member role in team by id.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param card_update_request: (required) - :type card_update_request: CardUpdateRequest + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param member_id: The id of the Team Member (required) + :type member_id: str + :param team_member_changes: (required) + :type team_member_changes: TeamMemberChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17155,10 +18288,11 @@ def update_card_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_card_item_serialize( - board_id=board_id, - item_id=item_id, - card_update_request=card_update_request, + _param = self._enterprise_update_team_member_serialize( + org_id=org_id, + team_id=team_id, + member_id=member_id, + team_member_changes=team_member_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17166,8 +18300,10 @@ def update_card_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CardItem", + "200": "TeamMember", "400": None, + "401": None, + "403": None, "404": None, "409": None, "429": None, @@ -17179,11 +18315,12 @@ def update_card_item( response_types_map=_response_types_map, ).data - def _update_card_item_serialize( + def _enterprise_update_team_member_serialize( self, - board_id, - item_id, - card_update_request, + org_id, + team_id, + member_id, + team_member_changes, _request_auth, _content_type, _headers, @@ -17202,16 +18339,18 @@ def _update_card_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if card_update_request is not None: - _body_params = card_update_request + if team_member_changes is not None: + _body_params = team_member_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -17229,7 +18368,7 @@ def _update_card_item_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/v2/boards/{board_id}/cards/{item_id}", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17243,13 +18382,9 @@ def _update_card_item_serialize( ) @validate_call - def create_connector( + def enterprise_get_default_team_settings( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board for which you want to create the connector."), - ], - connector_creation_data: ConnectorCreationData, + org_id: Annotated[StrictStr, Field(description="The id of an Organization.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17259,15 +18394,13 @@ def create_connector( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ConnectorWithLinks: - """Create connector + ) -> TeamSettings: + """Get default team settings - Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves default team settings of an existing organization.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board for which you want to create the connector. (required) - :type board_id: str - :param connector_creation_data: (required) - :type connector_creation_data: ConnectorCreationData + :param org_id: The id of an Organization. (required) + :type org_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17290,9 +18423,8 @@ def create_connector( :return: Returns the result object. """ # noqa: E501 - _param = self._create_connector_serialize( - board_id=board_id, - connector_creation_data=connector_creation_data, + _param = self._enterprise_get_default_team_settings_serialize( + org_id=org_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17300,8 +18432,10 @@ def create_connector( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ConnectorWithLinks", + "200": "TeamSettings", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -17312,10 +18446,9 @@ def create_connector( response_types_map=_response_types_map, ).data - def _create_connector_serialize( + def _enterprise_get_default_team_settings_serialize( self, - board_id, - connector_creation_data, + org_id, _request_auth, _content_type, _headers, @@ -17334,32 +18467,22 @@ def _create_connector_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if connector_creation_data is not None: - _body_params = connector_creation_data # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/connectors", + method="GET", + resource_path="/v2/orgs/{org_id}/default_teams_settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17373,15 +18496,10 @@ def _create_connector_serialize( ) @validate_call - def delete_connector( + def enterprise_get_team_settings( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to delete the connector."), - ], - connector_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the connector that you want to delete.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17391,15 +18509,15 @@ def delete_connector( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete connector + ) -> TeamSettings: + """Get team settings - Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves team settings of an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete the connector. (required) - :type board_id: str - :param connector_id: Unique identifier (ID) of the connector that you want to delete. (required) - :type connector_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17420,11 +18538,11 @@ def delete_connector( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 - - _param = self._delete_connector_serialize( - board_id=board_id, - connector_id=connector_id, + """ # noqa: E501 + + _param = self._enterprise_get_team_settings_serialize( + org_id=org_id, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17432,8 +18550,10 @@ def delete_connector( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "TeamSettings", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -17444,10 +18564,10 @@ def delete_connector( response_types_map=_response_types_map, ).data - def _delete_connector_serialize( + def _enterprise_get_team_settings_serialize( self, - board_id, - connector_id, + org_id, + team_id, _request_auth, _content_type, _headers, @@ -17466,10 +18586,10 @@ def _delete_connector_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if connector_id is not None: - _path_params["connector_id"] = connector_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters @@ -17482,8 +18602,8 @@ def _delete_connector_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/connectors/{connector_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17497,17 +18617,11 @@ def _delete_connector_serialize( ) @validate_call - def get_connector( + def enterprise_update_team_settings( self, - board_id: Annotated[ - StrictStr, - Field( - description="Unique identifier (ID) of the board from which you want to retrieve a specific connector." - ), - ], - connector_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the connector that you want to retrieve.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + team_settings_changes: TeamSettingsChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17517,15 +18631,17 @@ def get_connector( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ConnectorWithLinks: - """Get specific connector + ) -> TeamSettings: + """Update team settings - Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Updates team settings of an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 2

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific connector. (required) - :type board_id: str - :param connector_id: Unique identifier (ID) of the connector that you want to retrieve. (required) - :type connector_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param team_settings_changes: (required) + :type team_settings_changes: TeamSettingsChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17548,9 +18664,10 @@ def get_connector( :return: Returns the result object. """ # noqa: E501 - _param = self._get_connector_serialize( - board_id=board_id, - connector_id=connector_id, + _param = self._enterprise_update_team_settings_serialize( + org_id=org_id, + team_id=team_id, + team_settings_changes=team_settings_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17558,9 +18675,12 @@ def get_connector( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ConnectorWithLinks", + "200": "TeamSettings", "400": None, + "401": None, + "403": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -17570,10 +18690,11 @@ def get_connector( response_types_map=_response_types_map, ).data - def _get_connector_serialize( + def _enterprise_update_team_settings_serialize( self, - board_id, - connector_id, + org_id, + team_id, + team_settings_changes, _request_auth, _content_type, _headers, @@ -17592,24 +18713,34 @@ def _get_connector_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if connector_id is not None: - _path_params["connector_id"] = connector_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if team_settings_changes is not None: + _body_params = team_settings_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/connectors/{connector_id}", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17623,16 +18754,11 @@ def _get_connector_serialize( ) @validate_call - def get_connectors( + def enterprise_teams_create_group( self, - board_id: Annotated[ - StrictStr, - Field( - description="Unique identifier (ID) of the board from which you want to retrieve a list of connectors." - ), - ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - cursor: Optional[StrictStr] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + create_team_group_request: CreateTeamGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17642,17 +18768,17 @@ def get_connectors( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ConnectorsCursorPaged: - """Get connectors + ) -> TeamGroup: + """Create user group to team connection - Retrieves a list of connectors for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Adds a user group to a team in an organization.

Required scope

organizations:groups:read
organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

' - :param board_id: Unique identifier (ID) of the board from which you want to retrieve a list of connectors. (required) - :type board_id: str - :param limit: - :type limit: str - :param cursor: - :type cursor: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param create_team_group_request: (required) + :type create_team_group_request: CreateTeamGroupRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17675,10 +18801,10 @@ def get_connectors( :return: Returns the result object. """ # noqa: E501 - _param = self._get_connectors_serialize( - board_id=board_id, - limit=limit, - cursor=cursor, + _param = self._enterprise_teams_create_group_serialize( + org_id=org_id, + team_id=team_id, + create_team_group_request=create_team_group_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17686,9 +18812,11 @@ def get_connectors( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ConnectorsCursorPaged", + "201": "TeamGroup", "400": None, - "404": None, + "401": None, + "403": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -17698,11 +18826,11 @@ def get_connectors( response_types_map=_response_types_map, ).data - def _get_connectors_serialize( + def _enterprise_teams_create_group_serialize( self, - board_id, - limit, - cursor, + org_id, + team_id, + create_team_group_request, _request_auth, _content_type, _headers, @@ -17721,30 +18849,34 @@ def _get_connectors_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter + if create_team_group_request is not None: + _body_params = create_team_group_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/connectors", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17758,16 +18890,11 @@ def _get_connectors_serialize( ) @validate_call - def update_connector( + def enterprise_teams_delete_group( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board for which you want to update the connector."), - ], - connector_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the connector that you want to update.") - ], - connector_changes_data: ConnectorChangesData, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17777,17 +18904,17 @@ def update_connector( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ConnectorWithLinks: - """Update connector + ) -> None: + """Delete user group to team connection - Updates a connector on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Removes a user group from a team in an existing organization.

Required scope

organizations:groups:read
organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board for which you want to update the connector. (required) - :type board_id: str - :param connector_id: Unique identifier (ID) of the connector that you want to update. (required) - :type connector_id: str - :param connector_changes_data: (required) - :type connector_changes_data: ConnectorChangesData + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17810,10 +18937,10 @@ def update_connector( :return: Returns the result object. """ # noqa: E501 - _param = self._update_connector_serialize( - board_id=board_id, - connector_id=connector_id, - connector_changes_data=connector_changes_data, + _param = self._enterprise_teams_delete_group_serialize( + org_id=org_id, + team_id=team_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17821,8 +18948,10 @@ def update_connector( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ConnectorWithLinks", + "204": None, "400": None, + "401": None, + "403": None, "404": None, "409": None, "429": None, @@ -17834,11 +18963,11 @@ def update_connector( response_types_map=_response_types_map, ).data - def _update_connector_serialize( + def _enterprise_teams_delete_group_serialize( self, - board_id, - connector_id, - connector_changes_data, + org_id, + team_id, + group_id, _request_auth, _content_type, _headers, @@ -17857,34 +18986,23 @@ def _update_connector_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if connector_id is not None: - _path_params["connector_id"] = connector_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if connector_changes_data is not None: - _body_params = connector_changes_data - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] - return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/connectors/{connector_id}", + return self.api_client.param_serialize( + method="DELETE", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -17898,12 +19016,11 @@ def _update_connector_serialize( ) @validate_call - def create_doc_format_item( + def enterprise_teams_get_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - doc_format_create_request: DocFormatCreateRequest, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -17913,15 +19030,17 @@ def create_doc_format_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocFormatItem: - """Create doc format item + ) -> TeamGroup: + """Get user group of a team - Adds a doc format item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves information about a specific user group of a team.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param doc_format_create_request: (required) - :type doc_format_create_request: DocFormatCreateRequest + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -17944,9 +19063,10 @@ def create_doc_format_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_doc_format_item_serialize( - board_id=board_id, - doc_format_create_request=doc_format_create_request, + _param = self._enterprise_teams_get_group_serialize( + org_id=org_id, + team_id=team_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -17954,8 +19074,10 @@ def create_doc_format_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "DocFormatItem", + "200": "TeamGroup", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -17966,10 +19088,11 @@ def create_doc_format_item( response_types_map=_response_types_map, ).data - def _create_doc_format_item_serialize( + def _enterprise_teams_get_group_serialize( self, - board_id, - doc_format_create_request, + org_id, + team_id, + group_id, _request_auth, _content_type, _headers, @@ -17988,32 +19111,26 @@ def _create_doc_format_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if doc_format_create_request is not None: - _body_params = doc_format_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/docs", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18027,12 +19144,20 @@ def _create_doc_format_item_serialize( ) @validate_call - def delete_doc_format_item( + def enterprise_teams_get_groups( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of user groups in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18042,15 +19167,19 @@ def delete_doc_format_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete doc format item + ) -> TeamGroupsPage: + """List of user group to team connections - Deletes a doc format item from the board

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves the list of user groups that are part of a team in an organization.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param limit: The maximum number of user groups in the result list. + :type limit: int + :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18073,9 +19202,11 @@ def delete_doc_format_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_doc_format_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_teams_get_groups_serialize( + org_id=org_id, + team_id=team_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18083,9 +19214,10 @@ def delete_doc_format_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "TeamGroupsPage", "400": None, - "404": None, + "401": None, + "403": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -18095,10 +19227,12 @@ def delete_doc_format_item( response_types_map=_response_types_map, ).data - def _delete_doc_format_item_serialize( + def _enterprise_teams_get_groups_serialize( self, - board_id, - item_id, + org_id, + team_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -18117,11 +19251,19 @@ def _delete_doc_format_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -18133,8 +19275,8 @@ def _delete_doc_format_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/docs/{item_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18148,18 +19290,10 @@ def _delete_doc_format_item_serialize( ) @validate_call - def get_doc_format_item( + def enterprise_create_team( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], - text_content_type: Annotated[ - Optional[StrictStr], Field(description="Controls the contentType of the returned doc's content.") - ] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + create_team_request: CreateTeamRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18169,17 +19303,15 @@ def get_doc_format_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocFormatItem: - """Get doc format item + ) -> Team: + """Create team - Retrieves information for a specific doc format item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Creates a new team in an existing organization.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str - :param text_content_type: Controls the contentType of the returned doc's content. - :type text_content_type: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param create_team_request: (required) + :type create_team_request: CreateTeamRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18202,10 +19334,9 @@ def get_doc_format_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_doc_format_item_serialize( - board_id=board_id, - item_id=item_id, - text_content_type=text_content_type, + _param = self._enterprise_create_team_serialize( + org_id=org_id, + create_team_request=create_team_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18213,8 +19344,10 @@ def get_doc_format_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DocFormatItem", + "201": "Team", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -18225,11 +19358,10 @@ def get_doc_format_item( response_types_map=_response_types_map, ).data - def _get_doc_format_item_serialize( + def _enterprise_create_team_serialize( self, - board_id, - item_id, - text_content_type, + org_id, + create_team_request, _request_auth, _content_type, _headers, @@ -18248,28 +19380,32 @@ def _get_doc_format_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters - if text_content_type is not None: - - _query_params.append(("textContentType", text_content_type)) - # process the header parameters # process the form parameters # process the body parameter + if create_team_request is not None: + _body_params = create_team_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/docs/{item_id}", + method="POST", + resource_path="/v2/orgs/{org_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18283,15 +19419,10 @@ def _get_doc_format_item_serialize( ) @validate_call - def create_document_item_using_file_from_device( + def enterprise_delete_team( self, - board_id_platform_file_upload: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - resource: Annotated[ - Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") - ], - data: Optional[CreateDocumentItemUsingFileFromDeviceRequestData] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18301,17 +19432,15 @@ def create_document_item_using_file_from_device( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocumentItem: - """Create document item using file from device + ) -> None: + """Delete team - Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id_platform_file_upload: str - :param resource: Select a file to upload. Maximum file size is 6 MB. (required) - :type resource: bytearray - :param data: - :type data: CreateDocumentItemUsingFileFromDeviceRequestData + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18334,10 +19463,9 @@ def create_document_item_using_file_from_device( :return: Returns the result object. """ # noqa: E501 - _param = self._create_document_item_using_file_from_device_serialize( - board_id_platform_file_upload=board_id_platform_file_upload, - resource=resource, - data=data, + _param = self._enterprise_delete_team_serialize( + org_id=org_id, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18345,7 +19473,12 @@ def create_document_item_using_file_from_device( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "DocumentItem", + "204": None, + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -18354,11 +19487,10 @@ def create_document_item_using_file_from_device( response_types_map=_response_types_map, ).data - def _create_document_item_using_file_from_device_serialize( + def _enterprise_delete_team_serialize( self, - board_id_platform_file_upload, - resource, - data, + org_id, + team_id, _request_auth, _content_type, _headers, @@ -18377,34 +19509,21 @@ def _create_document_item_using_file_from_device_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_file_upload is not None: - _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters - if data is not None: - _form_params.append(("data", data)) - if resource is not None: - _files["resource"] = resource # process the body parameter - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id_PlatformFileUpload}/documents", + method="DELETE", + resource_path="/v2/orgs/{org_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18418,12 +19537,10 @@ def _create_document_item_using_file_from_device_serialize( ) @validate_call - def create_document_item_using_url( + def enterprise_get_team( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - document_create_request: DocumentCreateRequest, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18433,15 +19550,15 @@ def create_document_item_using_url( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocumentItem: - """Create document item using URL + ) -> Team: + """Get team - Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves team information for an existing team.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param document_create_request: (required) - :type document_create_request: DocumentCreateRequest + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18464,9 +19581,9 @@ def create_document_item_using_url( :return: Returns the result object. """ # noqa: E501 - _param = self._create_document_item_using_url_serialize( - board_id=board_id, - document_create_request=document_create_request, + _param = self._enterprise_get_team_serialize( + org_id=org_id, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18474,8 +19591,10 @@ def create_document_item_using_url( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "DocumentItem", + "200": "Team", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -18486,10 +19605,10 @@ def create_document_item_using_url( response_types_map=_response_types_map, ).data - def _create_document_item_using_url_serialize( + def _enterprise_get_team_serialize( self, - board_id, - document_create_request, + org_id, + team_id, _request_auth, _content_type, _headers, @@ -18508,32 +19627,24 @@ def _create_document_item_using_url_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if document_create_request is not None: - _body_params = document_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/documents", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18547,12 +19658,22 @@ def _create_document_item_using_url_serialize( ) @validate_call - def delete_document_item( + def enterprise_get_teams( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request." + ), + ] = None, + name: Annotated[ + Optional[StrictStr], + Field( + description='Name query. Filters teams by name using case insensitive partial match. A value "dev" will return both "Developer\'s team" and "Team for developers".' + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18562,15 +19683,19 @@ def delete_document_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete document item + ) -> TeamsPage: + """List teams - Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves list of teams in an existing organization.

Required scope

organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param limit: + :type limit: int + :param cursor: An indicator of the position of a page in the full set of results. To obtain the first page leave it empty. To obtain subsequent pages set it to the value returned in the cursor field of the previous request. + :type cursor: str + :param name: Name query. Filters teams by name using case insensitive partial match. A value \"dev\" will return both \"Developer's team\" and \"Team for developers\". + :type name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18593,9 +19718,11 @@ def delete_document_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_document_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_get_teams_serialize( + org_id=org_id, + limit=limit, + cursor=cursor, + name=name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18603,8 +19730,10 @@ def delete_document_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "TeamsPage", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -18615,10 +19744,12 @@ def delete_document_item( response_types_map=_response_types_map, ).data - def _delete_document_item_serialize( + def _enterprise_get_teams_serialize( self, - board_id, - item_id, + org_id, + limit, + cursor, + name, _request_auth, _content_type, _headers, @@ -18637,11 +19768,21 @@ def _delete_document_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if name is not None: + + _query_params.append(("name", name)) + # process the header parameters # process the form parameters # process the body parameter @@ -18653,8 +19794,8 @@ def _delete_document_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/documents/{item_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18668,15 +19809,11 @@ def _delete_document_item_serialize( ) @validate_call - def get_document_item( + def enterprise_update_team( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], + team_changes: TeamChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18686,15 +19823,17 @@ def get_document_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocumentItem: - """Get document item + ) -> Team: + """Update team - Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
+ Updates an existing team.

Required scope

organizations:teams:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param team_id: The ID of a team. (required) + :type team_id: str + :param team_changes: (required) + :type team_changes: TeamChanges :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18717,9 +19856,10 @@ def get_document_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_document_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_update_team_serialize( + org_id=org_id, + team_id=team_id, + team_changes=team_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18727,8 +19867,10 @@ def get_document_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DocumentItem", + "200": "Team", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -18739,10 +19881,11 @@ def get_document_item( response_types_map=_response_types_map, ).data - def _get_document_item_serialize( + def _enterprise_update_team_serialize( self, - board_id, - item_id, + org_id, + team_id, + team_changes, _request_auth, _content_type, _headers, @@ -18761,24 +19904,34 @@ def _get_document_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if team_changes is not None: + _body_params = team_changes # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/documents/{item_id}", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18792,16 +19945,12 @@ def _get_document_item_serialize( ) @validate_call - def update_document_item_using_file_from_device( + def create_text_item( self, - board_id_platform_file_upload: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - resource: Annotated[ - Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - data: Optional[UploadFileFromDeviceData] = None, + text_create_request: TextCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18811,19 +19960,15 @@ def update_document_item_using_file_from_device( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocumentItem: - """Update document item using file from device + ) -> TextItem: + """Create text item - Updates a document item on a board by using file from a device.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to update the item. (required) - :type board_id_platform_file_upload: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param resource: Select a file to upload. Maximum file size is 6 MB. (required) - :type resource: bytearray - :param data: - :type data: UploadFileFromDeviceData + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id: str + :param text_create_request: (required) + :type text_create_request: TextCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18846,11 +19991,9 @@ def update_document_item_using_file_from_device( :return: Returns the result object. """ # noqa: E501 - _param = self._update_document_item_using_file_from_device_serialize( - board_id_platform_file_upload=board_id_platform_file_upload, - item_id=item_id, - resource=resource, - data=data, + _param = self._create_text_item_serialize( + board_id=board_id, + text_create_request=text_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18858,7 +20001,10 @@ def update_document_item_using_file_from_device( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DocumentItem", + "201": "TextItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -18867,12 +20013,10 @@ def update_document_item_using_file_from_device( response_types_map=_response_types_map, ).data - def _update_document_item_using_file_from_device_serialize( + def _create_text_item_serialize( self, - board_id_platform_file_upload, - item_id, - resource, - data, + board_id, + text_create_request, _request_auth, _content_type, _headers, @@ -18891,18 +20035,14 @@ def _update_document_item_using_file_from_device_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_file_upload is not None: - _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload - if item_id is not None: - _path_params["item_id"] = item_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters # process the header parameters # process the form parameters - if data is not None: - _form_params.append(("data", data)) - if resource is not None: - _files["resource"] = resource # process the body parameter + if text_create_request is not None: + _body_params = text_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -18911,7 +20051,7 @@ def _update_document_item_using_file_from_device_serialize( if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -18919,8 +20059,8 @@ def _update_document_item_using_file_from_device_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/texts", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -18934,13 +20074,12 @@ def _update_document_item_using_file_from_device_serialize( ) @validate_call - def update_document_item_using_url( + def delete_text_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - document_update_request: DocumentUpdateRequest, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -18950,17 +20089,15 @@ def update_document_item_using_url( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> DocumentItem: - """Update document item using URL + ) -> object: + """Delete text item - Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) :type item_id: str - :param document_update_request: (required) - :type document_update_request: DocumentUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -18983,10 +20120,9 @@ def update_document_item_using_url( :return: Returns the result object. """ # noqa: E501 - _param = self._update_document_item_using_url_serialize( + _param = self._delete_text_item_serialize( board_id=board_id, item_id=item_id, - document_update_request=document_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -18994,10 +20130,9 @@ def update_document_item_using_url( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DocumentItem", + "204": "object", "400": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -19007,11 +20142,10 @@ def update_document_item_using_url( response_types_map=_response_types_map, ).data - def _update_document_item_using_url_serialize( + def _delete_text_item_serialize( self, board_id, item_id, - document_update_request, _request_auth, _content_type, _headers, @@ -19038,26 +20172,16 @@ def _update_document_item_using_url_serialize( # process the header parameters # process the form parameters # process the body parameter - if document_update_request is not None: - _body_params = document_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/documents/{item_id}", + method="DELETE", + resource_path="/v2/boards/{board_id}/texts/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19071,12 +20195,15 @@ def _update_document_item_using_url_serialize( ) @validate_call - def create_embed_item( + def get_text_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - embed_create_request: EmbedCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19086,15 +20213,15 @@ def create_embed_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> EmbedItem: - """Create embed item + ) -> TextItem: + """Get text item - Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str - :param embed_create_request: (required) - :type embed_create_request: EmbedCreateRequest + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19117,9 +20244,9 @@ def create_embed_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_embed_item_serialize( + _param = self._get_text_item_serialize( board_id=board_id, - embed_create_request=embed_create_request, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19127,7 +20254,7 @@ def create_embed_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "EmbedItem", + "200": "TextItem", "400": None, "404": None, "429": None, @@ -19139,10 +20266,10 @@ def create_embed_item( response_types_map=_response_types_map, ).data - def _create_embed_item_serialize( + def _get_text_item_serialize( self, board_id, - embed_create_request, + item_id, _request_auth, _content_type, _headers, @@ -19163,30 +20290,22 @@ def _create_embed_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if embed_create_request is not None: - _body_params = embed_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/embeds", + method="GET", + resource_path="/v2/boards/{board_id}/texts/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19200,12 +20319,13 @@ def _create_embed_item_serialize( ) @validate_call - def delete_embed_item( + def update_text_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + text_update_request: TextUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19215,15 +20335,17 @@ def delete_embed_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete embed item + ) -> TextItem: + """Update text item - Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Updates a text item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :param item_id: Unique identifier (ID) of the item that you want to update. (required) :type item_id: str + :param text_update_request: (required) + :type text_update_request: TextUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19246,9 +20368,10 @@ def delete_embed_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_embed_item_serialize( + _param = self._update_text_item_serialize( board_id=board_id, item_id=item_id, + text_update_request=text_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19256,9 +20379,10 @@ def delete_embed_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "TextItem", "400": None, "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -19268,10 +20392,11 @@ def delete_embed_item( response_types_map=_response_types_map, ).data - def _delete_embed_item_serialize( + def _update_text_item_serialize( self, board_id, item_id, + text_update_request, _request_auth, _content_type, _headers, @@ -19298,16 +20423,26 @@ def _delete_embed_item_serialize( # process the header parameters # process the form parameters # process the body parameter + if text_update_request is not None: + _body_params = text_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/embeds/{item_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/texts/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19321,15 +20456,9 @@ def _delete_embed_item_serialize( ) @validate_call - def get_embed_item( + def create_user( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + create_user_resource: CreateUserResource, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19339,15 +20468,13 @@ def get_embed_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> EmbedItem: - """Get embed item + ) -> UserResource: + """Create user - Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Creates a new user in the organization.


Note: All newly provisioned users are added to the default team. - :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param create_user_resource: (required) + :type create_user_resource: CreateUserResource :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19370,9 +20497,8 @@ def get_embed_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_embed_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._create_user_serialize( + create_user_resource=create_user_resource, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19380,10 +20506,15 @@ def get_embed_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "EmbedItem", + "201": "UserResource", "400": None, + "401": None, + "403": None, "404": None, + "409": None, + "413": None, "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -19392,10 +20523,9 @@ def get_embed_item( response_types_map=_response_types_map, ).data - def _get_embed_item_serialize( + def _create_user_serialize( self, - board_id, - item_id, + create_user_resource, _request_auth, _content_type, _headers, @@ -19414,24 +20544,32 @@ def _get_embed_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if create_user_resource is not None: + _body_params = create_user_resource # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type( + ["application/scim+json", "application/json"] + ) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/embeds/{item_id}", + method="POST", + resource_path="/Users", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19445,13 +20583,9 @@ def _get_embed_item_serialize( ) @validate_call - def update_embed_item( + def delete_user( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - embed_update_request: EmbedUpdateRequest, + id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19460,18 +20594,14 @@ def update_embed_item( _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, - _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> EmbedItem: - """Update embed item + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """Delete user - Updates an embed item on a board based on the data properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a single user from the organization.

Note: A user who is the last admin in the team or the last admin in the organization cannot be deleted. User must be a member in the organization to be deleted. Users that have guest role in the organization cannot be deleted.

After a user is deleted, the ownership of all the boards that belong to the deleted user is transferred to the oldest team member who currently has an admin role. - :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param embed_update_request: (required) - :type embed_update_request: EmbedUpdateRequest + :param id: User ID. A server-assigned, unique identifier for this user. (required) + :type id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19494,22 +20624,19 @@ def update_embed_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_embed_item_serialize( - board_id=board_id, - item_id=item_id, - embed_update_request=embed_update_request, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index, + _param = self._delete_user_serialize( + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "EmbedItem", + "204": None, "400": None, + "401": None, + "403": None, "404": None, "409": None, "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -19518,11 +20645,9 @@ def update_embed_item( response_types_map=_response_types_map, ).data - def _update_embed_item_serialize( + def _delete_user_serialize( self, - board_id, - item_id, - embed_update_request, + id, _request_auth, _content_type, _headers, @@ -19541,34 +20666,19 @@ def _update_embed_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if id is not None: + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if embed_update_request is not None: - _body_params = embed_update_request - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/embeds/{item_id}", + method="DELETE", + resource_path="/Users/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19582,12 +20692,15 @@ def _update_embed_item_serialize( ) @validate_call - def create_frame_item( + def get_user( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create a frame.") - ], - frame_create_request: FrameCreateRequest, + id: Annotated[StrictStr, Field(description="User ID of the user to be retrieved")], + attributes: Annotated[ + Optional[StrictStr], + Field( + description="A comma-separated list of attribute names to return in the response.


Example attributes - id, userName, displayName, name, userType, active, emails, photos, groups, roles.


Note: It is also possible to fetch attributes within complex attributes, for Example: emails.value" + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19597,15 +20710,15 @@ def create_frame_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> FrameItem: - """Create frame + ) -> UserResource: + """Get user - Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves a single user resource.

Note
: Returns only users that are members in the organization. It does not return users that are added in the organization as guests. - :param board_id: Unique identifier (ID) of the board where you want to create a frame. (required) - :type board_id: str - :param frame_create_request: (required) - :type frame_create_request: FrameCreateRequest + :param id: User ID of the user to be retrieved (required) + :type id: str + :param attributes: A comma-separated list of attribute names to return in the response.


Example attributes - id, userName, displayName, name, userType, active, emails, photos, groups, roles.


Note: It is also possible to fetch attributes within complex attributes, for Example: emails.value + :type attributes: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19628,9 +20741,9 @@ def create_frame_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_frame_item_serialize( - board_id=board_id, - frame_create_request=frame_create_request, + _param = self._get_user_serialize( + id=id, + attributes=attributes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19638,10 +20751,13 @@ def create_frame_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "FrameItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "UserResource", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -19650,10 +20766,10 @@ def create_frame_item( response_types_map=_response_types_map, ).data - def _create_frame_item_serialize( + def _get_user_serialize( self, - board_id, - frame_create_request, + id, + attributes, _request_auth, _content_type, _headers, @@ -19672,32 +20788,26 @@ def _create_frame_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if id is not None: + _path_params["id"] = id # process the query parameters + if attributes is not None: + + _query_params.append(("attributes", attributes)) + # process the header parameters # process the form parameters # process the body parameter - if frame_create_request is not None: - _body_params = frame_create_request # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/frames", + method="GET", + resource_path="/Users/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19711,14 +20821,44 @@ def _create_frame_item_serialize( ) @validate_call - def delete_frame_item( + def list_users( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the frame.") - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the frame that you want to delete.") - ], + attributes: Annotated[ + Optional[StrictStr], + Field( + description="A comma-separated list of attribute names to return in the response.

Example attributes: id, userName, displayName, name, userType, active, emails, photos, groups, roles. You can also retrieve attributes within complex attributes, for Example: emails.value. The API also supports sorting and the filter parameter." + ), + ] = None, + filter: Annotated[ + Optional[StrictStr], + Field( + description='You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical "and"
or = Logical "or"
not = "Not" function
() = Precedence grouping
The value must be passed within parenthesis.

Example filters:

For fetching users with user name as user@miro.com: userName eq "user@miro.com"

For fetching all active users in the organization: active eq true

For fetching users with "user" in their displayName: displayName co "user"

For fetching users that are member of a specific group (team): groups.value eq "3458764577585056871"

For fetching users that are not of userType Full: userType ne "Full"' + ), + ] = None, + start_index: Annotated[ + Optional[StrictInt], + Field( + description="Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1" + ), + ] = None, + count: Annotated[ + Optional[StrictInt], + Field( + description="Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12" + ), + ] = None, + sort_by: Annotated[ + Optional[StrictStr], + Field( + description="Specifies the attribute whose value will be used to order the response.

Example: sortBy=userName, sortBy=emails.value" + ), + ] = None, + sort_order: Annotated[ + Optional[StrictStr], + Field( + description="Defines the order in which the sortBy parameter is applied.

Example: sortOrder=ascending" + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19728,15 +20868,23 @@ def delete_frame_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete frame + ) -> UserListResponse: + """List users - Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves the list of users in your organization.

Note
: The API returns users that are members in the organization, it does not return users that are added in the organization as guests. - :param board_id: Unique identifier (ID) of the board from which you want to delete the frame. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the frame that you want to delete. (required) - :type item_id: str + :param attributes: A comma-separated list of attribute names to return in the response.

Example attributes: id, userName, displayName, name, userType, active, emails, photos, groups, roles. You can also retrieve attributes within complex attributes, for Example: emails.value. The API also supports sorting and the filter parameter. + :type attributes: str + :param filter: You can request a subset of resources by specifying the filter query parameter containing a filter expression. Attribute names and attribute operators used in filters are not case sensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value.
eq = equal
ne = not equal
co = contains
sw = starts with
ew = ends with
pr = preset (has value)
gt = greater than
ge = greater than or equal to
lt = less than
le = less than or equal to
and = Logical \"and\"
or = Logical \"or\"
not = \"Not\" function
() = Precedence grouping
The value must be passed within parenthesis.

Example filters:

For fetching users with user name as user@miro.com: userName eq \"user@miro.com\"

For fetching all active users in the organization: active eq true

For fetching users with \"user\" in their displayName: displayName co \"user\"

For fetching users that are member of a specific group (team): groups.value eq \"3458764577585056871\"

For fetching users that are not of userType Full: userType ne \"Full\" + :type filter: str + :param start_index: Use startIndex in combination with count query parameters to receive paginated results.

start index is 1-based.

Example: startIndex=1 + :type start_index: int + :param count: Specifies the maximum number of query results per page.

Use count in combination with startIndex query parameters to receive paginated results.

The count query parameter is set to 100 by default and the maximum value allowed for this parameter is 1000.

Example: count=12 + :type count: int + :param sort_by: Specifies the attribute whose value will be used to order the response.

Example: sortBy=userName, sortBy=emails.value + :type sort_by: str + :param sort_order: Defines the order in which the sortBy parameter is applied.

Example: sortOrder=ascending + :type sort_order: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19759,9 +20907,13 @@ def delete_frame_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_frame_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._list_users_serialize( + attributes=attributes, + filter=filter, + start_index=start_index, + count=count, + sort_by=sort_by, + sort_order=sort_order, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19769,10 +20921,13 @@ def delete_frame_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "UserListResponse", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -19781,10 +20936,14 @@ def delete_frame_item( response_types_map=_response_types_map, ).data - def _delete_frame_item_serialize( + def _list_users_serialize( self, - board_id, - item_id, + attributes, + filter, + start_index, + count, + sort_by, + sort_order, _request_auth, _content_type, _headers, @@ -19803,24 +20962,44 @@ def _delete_frame_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters + if attributes is not None: + + _query_params.append(("attributes", attributes)) + + if filter is not None: + + _query_params.append(("filter", filter)) + + if start_index is not None: + + _query_params.append(("startIndex", start_index)) + + if count is not None: + + _query_params.append(("count", count)) + + if sort_by is not None: + + _query_params.append(("sortBy", sort_by)) + + if sort_order is not None: + + _query_params.append(("sortOrder", sort_order)) + # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/frames/{item_id}", + method="GET", + resource_path="/Users", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19834,14 +21013,14 @@ def _delete_frame_item_serialize( ) @validate_call - def get_frame_item( + def patch_user( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board that contains the frame that you want to retrieve"), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the frame that you want to retrieve.") + id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], + patch_user_resource: Annotated[ + PatchUserResource, + Field( + description='Payload to update user information.

The body of a PATCH request must contain the attribute `Operations`, and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one "op" member.' + ), ], _request_timeout: Union[ None, @@ -19852,15 +21031,15 @@ def get_frame_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> FrameItem: - """Get frame + ) -> UserResource: + """Patch user - Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Updates an existing user resource, overwriting values for specified attributes. Attributes that are not provided will remain unchanged. PATCH operation only updates the fields provided.

Note: If the user is not a member in the organization, they cannot be updated. Additionally, users with guest role in the organization cannot be updated. - :param board_id: Unique identifier (ID) of the board that contains the frame that you want to retrieve (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the frame that you want to retrieve. (required) - :type item_id: str + :param id: User ID. A server-assigned, unique identifier for this user. (required) + :type id: str + :param patch_user_resource: Payload to update user information.

The body of a PATCH request must contain the attribute `Operations`, and its value is an array of one or more PATCH operations. Each PATCH operation object must have exactly one \"op\" member. (required) + :type patch_user_resource: PatchUserResource :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -19883,9 +21062,9 @@ def get_frame_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_frame_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._patch_user_serialize( + id=id, + patch_user_resource=patch_user_resource, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -19893,10 +21072,14 @@ def get_frame_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FrameItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "UserResource", + "400": None, + "401": None, + "403": None, + "404": None, + "409": None, + "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -19905,10 +21088,10 @@ def get_frame_item( response_types_map=_response_types_map, ).data - def _get_frame_item_serialize( + def _patch_user_serialize( self, - board_id, - item_id, + id, + patch_user_resource, _request_auth, _content_type, _headers, @@ -19927,24 +21110,34 @@ def _get_frame_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if id is not None: + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if patch_user_resource is not None: + _body_params = patch_user_resource # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type( + ["application/scim+json", "application/json"] + ) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/frames/{item_id}", + method="PATCH", + resource_path="/Users/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -19958,15 +21151,10 @@ def _get_frame_item_serialize( ) @validate_call - def update_frame_item( + def replace_user( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the frame.") - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the frame that you want to update.") - ], - frame_update_request: FrameUpdateRequest, + id: Annotated[StrictStr, Field(description="User ID. A server-assigned, unique identifier for this user.")], + user_resource: Annotated[UserResource, Field(description="Payload to update user information.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -19976,17 +21164,15 @@ def update_frame_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> FrameItem: - """Update frame + ) -> UserResource: + """Replace user - Updates a frame on a board based on the data, style, or geometry properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Updates an existing user resource. This is the easiest way to replace user information.

If the user is deactivated,
userName, userType, and roles.value cannot be updated.
emails.value, emails.display, emails.primary get ignored and do not return any error.

Note: If the user is not a member in the organization, they cannot be updated. Additionally, users with guest role in the organization cannot be updated. - :param board_id: Unique identifier (ID) of the board where you want to update the frame. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the frame that you want to update. (required) - :type item_id: str - :param frame_update_request: (required) - :type frame_update_request: FrameUpdateRequest + :param id: User ID. A server-assigned, unique identifier for this user. (required) + :type id: str + :param user_resource: Payload to update user information. (required) + :type user_resource: UserResource :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20009,10 +21195,9 @@ def update_frame_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_frame_item_serialize( - board_id=board_id, - item_id=item_id, - frame_update_request=frame_update_request, + _param = self._replace_user_serialize( + id=id, + user_resource=user_resource, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20020,11 +21205,14 @@ def update_frame_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FrameItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "409": "UpdateFrameItem409Response", - "429": "CreateFrameItem400Response", + "200": "UserResource", + "400": None, + "401": None, + "403": None, + "404": None, + "409": None, + "429": None, + "500": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20033,11 +21221,10 @@ def update_frame_item( response_types_map=_response_types_map, ).data - def _update_frame_item_serialize( + def _replace_user_serialize( self, - board_id, - item_id, - frame_update_request, + id, + user_resource, _request_auth, _content_type, _headers, @@ -20056,25 +21243,25 @@ def _update_frame_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if id is not None: + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if frame_update_request is not None: - _body_params = frame_update_request + if user_resource is not None: + _body_params = user_resource # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/scim+json", "application/json"]) # set the HTTP header `Content-Type` if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = self.api_client.select_header_content_type( + ["application/scim+json", "application/json"] + ) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -20082,8 +21269,8 @@ def _update_frame_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/frames/{item_id}", + method="PUT", + resource_path="/Users/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20097,10 +21284,11 @@ def _update_frame_item_serialize( ) @validate_call - def create_group( + def enterprise_create_group_member( self, - board_id: StrictStr, - group: Group, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + create_group_member_request: CreateGroupMemberRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20110,15 +21298,17 @@ def create_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupResponseShort: - """Create group + ) -> GroupMember: + """Create user group member - Creates a group of items on a board. The group is created with the items that are passed in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a member to a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: (required) - :type board_id: str - :param group: (required) - :type group: Group + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str + :param create_group_member_request: (required) + :type create_group_member_request: CreateGroupMemberRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20141,9 +21331,10 @@ def create_group( :return: Returns the result object. """ # noqa: E501 - _param = self._create_group_serialize( - board_id=board_id, - group=group, + _param = self._enterprise_create_group_member_serialize( + org_id=org_id, + group_id=group_id, + create_group_member_request=create_group_member_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20151,10 +21342,12 @@ def create_group( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "GroupResponseShort", - "400": "GetAllGroups400Response", - "404": "GetAllGroups404Response", - "429": "GetAllGroups429Response", + "201": "GroupMember", + "400": None, + "401": None, + "403": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20163,10 +21356,11 @@ def create_group( response_types_map=_response_types_map, ).data - def _create_group_serialize( + def _enterprise_create_group_member_serialize( self, - board_id, - group, + org_id, + group_id, + create_group_member_request, _request_auth, _content_type, _headers, @@ -20185,14 +21379,16 @@ def _create_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if group is not None: - _body_params = group + if create_group_member_request is not None: + _body_params = create_group_member_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -20210,7 +21406,7 @@ def _create_group_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id}/groups", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20224,16 +21420,11 @@ def _create_group_serialize( ) @validate_call - def delete_group( + def enterprise_delete_group_member( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], - delete_items: Annotated[ - StrictBool, - Field( - description="Indicates whether the items should be removed. Set to `true` to delete items in the group." - ), - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + member_id: Annotated[StrictStr, Field(description="The ID of a group member.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20243,17 +21434,17 @@ def delete_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Deletes the group + ) -> None: + """Delete user group member - Deletes a group from a board. All the items in the group are deleted along with the group. Note - this endpoint will delete items which are locked as well.

Required scope

boards:write

Rate limiting

Level 3
+ Removes a member from a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param group_id: Unique identifier (ID) of the group. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) :type group_id: str - :param delete_items: Indicates whether the items should be removed. Set to `true` to delete items in the group. (required) - :type delete_items: bool + :param member_id: The ID of a group member. (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20276,21 +21467,23 @@ def delete_group( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_group_serialize( - board_id=board_id, + _param = self._enterprise_delete_group_member_serialize( + org_id=org_id, group_id=group_id, - delete_items=delete_items, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index, ) - - _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "UnGroup400Response", - "404": "UnGroup404Response", - "429": "UnGroup429Response", + + _response_types_map: Dict[str, Optional[str]] = { + "204": None, + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20299,11 +21492,11 @@ def delete_group( response_types_map=_response_types_map, ).data - def _delete_group_serialize( + def _enterprise_delete_group_member_serialize( self, - board_id, + org_id, group_id, - delete_items, + member_id, _request_auth, _content_type, _headers, @@ -20322,28 +21515,23 @@ def _delete_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id if group_id is not None: _path_params["group_id"] = group_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters - if delete_items is not None: - - _query_params.append(("delete_items", delete_items)) - # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="DELETE", - resource_path="/v2/boards/{board_id}/groups/{group_id}?", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20357,14 +21545,11 @@ def _delete_group_serialize( ) @validate_call - def get_all_groups( + def enterprise_get_group_member( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=50, strict=True, ge=10)]], - Field(description="The maximum number of items to return at one time, default is 10, maximum is 50."), - ] = None, - cursor: Optional[StrictStr] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + member_id: Annotated[StrictStr, Field(description="The ID of a group member.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20374,17 +21559,17 @@ def get_all_groups( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetAllGroups200Response: - """Get all groups on a board + ) -> GroupMember: + """Get user group member - Returns all the groups and the items of the respective groups within a specific board.
This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.
For example, if you set the `limit` query parameter to `10` and the board contains 20 items that are a part of a group, the first call will return information about the first 10 items in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Retrieves information about a user group member in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param limit: The maximum number of items to return at one time, default is 10, maximum is 50. - :type limit: int - :param cursor: - :type cursor: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str + :param member_id: The ID of a group member. (required) + :type member_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20407,10 +21592,10 @@ def get_all_groups( :return: Returns the result object. """ # noqa: E501 - _param = self._get_all_groups_serialize( - board_id=board_id, - limit=limit, - cursor=cursor, + _param = self._enterprise_get_group_member_serialize( + org_id=org_id, + group_id=group_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20418,10 +21603,12 @@ def get_all_groups( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GetAllGroups200Response", - "400": "GetAllGroups400Response", - "404": "GetAllGroups404Response", - "429": "GetAllGroups429Response", + "200": "GroupMember", + "400": None, + "401": None, + "403": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20430,11 +21617,11 @@ def get_all_groups( response_types_map=_response_types_map, ).data - def _get_all_groups_serialize( + def _enterprise_get_group_member_serialize( self, - board_id, - limit, - cursor, + org_id, + group_id, + member_id, _request_auth, _content_type, _headers, @@ -20453,17 +21640,13 @@ def _get_all_groups_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id + if member_id is not None: + _path_params["member_id"] = member_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters # process the body parameter @@ -20476,7 +21659,7 @@ def _get_all_groups_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/groups", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20490,10 +21673,20 @@ def _get_all_groups_serialize( ) @validate_call - def get_group_by_id( + def enterprise_get_group_members( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of members in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a member in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20503,15 +21696,19 @@ def get_group_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupResponseShort: - """Get a group by its ID + ) -> GroupMembersPage: + """List of user group members - Returns a list of items in a specific group.

Required scope

boards:read

Rate limiting

Level 2 per item ID + Retrieves the list of members who are part of a team in an existing organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param group_id: Unique identifier (ID) of the group. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) :type group_id: str + :param limit: The maximum number of members in the result list. + :type limit: int + :param cursor: A representation of the position of a member in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20534,9 +21731,11 @@ def get_group_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_group_by_id_serialize( - board_id=board_id, + _param = self._enterprise_get_group_members_serialize( + org_id=org_id, group_id=group_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20544,10 +21743,11 @@ def get_group_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupResponseShort", - "400": "GetAllGroups400Response", - "404": "GetAllGroups404Response", - "429": "GetAllGroups429Response", + "200": "GroupMembersPage", + "400": None, + "401": None, + "403": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20556,10 +21756,12 @@ def get_group_by_id( response_types_map=_response_types_map, ).data - def _get_group_by_id_serialize( + def _enterprise_get_group_members_serialize( self, - board_id, + org_id, group_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -20578,11 +21780,19 @@ def _get_group_by_id_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id if group_id is not None: _path_params["group_id"] = group_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -20595,7 +21805,7 @@ def _get_group_by_id_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/groups/{group_id}", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20609,15 +21819,11 @@ def _get_group_by_id_serialize( ) @validate_call - def get_items_by_group_id( + def enterprise_update_group_members( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - group_item_id: Annotated[StrictStr, Field(description="The ID of the group item to retrieve.")], - limit: Annotated[ - Optional[Annotated[int, Field(le=50, strict=True, ge=10)]], - Field(description="The maximum number of items to return at one time, default is 10, maximum is 50."), - ] = None, - cursor: Optional[StrictStr] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + update_user_group_members_request: UpdateUserGroupMembersRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20627,19 +21833,17 @@ def get_items_by_group_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetItemsByGroupId200Response: - """Get items of a group by ID + ) -> List[UpdateUserGroupMembersResultInner]: + """Bulk edit of membership in user group - Returns a list of items that are a part of any group, within a specific board.
This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.
For example, if you set the `limit` query parameter to `10` and the board contains 20 items that are a part of a group, the first call will return information about the first 10 items (not 10 groups) in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Add and remove members in one request. For example, remove user A and add user B. You can add or remove up to 500 users at a time.

Required scope

organizations:groups:write

Rate limiting

Level 1 per item. For example, if you want to add 10 users and remove 5, the rate limiting applicable will be 750 credits. This is because each user addition or deletion takes Level 1 rate limiting of 50 credits, so 15 * 50 = 750.

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param group_item_id: The ID of the group item to retrieve. (required) - :type group_item_id: str - :param limit: The maximum number of items to return at one time, default is 10, maximum is 50. - :type limit: int - :param cursor: - :type cursor: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str + :param update_user_group_members_request: (required) + :type update_user_group_members_request: UpdateUserGroupMembersRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20662,11 +21866,10 @@ def get_items_by_group_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_by_group_id_serialize( - board_id=board_id, - group_item_id=group_item_id, - limit=limit, - cursor=cursor, + _param = self._enterprise_update_group_members_serialize( + org_id=org_id, + group_id=group_id, + update_user_group_members_request=update_user_group_members_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20674,10 +21877,14 @@ def get_items_by_group_id( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GetItemsByGroupId200Response", - "400": "GetAllGroups400Response", - "404": "GetAllGroups404Response", - "429": "GetAllGroups429Response", + "207": "List[UpdateUserGroupMembersResultInner]", + "400": None, + "401": None, + "403": None, + "404": None, + "409": None, + "413": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20686,12 +21893,11 @@ def get_items_by_group_id( response_types_map=_response_types_map, ).data - def _get_items_by_group_id_serialize( + def _enterprise_update_group_members_serialize( self, - board_id, - group_item_id, - limit, - cursor, + org_id, + group_id, + update_user_group_members_request, _request_auth, _content_type, _headers, @@ -20710,34 +21916,34 @@ def _get_items_by_group_id_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - - if group_item_id is not None: - - _query_params.append(("group_item_id", group_item_id)) - # process the header parameters # process the form parameters # process the body parameter + if update_user_group_members_request is not None: + _body_params = update_user_group_members_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/groups/items", + method="PATCH", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20751,13 +21957,11 @@ def _get_items_by_group_id_serialize( ) @validate_call - def un_group( + def enterprise_groups_get_team( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], - delete_items: Annotated[ - Optional[StrictBool], Field(description="Indicates whether the items should be removed. By default, false.") - ] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + team_id: Annotated[StrictStr, Field(description="The ID of a team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20767,17 +21971,17 @@ def un_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Ungroup items + ) -> GroupTeam: + """Get user group team - Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves information of a team that the user group is a part of in an organization.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param group_id: Unique identifier (ID) of the group. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) :type group_id: str - :param delete_items: Indicates whether the items should be removed. By default, false. - :type delete_items: bool + :param team_id: The ID of a team. (required) + :type team_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20800,10 +22004,10 @@ def un_group( :return: Returns the result object. """ # noqa: E501 - _param = self._un_group_serialize( - board_id=board_id, + _param = self._enterprise_groups_get_team_serialize( + org_id=org_id, group_id=group_id, - delete_items=delete_items, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20811,10 +22015,11 @@ def un_group( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "UnGroup400Response", - "404": "UnGroup404Response", - "429": "UnGroup429Response", + "200": "GroupTeam", + "400": None, + "401": None, + "403": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20823,11 +22028,11 @@ def un_group( response_types_map=_response_types_map, ).data - def _un_group_serialize( + def _enterprise_groups_get_team_serialize( self, - board_id, + org_id, group_id, - delete_items, + team_id, _request_auth, _content_type, _headers, @@ -20846,15 +22051,13 @@ def _un_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id if group_id is not None: _path_params["group_id"] = group_id + if team_id is not None: + _path_params["team_id"] = team_id # process the query parameters - if delete_items is not None: - - _query_params.append(("delete_items", delete_items)) - # process the header parameters # process the form parameters # process the body parameter @@ -20866,8 +22069,8 @@ def _un_group_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/groups/{group_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -20881,11 +22084,20 @@ def _un_group_serialize( ) @validate_call - def update_group( + def enterprise_groups_get_teams( self, - board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], - group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], - group: Group, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of teams in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a team in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -20895,17 +22107,19 @@ def update_group( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GroupResponseShort: - """Updates a group with new items + ) -> GroupTeamsPage: + """Get teams of a user group - This endpoint updates an existing group by replacing it entirely with a new group. When the update is made, the original group is completely replaced, and a new group ID is assigned.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves the list of teams that the user group is a part of.

Required scope

organizations:groups:read
organizations:teams:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board. (required) - :type board_id: str - :param group_id: Unique identifier (ID) of the group. (required) + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) :type group_id: str - :param group: (required) - :type group: Group + :param limit: The maximum number of teams in the result list. + :type limit: int + :param cursor: A representation of the position of a team in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -20928,10 +22142,11 @@ def update_group( :return: Returns the result object. """ # noqa: E501 - _param = self._update_group_serialize( - board_id=board_id, + _param = self._enterprise_groups_get_teams_serialize( + org_id=org_id, group_id=group_id, - group=group, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -20939,10 +22154,11 @@ def update_group( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GroupResponseShort", - "400": "GetAllGroups400Response", - "404": "GetAllGroups404Response", - "429": "GetAllGroups429Response", + "200": "GroupTeamsPage", + "400": None, + "401": None, + "403": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -20951,11 +22167,12 @@ def update_group( response_types_map=_response_types_map, ).data - def _update_group_serialize( + def _enterprise_groups_get_teams_serialize( self, - board_id, + org_id, group_id, - group, + limit, + cursor, _request_auth, _content_type, _headers, @@ -20974,34 +22191,32 @@ def _update_group_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id if group_id is not None: _path_params["group_id"] = group_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter - if group is not None: - _body_params = group # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PUT", - resource_path="/v2/boards/{board_id}/groups/{group_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21015,15 +22230,10 @@ def _update_group_serialize( ) @validate_call - def create_image_item_using_local_file( + def enterprise_create_group( self, - board_id_platform_file_upload: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - resource: Annotated[ - Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") - ], - data: Optional[UploadFileFromDeviceData] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + create_group_request: CreateGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21033,17 +22243,15 @@ def create_image_item_using_local_file( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ImageItem: - """Create image item using file from device + ) -> Group: + """Create user group - Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
+ Creates a new user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id_platform_file_upload: str - :param resource: Select a file to upload. Maximum file size is 6 MB. (required) - :type resource: bytearray - :param data: - :type data: UploadFileFromDeviceData + :param org_id: The ID of an organization. (required) + :type org_id: str + :param create_group_request: (required) + :type create_group_request: CreateGroupRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21066,10 +22274,9 @@ def create_image_item_using_local_file( :return: Returns the result object. """ # noqa: E501 - _param = self._create_image_item_using_local_file_serialize( - board_id_platform_file_upload=board_id_platform_file_upload, - resource=resource, - data=data, + _param = self._enterprise_create_group_serialize( + org_id=org_id, + create_group_request=create_group_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21077,7 +22284,12 @@ def create_image_item_using_local_file( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ImageItem", + "201": "Group", + "400": None, + "401": None, + "403": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -21086,11 +22298,10 @@ def create_image_item_using_local_file( response_types_map=_response_types_map, ).data - def _create_image_item_using_local_file_serialize( + def _enterprise_create_group_serialize( self, - board_id_platform_file_upload, - resource, - data, + org_id, + create_group_request, _request_auth, _content_type, _headers, @@ -21109,16 +22320,14 @@ def _create_image_item_using_local_file_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_file_upload is not None: - _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters # process the header parameters # process the form parameters - if data is not None: - _form_params.append(("data", data)) - if resource is not None: - _files["resource"] = resource # process the body parameter + if create_group_request is not None: + _body_params = create_group_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -21127,7 +22336,7 @@ def _create_image_item_using_local_file_serialize( if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -21136,7 +22345,7 @@ def _create_image_item_using_local_file_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id_PlatformFileUpload}/images", + resource_path="/v2/orgs/{org_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21150,12 +22359,10 @@ def _create_image_item_using_local_file_serialize( ) @validate_call - def create_image_item_using_url( + def enterprise_delete_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - image_create_request: ImageCreateRequest, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21165,15 +22372,15 @@ def create_image_item_using_url( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ImageItem: - """Create image item using URL + ) -> None: + """Delete user group - Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a user group from an organization.

Required scope

organizations:groups:write

Rate limiting

Level 4

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param image_create_request: (required) - :type image_create_request: ImageCreateRequest + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21196,9 +22403,9 @@ def create_image_item_using_url( :return: Returns the result object. """ # noqa: E501 - _param = self._create_image_item_using_url_serialize( - board_id=board_id, - image_create_request=image_create_request, + _param = self._enterprise_delete_group_serialize( + org_id=org_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21206,8 +22413,10 @@ def create_image_item_using_url( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ImageItem", + "204": None, "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -21218,10 +22427,10 @@ def create_image_item_using_url( response_types_map=_response_types_map, ).data - def _create_image_item_using_url_serialize( + def _enterprise_delete_group_serialize( self, - board_id, - image_create_request, + org_id, + group_id, _request_auth, _content_type, _headers, @@ -21240,32 +22449,21 @@ def _create_image_item_using_url_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if image_create_request is not None: - _body_params = image_create_request - - # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/images", + method="DELETE", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21279,12 +22477,10 @@ def _create_image_item_using_url_serialize( ) @validate_call - def delete_image_item( + def enterprise_get_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21294,15 +22490,15 @@ def delete_image_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete image item + ) -> Group: + """Get user group - Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves a user group in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21325,9 +22521,9 @@ def delete_image_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_image_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_get_group_serialize( + org_id=org_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21335,8 +22531,10 @@ def delete_image_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "200": "Group", "400": None, + "401": None, + "403": None, "404": None, "429": None, } @@ -21347,10 +22545,10 @@ def delete_image_item( response_types_map=_response_types_map, ).data - def _delete_image_item_serialize( + def _enterprise_get_group_serialize( self, - board_id, - item_id, + org_id, + group_id, _request_auth, _content_type, _headers, @@ -21369,10 +22567,10 @@ def _delete_image_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters @@ -21385,8 +22583,8 @@ def _delete_image_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/images/{item_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21400,15 +22598,19 @@ def _delete_image_item_serialize( ) @validate_call - def get_image_item( + def enterprise_get_groups( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], + Field(description="The maximum number of user groups in the result list."), + ] = None, + cursor: Annotated[ + Optional[StrictStr], + Field( + description="A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21418,15 +22620,17 @@ def get_image_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ImageItem: - """Get image item + ) -> GroupsPage: + """List of user groups - Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves the list of user groups in an organization.

Required scope

organizations:groups:read

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param org_id: The ID of an organization. (required) + :type org_id: str + :param limit: The maximum number of user groups in the result list. + :type limit: int + :param cursor: A representation of the position of a user group in the full set of results. It is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning. + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21449,9 +22653,10 @@ def get_image_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_image_item_serialize( - board_id=board_id, - item_id=item_id, + _param = self._enterprise_get_groups_serialize( + org_id=org_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21459,9 +22664,10 @@ def get_image_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ImageItem", + "200": "GroupsPage", "400": None, - "404": None, + "401": None, + "403": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -21471,10 +22677,11 @@ def get_image_item( response_types_map=_response_types_map, ).data - def _get_image_item_serialize( + def _enterprise_get_groups_serialize( self, - board_id, - item_id, + org_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -21493,11 +22700,17 @@ def _get_image_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -21510,7 +22723,7 @@ def _get_image_item_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/images/{item_id}", + resource_path="/v2/orgs/{org_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21524,16 +22737,11 @@ def _get_image_item_serialize( ) @validate_call - def update_image_item_using_file_from_device( + def enterprise_update_group( self, - board_id_platform_file_upload: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - resource: Annotated[ - Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") - ], - data: Optional[UploadFileFromDeviceData] = None, + org_id: Annotated[StrictStr, Field(description="The ID of an organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + update_group_request: UpdateGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21543,19 +22751,17 @@ def update_image_item_using_file_from_device( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ImageItem: - """Update image item using file from device + ) -> Group: + """Update user group - Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ Updates a user group in an organization.

Required scope

organizations:groups:write

Rate limiting

Level 1

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

- :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to update the item. (required) - :type board_id_platform_file_upload: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param resource: Select a file to upload. Maximum file size is 6 MB. (required) - :type resource: bytearray - :param data: - :type data: UploadFileFromDeviceData + :param org_id: The ID of an organization. (required) + :type org_id: str + :param group_id: The ID of a user group. (required) + :type group_id: str + :param update_group_request: (required) + :type update_group_request: UpdateGroupRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21578,11 +22784,10 @@ def update_image_item_using_file_from_device( :return: Returns the result object. """ # noqa: E501 - _param = self._update_image_item_using_file_from_device_serialize( - board_id_platform_file_upload=board_id_platform_file_upload, - item_id=item_id, - resource=resource, - data=data, + _param = self._enterprise_update_group_serialize( + org_id=org_id, + group_id=group_id, + update_group_request=update_group_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21590,7 +22795,13 @@ def update_image_item_using_file_from_device( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ImageItem", + "200": "Group", + "400": None, + "401": None, + "403": None, + "404": None, + "409": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -21599,12 +22810,11 @@ def update_image_item_using_file_from_device( response_types_map=_response_types_map, ).data - def _update_image_item_using_file_from_device_serialize( + def _enterprise_update_group_serialize( self, - board_id_platform_file_upload, - item_id, - resource, - data, + org_id, + group_id, + update_group_request, _request_auth, _content_type, _headers, @@ -21623,18 +22833,16 @@ def _update_image_item_using_file_from_device_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_file_upload is not None: - _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload - if item_id is not None: - _path_params["item_id"] = item_id + if org_id is not None: + _path_params["org_id"] = org_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters - if data is not None: - _form_params.append(("data", data)) - if resource is not None: - _files["resource"] = resource # process the body parameter + if update_group_request is not None: + _body_params = update_group_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -21643,7 +22851,7 @@ def _update_image_item_using_file_from_device_serialize( if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -21652,7 +22860,7 @@ def _update_image_item_using_file_from_device_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21666,13 +22874,12 @@ def _update_image_item_using_file_from_device_serialize( ) @validate_call - def update_image_item_using_url( + def create_doc_format_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - image_update_request: ImageUpdateRequest, + doc_format_create_request: DocFormatCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21682,17 +22889,15 @@ def update_image_item_using_url( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ImageItem: - """Update image item using URL + ) -> DocFormatItem: + """Create doc format item - Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a doc format item to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param image_update_request: (required) - :type image_update_request: ImageUpdateRequest + :param doc_format_create_request: (required) + :type doc_format_create_request: DocFormatCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21715,10 +22920,9 @@ def update_image_item_using_url( :return: Returns the result object. """ # noqa: E501 - _param = self._update_image_item_using_url_serialize( + _param = self._create_doc_format_item_serialize( board_id=board_id, - item_id=item_id, - image_update_request=image_update_request, + doc_format_create_request=doc_format_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21726,10 +22930,9 @@ def update_image_item_using_url( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ImageItem", + "201": "DocFormatItem", "400": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -21739,11 +22942,10 @@ def update_image_item_using_url( response_types_map=_response_types_map, ).data - def _update_image_item_using_url_serialize( + def _create_doc_format_item_serialize( self, board_id, - item_id, - image_update_request, + doc_format_create_request, _request_auth, _content_type, _headers, @@ -21764,14 +22966,12 @@ def _update_image_item_using_url_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if image_update_request is not None: - _body_params = image_update_request + if doc_format_create_request is not None: + _body_params = doc_format_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -21788,8 +22988,8 @@ def _update_image_item_using_url_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/images/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/docs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21803,7 +23003,7 @@ def _update_image_item_using_url_serialize( ) @validate_call - def delete_item( + def delete_doc_format_item( self, board_id: Annotated[ StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") @@ -21819,9 +23019,9 @@ def delete_item( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Delete item + """Delete doc format item - Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a doc format item from the board

Required scope

boards:write

Rate limiting

Level 3
:param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) :type board_id: str @@ -21849,7 +23049,7 @@ def delete_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_item_serialize( + _param = self._delete_doc_format_item_serialize( board_id=board_id, item_id=item_id, _request_auth=_request_auth, @@ -21871,7 +23071,7 @@ def delete_item( response_types_map=_response_types_map, ).data - def _delete_item_serialize( + def _delete_doc_format_item_serialize( self, board_id, item_id, @@ -21910,7 +23110,7 @@ def _delete_item_serialize( return self.api_client.param_serialize( method="DELETE", - resource_path="/v2/boards/{board_id}/items/{item_id}", + resource_path="/v2/boards/{board_id}/docs/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -21924,12 +23124,18 @@ def _delete_item_serialize( ) @validate_call - def delete_item_experimental( + def get_doc_format_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + ], + text_content_type: Annotated[ + Optional[StrictStr], Field(description="Controls the contentType of the returned doc's content.") + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -21939,15 +23145,17 @@ def delete_item_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete item + ) -> DocFormatItem: + """Get doc format item - Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves information for a specific doc format item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) :type item_id: str + :param text_content_type: Controls the contentType of the returned doc's content. + :type text_content_type: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -21970,9 +23178,10 @@ def delete_item_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_item_experimental_serialize( + _param = self._get_doc_format_item_serialize( board_id=board_id, item_id=item_id, + text_content_type=text_content_type, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -21980,10 +23189,10 @@ def delete_item_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "DocFormatItem", + "400": None, + "404": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -21992,10 +23201,11 @@ def delete_item_experimental( response_types_map=_response_types_map, ).data - def _delete_item_experimental_serialize( + def _get_doc_format_item_serialize( self, board_id, item_id, + text_content_type, _request_auth, _content_type, _headers, @@ -22019,6 +23229,10 @@ def _delete_item_experimental_serialize( if item_id is not None: _path_params["item_id"] = item_id # process the query parameters + if text_content_type is not None: + + _query_params.append(("textContentType", text_content_type)) + # process the header parameters # process the form parameters # process the body parameter @@ -22030,8 +23244,8 @@ def _delete_item_experimental_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2-experimental/boards/{board_id}/items/{item_id}", + method="GET", + resource_path="/v2/boards/{board_id}/docs/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22045,17 +23259,15 @@ def _delete_item_experimental_serialize( ) @validate_call - def get_items( + def create_document_item_using_file_from_device( self, - board_id: Annotated[ - StrictStr, - Field( - description="Unique identifier (ID) of the board for which you want to retrieve the list of available items." - ), + board_id_platform_file_upload: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - type: Optional[StrictStr] = None, - cursor: Optional[StrictStr] = None, + resource: Annotated[ + Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") + ], + data: Optional[CreateDocumentItemUsingFileFromDeviceRequestData] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22065,19 +23277,17 @@ def get_items( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItemCursorPaged: - """Get items on board + ) -> DocumentItem: + """Create document item using file from device - Retrieves a list of items for a specific board. You can retrieve all items on the board, a list of child items inside a parent item, or a list of specific types of items by specifying URL query parameter values. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board for which you want to retrieve the list of available items. (required) - :type board_id: str - :param limit: - :type limit: str - :param type: - :type type: str - :param cursor: - :type cursor: str + :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id_platform_file_upload: str + :param resource: Select a file to upload. Maximum file size is 6 MB. (required) + :type resource: bytearray + :param data: + :type data: CreateDocumentItemUsingFileFromDeviceRequestData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22100,11 +23310,10 @@ def get_items( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_serialize( - board_id=board_id, - limit=limit, - type=type, - cursor=cursor, + _param = self._create_document_item_using_file_from_device_serialize( + board_id_platform_file_upload=board_id_platform_file_upload, + resource=resource, + data=data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22112,10 +23321,7 @@ def get_items( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItemCursorPaged", - "400": None, - "404": None, - "429": None, + "201": "DocumentItem", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22124,12 +23330,11 @@ def get_items( response_types_map=_response_types_map, ).data - def _get_items_serialize( + def _create_document_item_using_file_from_device_serialize( self, - board_id, - limit, - type, - cursor, + board_id_platform_file_upload, + resource, + data, _request_auth, _content_type, _headers, @@ -22148,34 +23353,34 @@ def _get_items_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if board_id_platform_file_upload is not None: + _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if type is not None: - - _query_params.append(("type", type)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters + if data is not None: + _form_params.append(("data", data)) + if resource is not None: + _files["resource"] = resource # process the body parameter # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/items", + method="POST", + resource_path="/v2/boards/{board_id_PlatformFileUpload}/documents", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22189,23 +23394,16 @@ def _get_items_serialize( ) @validate_call - def get_items_within_frame( + def update_document_item_using_file_from_device( self, - board_id_platform_containers: Annotated[ - StrictStr, - Field( - description="Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items." - ), + board_id_platform_file_upload: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], - parent_item_id: Annotated[ - str, - Field( - strict=True, description="ID of the frame for which you want to retrieve the list of available items." - ), + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + resource: Annotated[ + Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - type: Optional[StrictStr] = None, - cursor: Optional[StrictStr] = None, + data: Optional[UploadFileFromDeviceData] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22215,21 +23413,19 @@ def get_items_within_frame( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItemCursorPaged: - """Get items within frame + ) -> DocumentItem: + """Update document item using file from device - Retrieves a list of items within a specific frame. A frame is a parent item and all items within a frame are child items. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ Updates a document item on a board by using file from a device.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id_platform_containers: Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items. (required) - :type board_id_platform_containers: str - :param parent_item_id: ID of the frame for which you want to retrieve the list of available items. (required) - :type parent_item_id: str - :param limit: - :type limit: str - :param type: - :type type: str - :param cursor: - :type cursor: str + :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id_platform_file_upload: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param resource: Select a file to upload. Maximum file size is 6 MB. (required) + :type resource: bytearray + :param data: + :type data: UploadFileFromDeviceData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22252,12 +23448,11 @@ def get_items_within_frame( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_within_frame_serialize( - board_id_platform_containers=board_id_platform_containers, - parent_item_id=parent_item_id, - limit=limit, - type=type, - cursor=cursor, + _param = self._update_document_item_using_file_from_device_serialize( + board_id_platform_file_upload=board_id_platform_file_upload, + item_id=item_id, + resource=resource, + data=data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22265,10 +23460,7 @@ def get_items_within_frame( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItemCursorPaged", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "DocumentItem", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22277,13 +23469,12 @@ def get_items_within_frame( response_types_map=_response_types_map, ).data - def _get_items_within_frame_serialize( + def _update_document_item_using_file_from_device_serialize( self, - board_id_platform_containers, - parent_item_id, - limit, - type, - cursor, + board_id_platform_file_upload, + item_id, + resource, + data, _request_auth, _content_type, _headers, @@ -22302,38 +23493,36 @@ def _get_items_within_frame_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_containers is not None: - _path_params["board_id_PlatformContainers"] = board_id_platform_containers + if board_id_platform_file_upload is not None: + _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if parent_item_id is not None: - - _query_params.append(("parent_item_id", parent_item_id)) - - if limit is not None: - - _query_params.append(("limit", limit)) - - if type is not None: - - _query_params.append(("type", type)) - - if cursor is not None: - - _query_params.append(("cursor", cursor)) - # process the header parameters # process the form parameters + if data is not None: + _form_params.append(("data", data)) + if resource is not None: + _files["resource"] = resource # process the body parameter # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id_PlatformContainers}/items", + method="PATCH", + resource_path="/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22347,15 +23536,12 @@ def _get_items_within_frame_serialize( ) @validate_call - def get_specific_item( + def create_frame_item( self, board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create a frame.") ], + frame_create_request: FrameCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22365,15 +23551,15 @@ def get_specific_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItem: - """Get specific item on board + ) -> FrameItem: + """Create frame - Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :param board_id: Unique identifier (ID) of the board where you want to create a frame. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param frame_create_request: (required) + :type frame_create_request: FrameCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22396,9 +23582,9 @@ def get_specific_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_specific_item_serialize( + _param = self._create_frame_item_serialize( board_id=board_id, - item_id=item_id, + frame_create_request=frame_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22406,10 +23592,10 @@ def get_specific_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItem", - "400": None, - "404": None, - "429": None, + "201": "FrameItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22418,10 +23604,10 @@ def get_specific_item( response_types_map=_response_types_map, ).data - def _get_specific_item_serialize( + def _create_frame_item_serialize( self, board_id, - item_id, + frame_create_request, _request_auth, _content_type, _headers, @@ -22442,22 +23628,30 @@ def _get_specific_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if frame_create_request is not None: + _body_params = frame_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/items/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/frames", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22471,13 +23665,14 @@ def _get_specific_item_serialize( ) @validate_call - def update_item_position_or_parent( + def delete_frame_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the frame.") + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the frame that you want to delete.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - generic_item_update: GenericItemUpdate, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22487,17 +23682,15 @@ def update_item_position_or_parent( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericItem: - """Update item position or parent + ) -> object: + """Delete frame - Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board from which you want to delete the frame. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :param item_id: Unique identifier (ID) of the frame that you want to delete. (required) :type item_id: str - :param generic_item_update: (required) - :type generic_item_update: GenericItemUpdate :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22520,10 +23713,9 @@ def update_item_position_or_parent( :return: Returns the result object. """ # noqa: E501 - _param = self._update_item_position_or_parent_serialize( + _param = self._delete_frame_item_serialize( board_id=board_id, item_id=item_id, - generic_item_update=generic_item_update, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22531,10 +23723,10 @@ def update_item_position_or_parent( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItem", - "400": None, - "404": None, - "429": None, + "204": "object", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22543,11 +23735,10 @@ def update_item_position_or_parent( response_types_map=_response_types_map, ).data - def _update_item_position_or_parent_serialize( + def _delete_frame_item_serialize( self, board_id, item_id, - generic_item_update, _request_auth, _content_type, _headers, @@ -22574,26 +23765,16 @@ def _update_item_position_or_parent_serialize( # process the header parameters # process the form parameters # process the body parameter - if generic_item_update is not None: - _body_params = generic_item_update # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/items/{item_id}", + method="DELETE", + resource_path="/v2/boards/{board_id}/frames/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22607,12 +23788,15 @@ def _update_item_position_or_parent_serialize( ) @validate_call - def create_shape_item( + def get_frame_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board that contains the frame that you want to retrieve"), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the frame that you want to retrieve.") ], - shape_create_request: ShapeCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22622,15 +23806,15 @@ def create_shape_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Create shape item + ) -> FrameItem: + """Get frame - Adds a shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param board_id: Unique identifier (ID) of the board that contains the frame that you want to retrieve (required) :type board_id: str - :param shape_create_request: (required) - :type shape_create_request: ShapeCreateRequest + :param item_id: Unique identifier (ID) of the frame that you want to retrieve. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22653,9 +23837,9 @@ def create_shape_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_shape_item_serialize( + _param = self._get_frame_item_serialize( board_id=board_id, - shape_create_request=shape_create_request, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22663,10 +23847,10 @@ def create_shape_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ShapeItem", - "400": None, - "404": None, - "429": None, + "200": "FrameItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22675,10 +23859,10 @@ def create_shape_item( response_types_map=_response_types_map, ).data - def _create_shape_item_serialize( + def _get_frame_item_serialize( self, board_id, - shape_create_request, + item_id, _request_auth, _content_type, _headers, @@ -22699,30 +23883,22 @@ def _create_shape_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - if shape_create_request is not None: - _body_params = shape_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/shapes", + method="GET", + resource_path="/v2/boards/{board_id}/frames/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22736,12 +23912,15 @@ def _create_shape_item_serialize( ) @validate_call - def delete_shape_item( + def update_frame_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the frame.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the frame that you want to update.") + ], + frame_update_request: FrameUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22751,15 +23930,17 @@ def delete_shape_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete shape item + ) -> FrameItem: + """Update frame - Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Updates a frame on a board based on the data, style, or geometry properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board where you want to update the frame. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :param item_id: Unique identifier (ID) of the frame that you want to update. (required) :type item_id: str + :param frame_update_request: (required) + :type frame_update_request: FrameUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22782,9 +23963,10 @@ def delete_shape_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_shape_item_serialize( + _param = self._update_frame_item_serialize( board_id=board_id, item_id=item_id, + frame_update_request=frame_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22792,10 +23974,11 @@ def delete_shape_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": None, - "404": None, - "429": None, + "200": "FrameItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "409": "UpdateFrameItem409Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22804,10 +23987,11 @@ def delete_shape_item( response_types_map=_response_types_map, ).data - def _delete_shape_item_serialize( + def _update_frame_item_serialize( self, board_id, item_id, + frame_update_request, _request_auth, _content_type, _headers, @@ -22834,16 +24018,26 @@ def _delete_shape_item_serialize( # process the header parameters # process the form parameters # process the body parameter + if frame_update_request is not None: + _body_params = frame_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/shapes/{item_id}", + method="PATCH", + resource_path="/v2/boards/{board_id}/frames/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22857,15 +24051,10 @@ def _delete_shape_item_serialize( ) @validate_call - def get_shape_item( + def create_group( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + board_id: StrictStr, + group: Group, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22875,15 +24064,15 @@ def get_shape_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Get shape item + ) -> GroupResponseShort: + """Create group - Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Creates a group of items on a board. The group is created with the items that are passed in the request body.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :param board_id: (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param group: (required) + :type group: Group :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -22906,9 +24095,9 @@ def get_shape_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_shape_item_serialize( + _param = self._create_group_serialize( board_id=board_id, - item_id=item_id, + group=group, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -22916,10 +24105,10 @@ def get_shape_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", - "400": None, - "404": None, - "429": None, + "201": "GroupResponseShort", + "400": "GetAllGroups400Response", + "404": "GetAllGroups404Response", + "429": "GetAllGroups429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -22928,10 +24117,10 @@ def get_shape_item( response_types_map=_response_types_map, ).data - def _get_shape_item_serialize( + def _create_group_serialize( self, board_id, - item_id, + group, _request_auth, _content_type, _headers, @@ -22952,22 +24141,30 @@ def _get_shape_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if group is not None: + _body_params = group # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/shapes/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -22981,13 +24178,16 @@ def _get_shape_item_serialize( ) @validate_call - def update_shape_item( + def delete_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], + delete_items: Annotated[ + StrictBool, + Field( + description="Indicates whether the items should be removed. Set to `true` to delete items in the group." + ), ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - shape_update_request: ShapeUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -22997,17 +24197,17 @@ def update_shape_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ShapeItem: - """Update shape item + ) -> object: + """Deletes the group - Updates a shape item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Deletes a group from a board. All the items in the group are deleted along with the group. Note - this endpoint will delete items which are locked as well.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param shape_update_request: (required) - :type shape_update_request: ShapeUpdateRequest + :param group_id: Unique identifier (ID) of the group. (required) + :type group_id: str + :param delete_items: Indicates whether the items should be removed. Set to `true` to delete items in the group. (required) + :type delete_items: bool :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23030,10 +24230,10 @@ def update_shape_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_shape_item_serialize( + _param = self._delete_group_serialize( board_id=board_id, - item_id=item_id, - shape_update_request=shape_update_request, + group_id=group_id, + delete_items=delete_items, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23041,11 +24241,10 @@ def update_shape_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", - "400": None, - "404": None, - "409": None, - "429": None, + "204": "object", + "400": "UnGroup400Response", + "404": "UnGroup404Response", + "429": "UnGroup429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23054,11 +24253,11 @@ def update_shape_item( response_types_map=_response_types_map, ).data - def _update_shape_item_serialize( + def _delete_group_serialize( self, board_id, - item_id, - shape_update_request, + group_id, + delete_items, _request_auth, _content_type, _headers, @@ -23079,32 +24278,26 @@ def _update_shape_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters + if delete_items is not None: + + _query_params.append(("delete_items", delete_items)) + # process the header parameters # process the form parameters # process the body parameter - if shape_update_request is not None: - _body_params = shape_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/shapes/{item_id}", + method="DELETE", + resource_path="/v2/boards/{board_id}/groups/{group_id}?", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23118,12 +24311,14 @@ def _update_shape_item_serialize( ) @validate_call - def create_sticky_note_item( + def get_all_groups( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - sticky_note_create_request: StickyNoteCreateRequest, + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=50, strict=True, ge=10)]], + Field(description="The maximum number of items to return at one time, default is 10, maximum is 50."), + ] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23133,15 +24328,17 @@ def create_sticky_note_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> StickyNoteItem: - """Create sticky note item + ) -> GetAllGroups200Response: + """Get all groups on a board - Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Returns all the groups and the items of the respective groups within a specific board.
This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.
For example, if you set the `limit` query parameter to `10` and the board contains 20 items that are a part of a group, the first call will return information about the first 10 items in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) + :param board_id: Unique identifier (ID) of the board. (required) :type board_id: str - :param sticky_note_create_request: (required) - :type sticky_note_create_request: StickyNoteCreateRequest + :param limit: The maximum number of items to return at one time, default is 10, maximum is 50. + :type limit: int + :param cursor: + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23164,9 +24361,10 @@ def create_sticky_note_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_sticky_note_item_serialize( + _param = self._get_all_groups_serialize( board_id=board_id, - sticky_note_create_request=sticky_note_create_request, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23174,10 +24372,10 @@ def create_sticky_note_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "StickyNoteItem", - "400": None, - "404": None, - "429": None, + "200": "GetAllGroups200Response", + "400": "GetAllGroups400Response", + "404": "GetAllGroups404Response", + "429": "GetAllGroups429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23186,10 +24384,11 @@ def create_sticky_note_item( response_types_map=_response_types_map, ).data - def _create_sticky_note_item_serialize( + def _get_all_groups_serialize( self, board_id, - sticky_note_create_request, + limit, + cursor, _request_auth, _content_type, _headers, @@ -23211,29 +24410,27 @@ def _create_sticky_note_item_serialize( if board_id is not None: _path_params["board_id"] = board_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter - if sticky_note_create_request is not None: - _body_params = sticky_note_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/sticky_notes", + method="GET", + resource_path="/v2/boards/{board_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23247,12 +24444,10 @@ def _create_sticky_note_item_serialize( ) @validate_call - def delete_sticky_note_item( + def get_group_by_id( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23262,15 +24457,15 @@ def delete_sticky_note_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete sticky note item + ) -> GroupResponseShort: + """Get a group by its ID - Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Returns a list of items in a specific group.

Required scope

boards:read

Rate limiting

Level 2 per item ID - :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param group_id: Unique identifier (ID) of the group. (required) + :type group_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23293,9 +24488,9 @@ def delete_sticky_note_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_sticky_note_item_serialize( + _param = self._get_group_by_id_serialize( board_id=board_id, - item_id=item_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23303,10 +24498,10 @@ def delete_sticky_note_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": None, - "404": None, - "429": None, + "200": "GroupResponseShort", + "400": "GetAllGroups400Response", + "404": "GetAllGroups404Response", + "429": "GetAllGroups429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23315,10 +24510,10 @@ def delete_sticky_note_item( response_types_map=_response_types_map, ).data - def _delete_sticky_note_item_serialize( + def _get_group_by_id_serialize( self, board_id, - item_id, + group_id, _request_auth, _content_type, _headers, @@ -23339,8 +24534,8 @@ def _delete_sticky_note_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters # process the header parameters # process the form parameters @@ -23353,8 +24548,8 @@ def _delete_sticky_note_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", + method="GET", + resource_path="/v2/boards/{board_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23368,15 +24563,15 @@ def _delete_sticky_note_item_serialize( ) @validate_call - def get_sticky_note_item( + def get_items_by_group_id( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") - ], + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + group_item_id: Annotated[StrictStr, Field(description="The ID of the group item to retrieve.")], + limit: Annotated[ + Optional[Annotated[int, Field(le=50, strict=True, ge=10)]], + Field(description="The maximum number of items to return at one time, default is 10, maximum is 50."), + ] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23386,15 +24581,19 @@ def get_sticky_note_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> StickyNoteItem: - """Get sticky note item + ) -> GetItemsByGroupId200Response: + """Get items of a group by ID - Retrieves information for a specific sticky note item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Returns a list of items that are a part of any group, within a specific board.
This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.
For example, if you set the `limit` query parameter to `10` and the board contains 20 items that are a part of a group, the first call will return information about the first 10 items (not 10 groups) in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :param board_id: Unique identifier (ID) of the board. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param group_item_id: The ID of the group item to retrieve. (required) + :type group_item_id: str + :param limit: The maximum number of items to return at one time, default is 10, maximum is 50. + :type limit: int + :param cursor: + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23417,9 +24616,11 @@ def get_sticky_note_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_sticky_note_item_serialize( + _param = self._get_items_by_group_id_serialize( board_id=board_id, - item_id=item_id, + group_item_id=group_item_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23427,10 +24628,10 @@ def get_sticky_note_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "StickyNoteItem", - "400": None, - "404": None, - "429": None, + "200": "GetItemsByGroupId200Response", + "400": "GetAllGroups400Response", + "404": "GetAllGroups404Response", + "429": "GetAllGroups429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23439,10 +24640,12 @@ def get_sticky_note_item( response_types_map=_response_types_map, ).data - def _get_sticky_note_item_serialize( + def _get_items_by_group_id_serialize( self, board_id, - item_id, + group_item_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -23460,12 +24663,22 @@ def _get_sticky_note_item_serialize( _files: Dict[str, str] = {} _body_params: Optional[bytes] = None - # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id - # process the query parameters + # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + + if group_item_id is not None: + + _query_params.append(("group_item_id", group_item_id)) + # process the header parameters # process the form parameters # process the body parameter @@ -23478,7 +24691,7 @@ def _get_sticky_note_item_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", + resource_path="/v2/boards/{board_id}/groups/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23492,13 +24705,13 @@ def _get_sticky_note_item_serialize( ) @validate_call - def update_sticky_note_item( + def un_group( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") - ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - sticky_note_update_request: StickyNoteUpdateRequest, + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], + delete_items: Annotated[ + Optional[StrictBool], Field(description="Indicates whether the items should be removed. By default, false.") + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23508,17 +24721,17 @@ def update_sticky_note_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> StickyNoteItem: - """Update sticky note item + ) -> object: + """Ungroup items - Updates a sticky note item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) - :type item_id: str - :param sticky_note_update_request: (required) - :type sticky_note_update_request: StickyNoteUpdateRequest + :param group_id: Unique identifier (ID) of the group. (required) + :type group_id: str + :param delete_items: Indicates whether the items should be removed. By default, false. + :type delete_items: bool :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23541,10 +24754,10 @@ def update_sticky_note_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_sticky_note_item_serialize( + _param = self._un_group_serialize( board_id=board_id, - item_id=item_id, - sticky_note_update_request=sticky_note_update_request, + group_id=group_id, + delete_items=delete_items, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23552,11 +24765,10 @@ def update_sticky_note_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "StickyNoteItem", - "400": None, - "404": None, - "409": None, - "429": None, + "204": "object", + "400": "UnGroup400Response", + "404": "UnGroup404Response", + "429": "UnGroup429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23565,11 +24777,11 @@ def update_sticky_note_item( response_types_map=_response_types_map, ).data - def _update_sticky_note_item_serialize( + def _un_group_serialize( self, board_id, - item_id, - sticky_note_update_request, + group_id, + delete_items, _request_auth, _content_type, _headers, @@ -23590,32 +24802,26 @@ def _update_sticky_note_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters + if delete_items is not None: + + _query_params.append(("delete_items", delete_items)) + # process the header parameters # process the form parameters # process the body parameter - if sticky_note_update_request is not None: - _body_params = sticky_note_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/sticky_notes/{item_id}", + method="DELETE", + resource_path="/v2/boards/{board_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23629,18 +24835,11 @@ def _update_sticky_note_item_serialize( ) @validate_call - def attach_tag_to_item( + def update_group( self, - board_id_platform_tags: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board with the item that you want to add a tag to."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item to which you want to add a tag.") - ], - tag_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the tag you want to add to the item.") - ], + board_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the board.")], + group_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the group.")], + group: Group, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23650,17 +24849,17 @@ def attach_tag_to_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Attach tag to item + ) -> GroupResponseShort: + """Updates a group with new items - Attach an existing tag to the specified item. Card and sticky note items can have up to 8 tags.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Update tag](https://developers.miro.com/reference/update-tag), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
+ This endpoint updates an existing group by replacing it entirely with a new group. When the update is made, the original group is completely replaced, and a new group ID is assigned.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id_platform_tags: Unique identifier (ID) of the board with the item that you want to add a tag to. (required) - :type board_id_platform_tags: str - :param item_id: Unique identifier (ID) of the item to which you want to add a tag. (required) - :type item_id: str - :param tag_id: Unique identifier (ID) of the tag you want to add to the item. (required) - :type tag_id: str + :param board_id: Unique identifier (ID) of the board. (required) + :type board_id: str + :param group_id: Unique identifier (ID) of the group. (required) + :type group_id: str + :param group: (required) + :type group: Group :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23683,10 +24882,10 @@ def attach_tag_to_item( :return: Returns the result object. """ # noqa: E501 - _param = self._attach_tag_to_item_serialize( - board_id_platform_tags=board_id_platform_tags, - item_id=item_id, - tag_id=tag_id, + _param = self._update_group_serialize( + board_id=board_id, + group_id=group_id, + group=group, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23694,10 +24893,10 @@ def attach_tag_to_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "200": "GroupResponseShort", + "400": "GetAllGroups400Response", + "404": "GetAllGroups404Response", + "429": "GetAllGroups429Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23706,11 +24905,11 @@ def attach_tag_to_item( response_types_map=_response_types_map, ).data - def _attach_tag_to_item_serialize( + def _update_group_serialize( self, - board_id_platform_tags, - item_id, - tag_id, + board_id, + group_id, + group, _request_auth, _content_type, _headers, @@ -23729,28 +24928,34 @@ def _attach_tag_to_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_tags is not None: - _path_params["board_id_PlatformTags"] = board_id_platform_tags - if item_id is not None: - _path_params["item_id"] = item_id + if board_id is not None: + _path_params["board_id"] = board_id + if group_id is not None: + _path_params["group_id"] = group_id # process the query parameters - if tag_id is not None: - - _query_params.append(("tag_id", tag_id)) - # process the header parameters # process the form parameters # process the body parameter + if group is not None: + _body_params = group # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id_PlatformTags}/items/{item_id}", + method="PUT", + resource_path="/v2/boards/{board_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23764,12 +24969,15 @@ def _attach_tag_to_item_serialize( ) @validate_call - def create_tag( + def create_image_item_using_local_file( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the tag.") + board_id_platform_file_upload: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") ], - tag_create_request: TagCreateRequest, + resource: Annotated[ + Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") + ], + data: Optional[UploadFileFromDeviceData] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23779,15 +24987,17 @@ def create_tag( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TagWithLinks: - """Create tag + ) -> ImageItem: + """Create image item using file from device - Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
+ Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to create the tag. (required) - :type board_id: str - :param tag_create_request: (required) - :type tag_create_request: TagCreateRequest + :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to create the item. (required) + :type board_id_platform_file_upload: str + :param resource: Select a file to upload. Maximum file size is 6 MB. (required) + :type resource: bytearray + :param data: + :type data: UploadFileFromDeviceData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23810,9 +25020,10 @@ def create_tag( :return: Returns the result object. """ # noqa: E501 - _param = self._create_tag_serialize( - board_id=board_id, - tag_create_request=tag_create_request, + _param = self._create_image_item_using_local_file_serialize( + board_id_platform_file_upload=board_id_platform_file_upload, + resource=resource, + data=data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23820,10 +25031,7 @@ def create_tag( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TagWithLinks", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "201": "ImageItem", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23832,10 +25040,11 @@ def create_tag( response_types_map=_response_types_map, ).data - def _create_tag_serialize( + def _create_image_item_using_local_file_serialize( self, - board_id, - tag_create_request, + board_id_platform_file_upload, + resource, + data, _request_auth, _content_type, _headers, @@ -23854,14 +25063,16 @@ def _create_tag_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if board_id_platform_file_upload is not None: + _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload # process the query parameters # process the header parameters # process the form parameters + if data is not None: + _form_params.append(("data", data)) + if resource is not None: + _files["resource"] = resource # process the body parameter - if tag_create_request is not None: - _body_params = tag_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -23870,7 +25081,7 @@ def _create_tag_serialize( if _content_type: _header_params["Content-Type"] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -23879,7 +25090,7 @@ def _create_tag_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/boards/{board_id}/tags", + resource_path="/v2/boards/{board_id_PlatformFileUpload}/images", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -23893,12 +25104,16 @@ def _create_tag_serialize( ) @validate_call - def delete_tag( + def update_image_item_using_file_from_device( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to delete a specific tag.") + board_id_platform_file_upload: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") ], - tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to delete.")], + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], + resource: Annotated[ + Union[StrictBytes, StrictStr], Field(description="Select a file to upload. Maximum file size is 6 MB.") + ], + data: Optional[UploadFileFromDeviceData] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -23908,15 +25123,19 @@ def delete_tag( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete tag + ) -> ImageItem: + """Update image item using file from device - Deletes the specified tag from the board. The tag is also removed from all cards and sticky notes on the board.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Update tag](https://developers.miro.com/reference/update-tag).

Required scope

boards:write

Rate limiting

Level 1
+ Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to delete a specific tag. (required) - :type board_id: str - :param tag_id: Unique identifier (ID) of the tag that you want to delete. (required) - :type tag_id: str + :param board_id_platform_file_upload: Unique identifier (ID) of the board where you want to update the item. (required) + :type board_id_platform_file_upload: str + :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :type item_id: str + :param resource: Select a file to upload. Maximum file size is 6 MB. (required) + :type resource: bytearray + :param data: + :type data: UploadFileFromDeviceData :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -23939,9 +25158,11 @@ def delete_tag( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_tag_serialize( - board_id=board_id, - tag_id=tag_id, + _param = self._update_image_item_using_file_from_device_serialize( + board_id_platform_file_upload=board_id_platform_file_upload, + item_id=item_id, + resource=resource, + data=data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -23949,10 +25170,7 @@ def delete_tag( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "200": "ImageItem", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -23961,10 +25179,12 @@ def delete_tag( response_types_map=_response_types_map, ).data - def _delete_tag_serialize( + def _update_image_item_using_file_from_device_serialize( self, - board_id, - tag_id, + board_id_platform_file_upload, + item_id, + resource, + data, _request_auth, _content_type, _headers, @@ -23983,24 +25203,36 @@ def _delete_tag_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if tag_id is not None: - _path_params["tag_id"] = tag_id + if board_id_platform_file_upload is not None: + _path_params["board_id_PlatformFileUpload"] = board_id_platform_file_upload + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters # process the header parameters # process the form parameters + if data is not None: + _form_params.append(("data", data)) + if resource is not None: + _files["resource"] = resource # process the body parameter # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/tags/{tag_id}", + method="PATCH", + resource_path="/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24014,15 +25246,12 @@ def _delete_tag_serialize( ) @validate_call - def get_items_by_tag( + def delete_item_experimental( self, - board_id_platform_tags: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board where you want to retrieve a specific tag."), + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") ], - tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to retrieve.")], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - offset: Optional[StrictStr] = None, + item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24032,19 +25261,15 @@ def get_items_by_tag( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ItemPagedResponse: - """Get items by tag + ) -> object: + """Delete item - Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
+ Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
- :param board_id_platform_tags: Unique identifier (ID) of the board where you want to retrieve a specific tag. (required) - :type board_id_platform_tags: str - :param tag_id: Unique identifier (ID) of the tag that you want to retrieve. (required) - :type tag_id: str - :param limit: - :type limit: str - :param offset: - :type offset: str + :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :type board_id: str + :param item_id: Unique identifier (ID) of the item that you want to delete. (required) + :type item_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24067,11 +25292,9 @@ def get_items_by_tag( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_by_tag_serialize( - board_id_platform_tags=board_id_platform_tags, - tag_id=tag_id, - limit=limit, - offset=offset, + _param = self._delete_item_experimental_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24079,10 +25302,10 @@ def get_items_by_tag( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ItemPagedResponse", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "204": "object", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -24091,12 +25314,10 @@ def get_items_by_tag( response_types_map=_response_types_map, ).data - def _get_items_by_tag_serialize( + def _delete_item_experimental_serialize( self, - board_id_platform_tags, - tag_id, - limit, - offset, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -24115,21 +25336,11 @@ def _get_items_by_tag_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_tags is not None: - _path_params["board_id_PlatformTags"] = board_id_platform_tags + if board_id is not None: + _path_params["board_id"] = board_id + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if limit is not None: - - _query_params.append(("limit", limit)) - - if offset is not None: - - _query_params.append(("offset", offset)) - - if tag_id is not None: - - _query_params.append(("tag_id", tag_id)) - # process the header parameters # process the form parameters # process the body parameter @@ -24141,8 +25352,8 @@ def _get_items_by_tag_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id_PlatformTags}/items", + method="DELETE", + resource_path="/v2-experimental/boards/{board_id}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24156,13 +25367,23 @@ def _get_items_by_tag_serialize( ) @validate_call - def get_tag( + def get_items_within_frame( self, - board_id: Annotated[ + board_id_platform_containers: Annotated[ StrictStr, - Field(description="Unique identifier (ID) of the board where you want to retrieve a specific tag."), + Field( + description="Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items." + ), ], - tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to retrieve.")], + parent_item_id: Annotated[ + str, + Field( + strict=True, description="ID of the frame for which you want to retrieve the list of available items." + ), + ], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + type: Optional[StrictStr] = None, + cursor: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24172,15 +25393,21 @@ def get_tag( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TagWithLinks: - """Get tag + ) -> GenericItemCursorPaged: + """Get items within frame - Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
+ Retrieves a list of items within a specific frame. A frame is a parent item and all items within a frame are child items. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let's say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- :param board_id: Unique identifier (ID) of the board where you want to retrieve a specific tag. (required) - :type board_id: str - :param tag_id: Unique identifier (ID) of the tag that you want to retrieve. (required) - :type tag_id: str + :param board_id_platform_containers: Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items. (required) + :type board_id_platform_containers: str + :param parent_item_id: ID of the frame for which you want to retrieve the list of available items. (required) + :type parent_item_id: str + :param limit: + :type limit: str + :param type: + :type type: str + :param cursor: + :type cursor: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24203,9 +25430,12 @@ def get_tag( :return: Returns the result object. """ # noqa: E501 - _param = self._get_tag_serialize( - board_id=board_id, - tag_id=tag_id, + _param = self._get_items_within_frame_serialize( + board_id_platform_containers=board_id_platform_containers, + parent_item_id=parent_item_id, + limit=limit, + type=type, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24213,10 +25443,10 @@ def get_tag( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TagWithLinks", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "200": "GenericItemCursorPaged", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -24225,10 +25455,13 @@ def get_tag( response_types_map=_response_types_map, ).data - def _get_tag_serialize( + def _get_items_within_frame_serialize( self, - board_id, - tag_id, + board_id_platform_containers, + parent_item_id, + limit, + type, + cursor, _request_auth, _content_type, _headers, @@ -24247,11 +25480,25 @@ def _get_tag_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id - if tag_id is not None: - _path_params["tag_id"] = tag_id + if board_id_platform_containers is not None: + _path_params["board_id_PlatformContainers"] = board_id_platform_containers # process the query parameters + if parent_item_id is not None: + + _query_params.append(("parent_item_id", parent_item_id)) + + if limit is not None: + + _query_params.append(("limit", limit)) + + if type is not None: + + _query_params.append(("type", type)) + + if cursor is not None: + + _query_params.append(("cursor", cursor)) + # process the header parameters # process the form parameters # process the body parameter @@ -24264,7 +25511,7 @@ def _get_tag_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/tags/{tag_id}", + resource_path="/v2/boards/{board_id_PlatformContainers}/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24278,13 +25525,32 @@ def _get_tag_serialize( ) @validate_call - def get_tags_from_board( + def get_embed_data( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board whose tags you want to retrieve.") + url: Annotated[ + StrictStr, + Field( + description="The URL pointing to the resource to return as oEmbed data. Currently, it supports only URLs pointing to Miro boards." + ), ], - limit: Optional[Annotated[str, Field(strict=True)]] = None, - offset: Optional[StrictStr] = None, + format: Annotated[ + Optional[StrictStr], + Field( + description='Specifies the return format of the response. It complies with the [oEmbed standard](https://oembed.com/). Allowed formats: either "json", or "xml".' + ), + ] = None, + referrer: Annotated[ + Optional[StrictStr], + Field( + description="The URL pointing to the source of the request. Service providers such as Embedly use it to forward the initial site that triggered the oEmbed request." + ), + ] = None, + maxwidth: Annotated[ + Optional[StrictInt], Field(description="The maximum width available to the embed, in pixels.") + ] = None, + maxheight: Annotated[ + Optional[StrictInt], Field(description="The maximum height available to the embed, in pixels.") + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24294,17 +25560,21 @@ def get_tags_from_board( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TagsPagedResponse: - """Get tags from board - - Retrieves all the tags from the specified board.

Required scope

boards:read

Rate limiting

Level 1
- - :param board_id: Unique identifier (ID) of the board whose tags you want to retrieve. (required) - :type board_id: str - :param limit: - :type limit: str - :param offset: - :type offset: str + ) -> OEmbedData: + """Get oEmbed data + + Retrieves information to embed a Miro board as a [live embed](doc:oembed-live-embed). + + :param url: The URL pointing to the resource to return as oEmbed data. Currently, it supports only URLs pointing to Miro boards. (required) + :type url: str + :param format: Specifies the return format of the response. It complies with the [oEmbed standard](https://oembed.com/). Allowed formats: either \"json\", or \"xml\". + :type format: str + :param referrer: The URL pointing to the source of the request. Service providers such as Embedly use it to forward the initial site that triggered the oEmbed request. + :type referrer: str + :param maxwidth: The maximum width available to the embed, in pixels. + :type maxwidth: int + :param maxheight: The maximum height available to the embed, in pixels. + :type maxheight: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24327,10 +25597,12 @@ def get_tags_from_board( :return: Returns the result object. """ # noqa: E501 - _param = self._get_tags_from_board_serialize( - board_id=board_id, - limit=limit, - offset=offset, + _param = self._get_embed_data_serialize( + url=url, + format=format, + referrer=referrer, + maxwidth=maxwidth, + maxheight=maxheight, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24338,10 +25610,12 @@ def get_tags_from_board( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TagsPagedResponse", - "400": "GetTagsFromItem400Response", - "404": "GetTagsFromItem400Response", - "429": "GetTagsFromItem400Response", + "200": "OEmbedData", + "400": None, + "404": None, + "405": None, + "406": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -24350,11 +25624,13 @@ def get_tags_from_board( response_types_map=_response_types_map, ).data - def _get_tags_from_board_serialize( + def _get_embed_data_serialize( self, - board_id, - limit, - offset, + url, + format, + referrer, + maxwidth, + maxheight, _request_auth, _content_type, _headers, @@ -24372,31 +25648,41 @@ def _get_tags_from_board_serialize( _files: Dict[str, str] = {} _body_params: Optional[bytes] = None - # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + # process the path parameters # process the query parameters - if limit is not None: + if url is not None: - _query_params.append(("limit", limit)) + _query_params.append(("url", url)) - if offset is not None: + if format is not None: - _query_params.append(("offset", offset)) + _query_params.append(("format", format)) + + if referrer is not None: + + _query_params.append(("referrer", referrer)) + + if maxwidth is not None: + + _query_params.append(("maxwidth", maxwidth)) + + if maxheight is not None: + + _query_params.append(("maxheight", maxheight)) # process the header parameters # process the form parameters # process the body parameter # set the HTTP header `Accept` - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/json", "application/xml"]) # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/tags", + resource_path="/oembed", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24410,14 +25696,17 @@ def _get_tags_from_board_serialize( ) @validate_call - def get_tags_from_item( + def attach_tag_to_item( self, - board_id: Annotated[ + board_id_platform_tags: Annotated[ StrictStr, - Field(description="Unique identifier (ID) of the board with the item whose tags you want to retrieve."), + Field(description="Unique identifier (ID) of the board with the item that you want to add a tag to."), ], item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item whose tags you want to retrieve.") + StrictStr, Field(description="Unique identifier (ID) of the item to which you want to add a tag.") + ], + tag_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the tag you want to add to the item.") ], _request_timeout: Union[ None, @@ -24428,15 +25717,17 @@ def get_tags_from_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetTagsResponse: - """Get tags from item + ) -> object: + """Attach tag to item - Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ Attach an existing tag to the specified item. Card and sticky note items can have up to 8 tags.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Update tag](https://developers.miro.com/reference/update-tag), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board with the item whose tags you want to retrieve. (required) - :type board_id: str - :param item_id: Unique identifier (ID) of the item whose tags you want to retrieve. (required) + :param board_id_platform_tags: Unique identifier (ID) of the board with the item that you want to add a tag to. (required) + :type board_id_platform_tags: str + :param item_id: Unique identifier (ID) of the item to which you want to add a tag. (required) :type item_id: str + :param tag_id: Unique identifier (ID) of the tag you want to add to the item. (required) + :type tag_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24459,9 +25750,10 @@ def get_tags_from_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_tags_from_item_serialize( - board_id=board_id, + _param = self._attach_tag_to_item_serialize( + board_id_platform_tags=board_id_platform_tags, item_id=item_id, + tag_id=tag_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24469,7 +25761,7 @@ def get_tags_from_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GetTagsResponse", + "204": "object", "400": "GetTagsFromItem400Response", "404": "GetTagsFromItem400Response", "429": "GetTagsFromItem400Response", @@ -24481,10 +25773,11 @@ def get_tags_from_item( response_types_map=_response_types_map, ).data - def _get_tags_from_item_serialize( + def _attach_tag_to_item_serialize( self, - board_id, + board_id_platform_tags, item_id, + tag_id, _request_auth, _content_type, _headers, @@ -24503,11 +25796,15 @@ def _get_tags_from_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if board_id_platform_tags is not None: + _path_params["board_id_PlatformTags"] = board_id_platform_tags if item_id is not None: _path_params["item_id"] = item_id # process the query parameters + if tag_id is not None: + + _query_params.append(("tag_id", tag_id)) + # process the header parameters # process the form parameters # process the body parameter @@ -24519,8 +25816,8 @@ def _get_tags_from_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/boards/{board_id}/items/{item_id}/tags", + method="POST", + resource_path="/v2/boards/{board_id_PlatformTags}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24534,18 +25831,12 @@ def _get_tags_from_item_serialize( ) @validate_call - def remove_tag_from_item( + def create_tag( self, - board_id_platform_tags: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board with the item that you want to remove a tag from."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to remove the tag from.") - ], - tag_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the tag that you want to remove from the item.") + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the tag.") ], + tag_create_request: TagCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24555,17 +25846,15 @@ def remove_tag_from_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Remove tag from item + ) -> TagWithLinks: + """Create tag - Removes the specified tag from the specified item. The tag still exists on the board.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Update tag](https://developers.miro.com/reference/update-tag), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
+ Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
- :param board_id_platform_tags: Unique identifier (ID) of the board with the item that you want to remove a tag from. (required) - :type board_id_platform_tags: str - :param item_id: Unique identifier (ID) of the item that you want to remove the tag from. (required) - :type item_id: str - :param tag_id: Unique identifier (ID) of the tag that you want to remove from the item. (required) - :type tag_id: str + :param board_id: Unique identifier (ID) of the board where you want to create the tag. (required) + :type board_id: str + :param tag_create_request: (required) + :type tag_create_request: TagCreateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24588,10 +25877,9 @@ def remove_tag_from_item( :return: Returns the result object. """ # noqa: E501 - _param = self._remove_tag_from_item_serialize( - board_id_platform_tags=board_id_platform_tags, - item_id=item_id, - tag_id=tag_id, + _param = self._create_tag_serialize( + board_id=board_id, + tag_create_request=tag_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24599,7 +25887,7 @@ def remove_tag_from_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", + "201": "TagWithLinks", "400": "GetTagsFromItem400Response", "404": "GetTagsFromItem400Response", "429": "GetTagsFromItem400Response", @@ -24611,11 +25899,10 @@ def remove_tag_from_item( response_types_map=_response_types_map, ).data - def _remove_tag_from_item_serialize( + def _create_tag_serialize( self, - board_id_platform_tags, - item_id, - tag_id, + board_id, + tag_create_request, _request_auth, _content_type, _headers, @@ -24634,28 +25921,32 @@ def _remove_tag_from_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id_platform_tags is not None: - _path_params["board_id_PlatformTags"] = board_id_platform_tags - if item_id is not None: - _path_params["item_id"] = item_id + if board_id is not None: + _path_params["board_id"] = board_id # process the query parameters - if tag_id is not None: - - _query_params.append(("tag_id", tag_id)) - # process the header parameters # process the form parameters # process the body parameter + if tag_create_request is not None: + _body_params = tag_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id_PlatformTags}/items/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id}/tags", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24669,13 +25960,12 @@ def _remove_tag_from_item_serialize( ) @validate_call - def update_tag( + def delete_tag( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update a specific tag.") + StrictStr, Field(description="Unique identifier (ID) of the board where you want to delete a specific tag.") ], - tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to update.")], - tag_update_request: TagUpdateRequest, + tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to delete.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24685,17 +25975,15 @@ def update_tag( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TagWithLinks: - """Update tag + ) -> object: + """Delete tag - Updates a tag based on the data properties provided in the request body.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
+ Deletes the specified tag from the board. The tag is also removed from all cards and sticky notes on the board.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Update tag](https://developers.miro.com/reference/update-tag).

Required scope

boards:write

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board where you want to update a specific tag. (required) + :param board_id: Unique identifier (ID) of the board where you want to delete a specific tag. (required) :type board_id: str - :param tag_id: Unique identifier (ID) of the tag that you want to update. (required) + :param tag_id: Unique identifier (ID) of the tag that you want to delete. (required) :type tag_id: str - :param tag_update_request: (required) - :type tag_update_request: TagUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24718,10 +26006,9 @@ def update_tag( :return: Returns the result object. """ # noqa: E501 - _param = self._update_tag_serialize( + _param = self._delete_tag_serialize( board_id=board_id, tag_id=tag_id, - tag_update_request=tag_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24729,7 +26016,7 @@ def update_tag( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TagWithLinks", + "204": "object", "400": "GetTagsFromItem400Response", "404": "GetTagsFromItem400Response", "429": "GetTagsFromItem400Response", @@ -24741,11 +26028,10 @@ def update_tag( response_types_map=_response_types_map, ).data - def _update_tag_serialize( + def _delete_tag_serialize( self, board_id, tag_id, - tag_update_request, _request_auth, _content_type, _headers, @@ -24772,25 +26058,15 @@ def _update_tag_serialize( # process the header parameters # process the form parameters # process the body parameter - if tag_update_request is not None: - _body_params = tag_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", + method="DELETE", resource_path="/v2/boards/{board_id}/tags/{tag_id}", path_params=_path_params, query_params=_query_params, @@ -24805,12 +26081,15 @@ def _update_tag_serialize( ) @validate_call - def create_text_item( + def get_items_by_tag( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + board_id_platform_tags: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board where you want to retrieve a specific tag."), ], - text_create_request: TextCreateRequest, + tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to retrieve.")], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + offset: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24820,15 +26099,19 @@ def create_text_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TextItem: - """Create text item + ) -> ItemPagedResponse: + """Get items by tag - Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board where you want to create the item. (required) - :type board_id: str - :param text_create_request: (required) - :type text_create_request: TextCreateRequest + :param board_id_platform_tags: Unique identifier (ID) of the board where you want to retrieve a specific tag. (required) + :type board_id_platform_tags: str + :param tag_id: Unique identifier (ID) of the tag that you want to retrieve. (required) + :type tag_id: str + :param limit: + :type limit: str + :param offset: + :type offset: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24851,9 +26134,11 @@ def create_text_item( :return: Returns the result object. """ # noqa: E501 - _param = self._create_text_item_serialize( - board_id=board_id, - text_create_request=text_create_request, + _param = self._get_items_by_tag_serialize( + board_id_platform_tags=board_id_platform_tags, + tag_id=tag_id, + limit=limit, + offset=offset, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24861,10 +26146,10 @@ def create_text_item( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TextItem", - "400": None, - "404": None, - "429": None, + "200": "ItemPagedResponse", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -24873,10 +26158,12 @@ def create_text_item( response_types_map=_response_types_map, ).data - def _create_text_item_serialize( + def _get_items_by_tag_serialize( self, - board_id, - text_create_request, + board_id_platform_tags, + tag_id, + limit, + offset, _request_auth, _content_type, _headers, @@ -24895,32 +26182,34 @@ def _create_text_item_serialize( _body_params: Optional[bytes] = None # process the path parameters - if board_id is not None: - _path_params["board_id"] = board_id + if board_id_platform_tags is not None: + _path_params["board_id_PlatformTags"] = board_id_platform_tags # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if offset is not None: + + _query_params.append(("offset", offset)) + + if tag_id is not None: + + _query_params.append(("tag_id", tag_id)) + # process the header parameters # process the form parameters # process the body parameter - if text_create_request is not None: - _body_params = text_create_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id}/texts", + method="GET", + resource_path="/v2/boards/{board_id_PlatformTags}/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -24934,12 +26223,13 @@ def _create_text_item_serialize( ) @validate_call - def delete_text_item( + def get_tag( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board from which you want to delete the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board where you want to retrieve a specific tag."), ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to delete.")], + tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to retrieve.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -24949,15 +26239,15 @@ def delete_text_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete text item + ) -> TagWithLinks: + """Get tag - Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
+ Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board from which you want to delete the item. (required) + :param board_id: Unique identifier (ID) of the board where you want to retrieve a specific tag. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to delete. (required) - :type item_id: str + :param tag_id: Unique identifier (ID) of the tag that you want to retrieve. (required) + :type tag_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -24980,9 +26270,9 @@ def delete_text_item( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_text_item_serialize( + _param = self._get_tag_serialize( board_id=board_id, - item_id=item_id, + tag_id=tag_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -24990,10 +26280,10 @@ def delete_text_item( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": None, - "404": None, - "429": None, + "200": "TagWithLinks", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -25002,10 +26292,10 @@ def delete_text_item( response_types_map=_response_types_map, ).data - def _delete_text_item_serialize( + def _get_tag_serialize( self, board_id, - item_id, + tag_id, _request_auth, _content_type, _headers, @@ -25026,8 +26316,8 @@ def _delete_text_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id + if tag_id is not None: + _path_params["tag_id"] = tag_id # process the query parameters # process the header parameters # process the form parameters @@ -25040,8 +26330,8 @@ def _delete_text_item_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v2/boards/{board_id}/texts/{item_id}", + method="GET", + resource_path="/v2/boards/{board_id}/tags/{tag_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -25055,15 +26345,13 @@ def _delete_text_item_serialize( ) @validate_call - def get_text_item( + def get_tags_from_board( self, board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), - ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") + StrictStr, Field(description="Unique identifier (ID) of the board whose tags you want to retrieve.") ], + limit: Optional[Annotated[str, Field(strict=True)]] = None, + offset: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -25073,15 +26361,17 @@ def get_text_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TextItem: - """Get text item + ) -> TagsPagedResponse: + """Get tags from board - Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves all the tags from the specified board.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) + :param board_id: Unique identifier (ID) of the board whose tags you want to retrieve. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to retrieve. (required) - :type item_id: str + :param limit: + :type limit: str + :param offset: + :type offset: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -25104,9 +26394,10 @@ def get_text_item( :return: Returns the result object. """ # noqa: E501 - _param = self._get_text_item_serialize( + _param = self._get_tags_from_board_serialize( board_id=board_id, - item_id=item_id, + limit=limit, + offset=offset, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -25114,10 +26405,10 @@ def get_text_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TextItem", - "400": None, - "404": None, - "429": None, + "200": "TagsPagedResponse", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -25126,10 +26417,11 @@ def get_text_item( response_types_map=_response_types_map, ).data - def _get_text_item_serialize( + def _get_tags_from_board_serialize( self, board_id, - item_id, + limit, + offset, _request_auth, _content_type, _headers, @@ -25150,9 +26442,15 @@ def _get_text_item_serialize( # process the path parameters if board_id is not None: _path_params["board_id"] = board_id - if item_id is not None: - _path_params["item_id"] = item_id # process the query parameters + if limit is not None: + + _query_params.append(("limit", limit)) + + if offset is not None: + + _query_params.append(("offset", offset)) + # process the header parameters # process the form parameters # process the body parameter @@ -25165,7 +26463,7 @@ def _get_text_item_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/boards/{board_id}/texts/{item_id}", + resource_path="/v2/boards/{board_id}/tags", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -25179,13 +26477,15 @@ def _get_text_item_serialize( ) @validate_call - def update_text_item( + def get_tags_from_item( self, board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to update the item.") + StrictStr, + Field(description="Unique identifier (ID) of the board with the item whose tags you want to retrieve."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item whose tags you want to retrieve.") ], - item_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the item that you want to update.")], - text_update_request: TextUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -25195,17 +26495,15 @@ def update_text_item( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TextItem: - """Update text item + ) -> GetTagsResponse: + """Get tags from item - Updates a text item on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
- :param board_id: Unique identifier (ID) of the board where you want to update the item. (required) + :param board_id: Unique identifier (ID) of the board with the item whose tags you want to retrieve. (required) :type board_id: str - :param item_id: Unique identifier (ID) of the item that you want to update. (required) + :param item_id: Unique identifier (ID) of the item whose tags you want to retrieve. (required) :type item_id: str - :param text_update_request: (required) - :type text_update_request: TextUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -25228,10 +26526,9 @@ def update_text_item( :return: Returns the result object. """ # noqa: E501 - _param = self._update_text_item_serialize( + _param = self._get_tags_from_item_serialize( board_id=board_id, item_id=item_id, - text_update_request=text_update_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -25239,11 +26536,10 @@ def update_text_item( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TextItem", - "400": None, - "404": None, - "409": None, - "429": None, + "200": "GetTagsResponse", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -25252,11 +26548,10 @@ def update_text_item( response_types_map=_response_types_map, ).data - def _update_text_item_serialize( + def _get_tags_from_item_serialize( self, board_id, item_id, - text_update_request, _request_auth, _content_type, _headers, @@ -25283,26 +26578,16 @@ def _update_text_item_serialize( # process the header parameters # process the form parameters # process the body parameter - if text_update_request is not None: - _body_params = text_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type - # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/boards/{board_id}/texts/{item_id}", + method="GET", + resource_path="/v2/boards/{board_id}/items/{item_id}/tags", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -25316,9 +26601,18 @@ def _update_text_item_serialize( ) @validate_call - def revoke_token( + def remove_tag_from_item( self, - access_token: Annotated[StrictStr, Field(description="Access token that you want to revoke")], + board_id_platform_tags: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board with the item that you want to remove a tag from."), + ], + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to remove the tag from.") + ], + tag_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the tag that you want to remove from the item.") + ], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -25328,13 +26622,17 @@ def revoke_token( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """(Deprecated) Revoke token (v1) + ) -> object: + """Remove tag from item -

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated due to access token passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. + Removes the specified tag from the specified item. The tag still exists on the board.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Update tag](https://developers.miro.com/reference/update-tag), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
- :param access_token: Access token that you want to revoke (required) - :type access_token: str + :param board_id_platform_tags: Unique identifier (ID) of the board with the item that you want to remove a tag from. (required) + :type board_id_platform_tags: str + :param item_id: Unique identifier (ID) of the item that you want to remove the tag from. (required) + :type item_id: str + :param tag_id: Unique identifier (ID) of the tag that you want to remove from the item. (required) + :type tag_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -25356,10 +26654,11 @@ def revoke_token( :type _host_index: int, optional :return: Returns the result object. """ # noqa: E501 - warnings.warn("POST /v1/oauth/revoke is deprecated.", DeprecationWarning) - _param = self._revoke_token_serialize( - access_token=access_token, + _param = self._remove_tag_from_item_serialize( + board_id_platform_tags=board_id_platform_tags, + item_id=item_id, + tag_id=tag_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -25367,8 +26666,10 @@ def revoke_token( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": None, + "204": "object", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -25377,9 +26678,11 @@ def revoke_token( response_types_map=_response_types_map, ).data - def _revoke_token_serialize( + def _remove_tag_from_item_serialize( self, - access_token, + board_id_platform_tags, + item_id, + tag_id, _request_auth, _content_type, _headers, @@ -25398,21 +26701,28 @@ def _revoke_token_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id_platform_tags is not None: + _path_params["board_id_PlatformTags"] = board_id_platform_tags + if item_id is not None: + _path_params["item_id"] = item_id # process the query parameters - if access_token is not None: + if tag_id is not None: - _query_params.append(("access_token", access_token)) + _query_params.append(("tag_id", tag_id)) # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v1/oauth/revoke", + method="DELETE", + resource_path="/v2/boards/{board_id_PlatformTags}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -25426,8 +26736,13 @@ def _revoke_token_serialize( ) @validate_call - def token_info( + def update_tag( self, + board_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the board where you want to update a specific tag.") + ], + tag_id: Annotated[StrictStr, Field(description="Unique identifier (ID) of the tag that you want to update.")], + tag_update_request: TagUpdateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -25437,11 +26752,17 @@ def token_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> TokenInformation: - """Get access token information + ) -> TagWithLinks: + """Update tag - Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token. + Updates a tag based on the data properties provided in the request body.
Note: Updates to tags made via the REST API will not be reflected on the board in realtime. To see REST API updates to tags on a board, you need to refresh the board. This applies to the following endpoints: [Attach tag to item](https://developers.miro.com/reference/attach-tag-to-item), [Remove tag from item](https://developers.miro.com/reference/remove-tag-from-item), [Delete tag](https://developers.miro.com/reference/delete-tag).

Required scope

boards:write

Rate limiting

Level 1
+ :param board_id: Unique identifier (ID) of the board where you want to update a specific tag. (required) + :type board_id: str + :param tag_id: Unique identifier (ID) of the tag that you want to update. (required) + :type tag_id: str + :param tag_update_request: (required) + :type tag_update_request: TagUpdateRequest :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -25464,13 +26785,21 @@ def token_info( :return: Returns the result object. """ # noqa: E501 - _param = self._token_info_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._update_tag_serialize( + board_id=board_id, + tag_id=tag_id, + tag_update_request=tag_update_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TokenInformation", - "400": None, + "200": "TagWithLinks", + "400": "GetTagsFromItem400Response", + "404": "GetTagsFromItem400Response", + "429": "GetTagsFromItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -25479,8 +26808,11 @@ def token_info( response_types_map=_response_types_map, ).data - def _token_info_serialize( + def _update_tag_serialize( self, + board_id, + tag_id, + tag_update_request, _request_auth, _content_type, _headers, @@ -25499,20 +26831,34 @@ def _token_info_serialize( _body_params: Optional[bytes] = None # process the path parameters + if board_id is not None: + _path_params["board_id"] = board_id + if tag_id is not None: + _path_params["tag_id"] = tag_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if tag_update_request is not None: + _body_params = tag_update_request # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + # set the HTTP header `Content-Type` + if _content_type: + _header_params["Content-Type"] = _content_type + else: + _default_content_type = self.api_client.select_header_content_type(["application/json"]) + if _default_content_type is not None: + _header_params["Content-Type"] = _default_content_type + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v1/oauth-token", + method="PATCH", + resource_path="/v2/boards/{board_id}/tags/{tag_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, diff --git a/packages/miro-api-python/miro_api/models/__init__.py b/packages/miro-api-python/miro_api/models/__init__.py index 2ed3faf40..d47a95531 100644 --- a/packages/miro-api-python/miro_api/models/__init__.py +++ b/packages/miro-api-python/miro_api/models/__init__.py @@ -13,9 +13,13 @@ """ # noqa: E501 # import models into model package +from miro_api.models.access_token_response import AccessTokenResponse from miro_api.models.actor import Actor from miro_api.models.add_project_member_request import AddProjectMemberRequest from miro_api.models.admin_role import AdminRole +from miro_api.models.ai_interaction_log import AiInteractionLog +from miro_api.models.ai_interaction_log_actor import AiInteractionLogActor +from miro_api.models.ai_interaction_log_object import AiInteractionLogObject from miro_api.models.app_card_create_request import AppCardCreateRequest from miro_api.models.app_card_data import AppCardData from miro_api.models.app_card_data_changes import AppCardDataChanges @@ -54,6 +58,7 @@ from miro_api.models.board_export_task_result import BoardExportTaskResult from miro_api.models.board_format import BoardFormat from miro_api.models.board_item_content_log import BoardItemContentLog +from miro_api.models.board_item_content_log_ai import BoardItemContentLogAI from miro_api.models.board_links import BoardLinks from miro_api.models.board_member import BoardMember from miro_api.models.board_member_changes import BoardMemberChanges @@ -87,6 +92,11 @@ from miro_api.models.card_update_request import CardUpdateRequest from miro_api.models.case_request import CaseRequest from miro_api.models.case_response import CaseResponse +from miro_api.models.code_widget_create_request import CodeWidgetCreateRequest +from miro_api.models.code_widget_cursor_paged import CodeWidgetCursorPaged +from miro_api.models.code_widget_data import CodeWidgetData +from miro_api.models.code_widget_item import CodeWidgetItem +from miro_api.models.code_widget_update_request import CodeWidgetUpdateRequest from miro_api.models.connector_changes_data import ConnectorChangesData from miro_api.models.connector_creation_data import ConnectorCreationData from miro_api.models.connector_style import ConnectorStyle @@ -201,6 +211,7 @@ GeometryPlatformcreateitemsinbulkusingfilefromdevice, ) from miro_api.models.geometry_platformgroups import GeometryPlatformgroups +from miro_api.models.get_ai_interaction_logs_response import GetAiInteractionLogsResponse from miro_api.models.get_all_groups200_response import GetAllGroups200Response from miro_api.models.get_all_groups400_response import GetAllGroups400Response from miro_api.models.get_all_groups404_response import GetAllGroups404Response @@ -280,6 +291,7 @@ from miro_api.models.mindmap_node_view import MindmapNodeView from miro_api.models.mindmap_style import MindmapStyle from miro_api.models.mindmap_widget_data_output import MindmapWidgetDataOutput +from miro_api.models.miro_ai import MiroAi from miro_api.models.modified_by import ModifiedBy from miro_api.models.modified_by_platform_containers import ModifiedByPlatformContainers from miro_api.models.modified_by_platform_experimental_features import ModifiedByPlatformExperimentalFeatures @@ -289,6 +301,7 @@ ModifiedByPlatformcreateitemsinbulkusingfilefromdevice, ) from miro_api.models.modified_by_platformgroups import ModifiedByPlatformgroups +from miro_api.models.o_embed_data import OEmbedData from miro_api.models.organization import Organization from miro_api.models.organization_information import OrganizationInformation from miro_api.models.organization_member import OrganizationMember @@ -415,7 +428,7 @@ from miro_api.models.text_item import TextItem from miro_api.models.text_style import TextStyle from miro_api.models.text_update_request import TextUpdateRequest -from miro_api.models.token_information import TokenInformation +from miro_api.models.token_context import TokenContext from miro_api.models.un_group400_response import UnGroup400Response from miro_api.models.un_group404_response import UnGroup404Response from miro_api.models.un_group429_response import UnGroup429Response @@ -446,6 +459,7 @@ from miro_api.models.user_info_last_opened_by import UserInfoLastOpenedBy from miro_api.models.user_info_short import UserInfoShort from miro_api.models.user_information import UserInformation +from miro_api.models.user_information1 import UserInformation1 from miro_api.models.user_list_response import UserListResponse from miro_api.models.user_resource import UserResource from miro_api.models.user_resource_emails_inner import UserResourceEmailsInner diff --git a/packages/miro-api-python/miro_api/models/access_token_response.py b/packages/miro-api-python/miro_api/models/access_token_response.py new file mode 100644 index 000000000..5b06e8b43 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/access_token_response.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class AccessTokenResponse(BaseModel): + """ + AccessTokenResponse + """ # noqa: E501 + + user_id: Optional[StrictStr] = None + expires_in: Optional[StrictInt] = None + team_id: Optional[StrictStr] = None + access_token: Optional[StrictStr] = None + scope: Optional[StrictStr] = None + refresh_token: Optional[StrictStr] = None + token_type: Optional[StrictStr] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "user_id", + "expires_in", + "team_id", + "access_token", + "scope", + "refresh_token", + "token_type", + ] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AccessTokenResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AccessTokenResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "user_id": obj.get("user_id"), + "expires_in": obj.get("expires_in"), + "team_id": obj.get("team_id"), + "access_token": obj.get("access_token"), + "scope": obj.get("scope"), + "refresh_token": obj.get("refresh_token"), + "token_type": obj.get("token_type"), + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/ai_interaction_log.py b/packages/miro-api-python/miro_api/models/ai_interaction_log.py new file mode 100644 index 000000000..89bc98e6a --- /dev/null +++ b/packages/miro-api-python/miro_api/models/ai_interaction_log.py @@ -0,0 +1,163 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.ai_interaction_log_actor import AiInteractionLogActor +from miro_api.models.ai_interaction_log_object import AiInteractionLogObject +from typing import Optional, Set +from typing_extensions import Self + + +class AiInteractionLog(BaseModel): + """ + Contains information about a single AI interaction log entry. + """ # noqa: E501 + + id: Optional[StrictStr] = Field(default=None, description="Unique identifier of the AI interaction log entry.") + created_at: Optional[datetime] = Field( + default=None, + description="Date and time when the AI interaction occurred.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). ", + alias="createdAt", + ) + stored_at: Optional[datetime] = Field( + default=None, + description="Date and time when the AI interaction log was stored.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). ", + alias="storedAt", + ) + session_id: Optional[StrictStr] = Field( + default=None, + description="Unique identifier of the session during which the AI interaction occurred.", + alias="sessionId", + ) + message_id: Optional[StrictStr] = Field( + default=None, + description="Unique identifier of the message associated with the AI interaction.", + alias="messageId", + ) + object: Optional[AiInteractionLogObject] = None + ai_feature_name: Optional[StrictStr] = Field( + default=None, description="Name of the AI feature that was used during the interaction.", alias="aiFeatureName" + ) + actor: Optional[AiInteractionLogActor] = None + log_type: Optional[StrictStr] = Field( + default=None, description="Type of the AI interaction log entry.", alias="logType" + ) + details: Optional[Dict[str, Any]] = Field( + default=None, + description="Additional details about the AI interaction. The structure of this object varies depending on the AI feature used. The text may contain unstructured data that could reveal information used in interactions with the LLM.", + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "id", + "createdAt", + "storedAt", + "sessionId", + "messageId", + "object", + "aiFeatureName", + "actor", + "logType", + "details", + ] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AiInteractionLog from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of object + if self.object: + _dict["object"] = self.object.to_dict() + # override the default output from pydantic by calling `to_dict()` of actor + if self.actor: + _dict["actor"] = self.actor.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AiInteractionLog from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "id": obj.get("id"), + "createdAt": obj.get("createdAt"), + "storedAt": obj.get("storedAt"), + "sessionId": obj.get("sessionId"), + "messageId": obj.get("messageId"), + "object": AiInteractionLogObject.from_dict(obj["object"]) if obj.get("object") is not None else None, + "aiFeatureName": obj.get("aiFeatureName"), + "actor": AiInteractionLogActor.from_dict(obj["actor"]) if obj.get("actor") is not None else None, + "logType": obj.get("logType"), + "details": obj.get("details"), + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/ai_interaction_log_actor.py b/packages/miro-api-python/miro_api/models/ai_interaction_log_actor.py new file mode 100644 index 000000000..ce3d5ab55 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/ai_interaction_log_actor.py @@ -0,0 +1,102 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class AiInteractionLogActor(BaseModel): + """ + Contains information about the user who performed the AI interaction. + """ # noqa: E501 + + id: Optional[StrictStr] = Field( + default=None, description="Unique identifier of the user who performed the AI interaction." + ) + email: Optional[StrictStr] = Field(default=None, description="Email of the user who performed the AI interaction.") + name: Optional[StrictStr] = Field(default=None, description="Name of the user who performed the AI interaction.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "email", "name"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AiInteractionLogActor from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AiInteractionLogActor from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"id": obj.get("id"), "email": obj.get("email"), "name": obj.get("name")}) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/ai_interaction_log_object.py b/packages/miro-api-python/miro_api/models/ai_interaction_log_object.py new file mode 100644 index 000000000..73b608877 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/ai_interaction_log_object.py @@ -0,0 +1,105 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class AiInteractionLogObject(BaseModel): + """ + Contains information about the Miro object involved in the AI interaction. + """ # noqa: E501 + + id: Optional[StrictStr] = Field( + default=None, + description="Unique identifier of the Miro object involved in the AI interaction, e.g., Board ID or Organization ID. ", + ) + type: Optional[StrictStr] = Field( + default=None, + description='Type of the Miro object involved in the AI interaction, e.g., "board, "organization".', + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "type"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AiInteractionLogObject from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AiInteractionLogObject from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"id": obj.get("id"), "type": obj.get("type")}) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/audit_event.py b/packages/miro-api-python/miro_api/models/audit_event.py index 3b4c420ec..77ac90bae 100644 --- a/packages/miro-api-python/miro_api/models/audit_event.py +++ b/packages/miro-api-python/miro_api/models/audit_event.py @@ -40,7 +40,7 @@ class AuditEvent(BaseModel): details: Optional[Dict[str, Any]] = Field(default=None, description="Details json related to the audit event") created_by: Optional[AuditCreatedBy] = Field(default=None, alias="createdBy") event: Optional[StrictStr] = Field(default=None, description="Event type of the audit event") - category: Optional[StrictStr] = Field(default=None, description="Event category of the audit event.") + category: Optional[StrictStr] = Field(default=None, description="Event category of the audit event") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = [ "id", diff --git a/packages/miro-api-python/miro_api/models/board_item_content_log.py b/packages/miro-api-python/miro_api/models/board_item_content_log.py index 0f577d31c..c7c926583 100644 --- a/packages/miro-api-python/miro_api/models/board_item_content_log.py +++ b/packages/miro-api-python/miro_api/models/board_item_content_log.py @@ -20,6 +20,7 @@ from pydantic import BaseModel, Field, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional from miro_api.models.actor import Actor +from miro_api.models.board_item_content_log_ai import BoardItemContentLogAI from miro_api.models.relationship import Relationship from typing import Optional, Set from typing_extensions import Self @@ -60,6 +61,7 @@ class BoardItemContentLog(BaseModel): relationships: Optional[List[Relationship]] = Field( default=None, description="Contains the list of items related to the current board item." ) + ai: Optional[BoardItemContentLogAI] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = [ "id", @@ -71,6 +73,7 @@ class BoardItemContentLog(BaseModel): "itemId", "state", "relationships", + "ai", ] @field_validator("action_type") @@ -145,6 +148,9 @@ def to_dict(self) -> Dict[str, Any]: if _item: _items.append(_item.to_dict()) _dict["relationships"] = _items + # override the default output from pydantic by calling `to_dict()` of ai + if self.ai: + _dict["ai"] = self.ai.to_dict() # puts key-value pairs in additional_properties in the top level if self.additional_properties is not None: for _key, _value in self.additional_properties.items(): @@ -176,6 +182,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if obj.get("relationships") is not None else None ), + "ai": BoardItemContentLogAI.from_dict(obj["ai"]) if obj.get("ai") is not None else None, } ) # store additional fields in additional_properties diff --git a/packages/miro-api-python/miro_api/models/board_item_content_log_ai.py b/packages/miro-api-python/miro_api/models/board_item_content_log_ai.py new file mode 100644 index 000000000..331bbf374 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_item_content_log_ai.py @@ -0,0 +1,100 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictBool +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class BoardItemContentLogAI(BaseModel): + """ + Contains AI-related information about the board content action. + """ # noqa: E501 + + assisted: Optional[StrictBool] = Field( + default=None, description="Indicates whether the content log was performed with AI assistance." + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["assisted"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of BoardItemContentLogAI from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of BoardItemContentLogAI from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"assisted": obj.get("assisted")}) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/board_with_links.py b/packages/miro-api-python/miro_api/models/board_with_links.py index 210096ae6..d2a0a325d 100644 --- a/packages/miro-api-python/miro_api/models/board_with_links.py +++ b/packages/miro-api-python/miro_api/models/board_with_links.py @@ -23,6 +23,7 @@ from miro_api.models.board_member import BoardMember from miro_api.models.board_policy import BoardPolicy from miro_api.models.board_project import BoardProject +from miro_api.models.organization import Organization from miro_api.models.picture import Picture from miro_api.models.team import Team from miro_api.models.user_info_short import UserInfoShort @@ -39,6 +40,7 @@ class BoardWithLinks(BaseModel): name: StrictStr = Field(description="Name of the board.") description: StrictStr = Field(description="Description of the board.") team: Optional[Team] = None + organization: Optional[Organization] = None project: Optional[BoardProject] = None picture: Optional[Picture] = None policy: Optional[BoardPolicy] = None @@ -65,6 +67,7 @@ class BoardWithLinks(BaseModel): "name", "description", "team", + "organization", "project", "picture", "policy", @@ -124,6 +127,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of team if self.team: _dict["team"] = self.team.to_dict() + # override the default output from pydantic by calling `to_dict()` of organization + if self.organization: + _dict["organization"] = self.organization.to_dict() # override the default output from pydantic by calling `to_dict()` of project if self.project: _dict["project"] = self.project.to_dict() @@ -170,6 +176,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "description": obj.get("description"), "team": Team.from_dict(obj["team"]) if obj.get("team") is not None else None, + "organization": ( + Organization.from_dict(obj["organization"]) if obj.get("organization") is not None else None + ), "project": BoardProject.from_dict(obj["project"]) if obj.get("project") is not None else None, "picture": Picture.from_dict(obj["picture"]) if obj.get("picture") is not None else None, "policy": BoardPolicy.from_dict(obj["policy"]) if obj.get("policy") is not None else None, diff --git a/packages/miro-api-python/miro_api/models/board_with_links_and_last_opened.py b/packages/miro-api-python/miro_api/models/board_with_links_and_last_opened.py index 5ea6f393e..bcc48dad0 100644 --- a/packages/miro-api-python/miro_api/models/board_with_links_and_last_opened.py +++ b/packages/miro-api-python/miro_api/models/board_with_links_and_last_opened.py @@ -24,6 +24,7 @@ from miro_api.models.board_policy import BoardPolicy from miro_api.models.board_project import BoardProject from miro_api.models.get_board_user_info_last_opened_by import GetBoardUserInfoLastOpenedBy +from miro_api.models.organization import Organization from miro_api.models.picture import Picture from miro_api.models.team import Team from miro_api.models.user_info_short import UserInfoShort @@ -40,6 +41,7 @@ class BoardWithLinksAndLastOpened(BaseModel): name: StrictStr = Field(description="Name of the board.") description: StrictStr = Field(description="Description of the board.") team: Optional[Team] = None + organization: Optional[Organization] = None project: Optional[BoardProject] = None picture: Optional[Picture] = None policy: Optional[BoardPolicy] = None @@ -72,6 +74,7 @@ class BoardWithLinksAndLastOpened(BaseModel): "name", "description", "team", + "organization", "project", "picture", "policy", @@ -133,6 +136,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of team if self.team: _dict["team"] = self.team.to_dict() + # override the default output from pydantic by calling `to_dict()` of organization + if self.organization: + _dict["organization"] = self.organization.to_dict() # override the default output from pydantic by calling `to_dict()` of project if self.project: _dict["project"] = self.project.to_dict() @@ -182,6 +188,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "description": obj.get("description"), "team": Team.from_dict(obj["team"]) if obj.get("team") is not None else None, + "organization": ( + Organization.from_dict(obj["organization"]) if obj.get("organization") is not None else None + ), "project": BoardProject.from_dict(obj["project"]) if obj.get("project") is not None else None, "picture": Picture.from_dict(obj["picture"]) if obj.get("picture") is not None else None, "policy": BoardPolicy.from_dict(obj["policy"]) if obj.get("policy") is not None else None, diff --git a/packages/miro-api-python/miro_api/models/board_with_links_and_without_project.py b/packages/miro-api-python/miro_api/models/board_with_links_and_without_project.py index ed5d64b2d..8ff5fc30e 100644 --- a/packages/miro-api-python/miro_api/models/board_with_links_and_without_project.py +++ b/packages/miro-api-python/miro_api/models/board_with_links_and_without_project.py @@ -22,6 +22,7 @@ from miro_api.models.board_links import BoardLinks from miro_api.models.board_member import BoardMember from miro_api.models.board_policy import BoardPolicy +from miro_api.models.organization import Organization from miro_api.models.picture import Picture from miro_api.models.team import Team from miro_api.models.user_info_short import UserInfoShort @@ -38,6 +39,7 @@ class BoardWithLinksAndWithoutProject(BaseModel): name: StrictStr = Field(description="Name of the board.") description: StrictStr = Field(description="Description of the board.") team: Optional[Team] = None + organization: Optional[Organization] = None picture: Optional[Picture] = None policy: Optional[BoardPolicy] = None view_link: Optional[StrictStr] = Field(default=None, description="URL to view the board.", alias="viewLink") @@ -63,6 +65,7 @@ class BoardWithLinksAndWithoutProject(BaseModel): "name", "description", "team", + "organization", "picture", "policy", "viewLink", @@ -121,6 +124,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of team if self.team: _dict["team"] = self.team.to_dict() + # override the default output from pydantic by calling `to_dict()` of organization + if self.organization: + _dict["organization"] = self.organization.to_dict() # override the default output from pydantic by calling `to_dict()` of picture if self.picture: _dict["picture"] = self.picture.to_dict() @@ -164,6 +170,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "description": obj.get("description"), "team": Team.from_dict(obj["team"]) if obj.get("team") is not None else None, + "organization": ( + Organization.from_dict(obj["organization"]) if obj.get("organization") is not None else None + ), "picture": Picture.from_dict(obj["picture"]) if obj.get("picture") is not None else None, "policy": BoardPolicy.from_dict(obj["policy"]) if obj.get("policy") is not None else None, "viewLink": obj.get("viewLink"), diff --git a/packages/miro-api-python/miro_api/models/code_widget_create_request.py b/packages/miro-api-python/miro_api/models/code_widget_create_request.py new file mode 100644 index 000000000..d237f2b88 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/code_widget_create_request.py @@ -0,0 +1,124 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.code_widget_data import CodeWidgetData +from miro_api.models.geometry import Geometry +from miro_api.models.parent import Parent +from miro_api.models.position_change import PositionChange +from typing import Optional, Set +from typing_extensions import Self + + +class CodeWidgetCreateRequest(BaseModel): + """ + CodeWidgetCreateRequest + """ # noqa: E501 + + data: Optional[CodeWidgetData] = None + position: Optional[PositionChange] = None + geometry: Optional[Geometry] = None + parent: Optional[Parent] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["data", "position", "geometry", "parent"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CodeWidgetCreateRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of data + if self.data: + _dict["data"] = self.data.to_dict() + # override the default output from pydantic by calling `to_dict()` of position + if self.position: + _dict["position"] = self.position.to_dict() + # override the default output from pydantic by calling `to_dict()` of geometry + if self.geometry: + _dict["geometry"] = self.geometry.to_dict() + # override the default output from pydantic by calling `to_dict()` of parent + if self.parent: + _dict["parent"] = self.parent.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CodeWidgetCreateRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "data": CodeWidgetData.from_dict(obj["data"]) if obj.get("data") is not None else None, + "position": PositionChange.from_dict(obj["position"]) if obj.get("position") is not None else None, + "geometry": Geometry.from_dict(obj["geometry"]) if obj.get("geometry") is not None else None, + "parent": Parent.from_dict(obj["parent"]) if obj.get("parent") is not None else None, + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/code_widget_cursor_paged.py b/packages/miro-api-python/miro_api/models/code_widget_cursor_paged.py new file mode 100644 index 000000000..acbcd20f3 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/code_widget_cursor_paged.py @@ -0,0 +1,137 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.code_widget_item import CodeWidgetItem +from miro_api.models.page_links import PageLinks +from typing import Optional, Set +from typing_extensions import Self + + +class CodeWidgetCursorPaged(BaseModel): + """ + CodeWidgetCursorPaged + """ # noqa: E501 + + data: Optional[List[CodeWidgetItem]] = Field(default=None, description="Contains the result data.") + total: Optional[StrictInt] = Field( + default=None, + description="Total number of results available. If the value of the `total` parameter is higher than the value of the `size` parameter, this means that there are more results that you can retrieve. To retrieve more results, you can make another request and set the `offset` value accordingly.", + ) + size: Optional[StrictInt] = Field( + default=None, + description="Number of results returned in the response considering the `cursor` and the `limit` values sent in the request.", + ) + cursor: Optional[StrictStr] = Field( + default=None, + description="A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the value returned in this parameter.", + ) + limit: Optional[StrictInt] = Field( + default=None, description="Maximum number of results returned based on the `limit` specified in the request." + ) + links: Optional[PageLinks] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["data", "total", "size", "cursor", "limit", "links"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CodeWidgetCursorPaged from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict["data"] = _items + # override the default output from pydantic by calling `to_dict()` of links + if self.links: + _dict["links"] = self.links.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CodeWidgetCursorPaged from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "data": ( + [CodeWidgetItem.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None + ), + "total": obj.get("total"), + "size": obj.get("size"), + "cursor": obj.get("cursor"), + "limit": obj.get("limit"), + "links": PageLinks.from_dict(obj["links"]) if obj.get("links") is not None else None, + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/code_widget_data.py b/packages/miro-api-python/miro_api/models/code_widget_data.py new file mode 100644 index 000000000..626bad417 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/code_widget_data.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + + +class CodeWidgetData(BaseModel): + """ + Contains the data properties of a code widget item, such as the code content, programming language, and display settings. + """ # noqa: E501 + + code: Optional[Annotated[str, Field(strict=True, max_length=30000)]] = Field( + default=None, description="The code content of the widget." + ) + language: Optional[StrictStr] = Field( + default=None, description="The programming language of the code content. Used for syntax highlighting." + ) + line_numbers_visible: Optional[StrictBool] = Field( + default=None, + description="Indicates whether line numbers are visible in the code widget.", + alias="lineNumbersVisible", + ) + title: Optional[Annotated[str, Field(strict=True, max_length=100)]] = Field( + default=None, description="The title of the code widget." + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["code", "language", "lineNumbersVisible", "title"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CodeWidgetData from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CodeWidgetData from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "code": obj.get("code"), + "language": obj.get("language"), + "lineNumbersVisible": obj.get("lineNumbersVisible"), + "title": obj.get("title"), + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/code_widget_item.py b/packages/miro-api-python/miro_api/models/code_widget_item.py new file mode 100644 index 000000000..e8f79b247 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/code_widget_item.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.code_widget_data import CodeWidgetData +from miro_api.models.created_by import CreatedBy +from miro_api.models.geometry import Geometry +from miro_api.models.modified_by import ModifiedBy +from miro_api.models.position import Position +from miro_api.models.widget_links import WidgetLinks +from typing import Optional, Set +from typing_extensions import Self + + +class CodeWidgetItem(BaseModel): + """ + CodeWidgetItem + """ # noqa: E501 + + id: StrictStr = Field(description="Unique identifier (ID) of an item.") + data: Optional[CodeWidgetData] = None + position: Optional[Position] = None + geometry: Optional[Geometry] = None + created_at: Optional[datetime] = Field( + default=None, + description="Date and time when the item was created.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).", + alias="createdAt", + ) + created_by: Optional[CreatedBy] = Field(default=None, alias="createdBy") + modified_at: Optional[datetime] = Field( + default=None, + description="Date and time when the item was last modified.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).", + alias="modifiedAt", + ) + modified_by: Optional[ModifiedBy] = Field(default=None, alias="modifiedBy") + links: Optional[WidgetLinks] = None + type: StrictStr = Field(description="Type of item that is returned.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "id", + "data", + "position", + "geometry", + "createdAt", + "createdBy", + "modifiedAt", + "modifiedBy", + "links", + "type", + ] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CodeWidgetItem from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of data + if self.data: + _dict["data"] = self.data.to_dict() + # override the default output from pydantic by calling `to_dict()` of position + if self.position: + _dict["position"] = self.position.to_dict() + # override the default output from pydantic by calling `to_dict()` of geometry + if self.geometry: + _dict["geometry"] = self.geometry.to_dict() + # override the default output from pydantic by calling `to_dict()` of created_by + if self.created_by: + _dict["createdBy"] = self.created_by.to_dict() + # override the default output from pydantic by calling `to_dict()` of modified_by + if self.modified_by: + _dict["modifiedBy"] = self.modified_by.to_dict() + # override the default output from pydantic by calling `to_dict()` of links + if self.links: + _dict["links"] = self.links.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CodeWidgetItem from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "id": obj.get("id"), + "data": CodeWidgetData.from_dict(obj["data"]) if obj.get("data") is not None else None, + "position": Position.from_dict(obj["position"]) if obj.get("position") is not None else None, + "geometry": Geometry.from_dict(obj["geometry"]) if obj.get("geometry") is not None else None, + "createdAt": obj.get("createdAt"), + "createdBy": CreatedBy.from_dict(obj["createdBy"]) if obj.get("createdBy") is not None else None, + "modifiedAt": obj.get("modifiedAt"), + "modifiedBy": ModifiedBy.from_dict(obj["modifiedBy"]) if obj.get("modifiedBy") is not None else None, + "links": WidgetLinks.from_dict(obj["links"]) if obj.get("links") is not None else None, + "type": obj.get("type"), + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/code_widget_update_request.py b/packages/miro-api-python/miro_api/models/code_widget_update_request.py new file mode 100644 index 000000000..a387f385d --- /dev/null +++ b/packages/miro-api-python/miro_api/models/code_widget_update_request.py @@ -0,0 +1,124 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.code_widget_data import CodeWidgetData +from miro_api.models.geometry import Geometry +from miro_api.models.parent import Parent +from miro_api.models.position_change import PositionChange +from typing import Optional, Set +from typing_extensions import Self + + +class CodeWidgetUpdateRequest(BaseModel): + """ + CodeWidgetUpdateRequest + """ # noqa: E501 + + data: Optional[CodeWidgetData] = None + position: Optional[PositionChange] = None + geometry: Optional[Geometry] = None + parent: Optional[Parent] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["data", "position", "geometry", "parent"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CodeWidgetUpdateRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of data + if self.data: + _dict["data"] = self.data.to_dict() + # override the default output from pydantic by calling `to_dict()` of position + if self.position: + _dict["position"] = self.position.to_dict() + # override the default output from pydantic by calling `to_dict()` of geometry + if self.geometry: + _dict["geometry"] = self.geometry.to_dict() + # override the default output from pydantic by calling `to_dict()` of parent + if self.parent: + _dict["parent"] = self.parent.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CodeWidgetUpdateRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "data": CodeWidgetData.from_dict(obj["data"]) if obj.get("data") is not None else None, + "position": PositionChange.from_dict(obj["position"]) if obj.get("position") is not None else None, + "geometry": Geometry.from_dict(obj["geometry"]) if obj.get("geometry") is not None else None, + "parent": Parent.from_dict(obj["parent"]) if obj.get("parent") is not None else None, + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/create_board_export_request.py b/packages/miro-api-python/miro_api/models/create_board_export_request.py index a63f94adc..7a0e4f707 100644 --- a/packages/miro-api-python/miro_api/models/create_board_export_request.py +++ b/packages/miro-api-python/miro_api/models/create_board_export_request.py @@ -26,11 +26,13 @@ class CreateBoardExportRequest(BaseModel): """ - List of board IDs to be exported. + List of board IDs to be exported. Each export job can contain up to 1,000 boards. """ # noqa: E501 - board_ids: Optional[Annotated[List[StrictStr], Field(min_length=1, max_length=50)]] = Field( - default=None, description="List of board IDs to be exported.", alias="boardIds" + board_ids: Optional[Annotated[List[StrictStr], Field(min_length=1, max_length=1000)]] = Field( + default=None, + description="List of board IDs to be exported. Each export job can contain up to 1,000 boards.", + alias="boardIds", ) board_format: Optional[BoardFormat] = Field(default=None, alias="boardFormat") additional_properties: Dict[str, Any] = {} diff --git a/packages/miro-api-python/miro_api/models/create_user_resource.py b/packages/miro-api-python/miro_api/models/create_user_resource.py index 6067294a5..300a39586 100644 --- a/packages/miro-api-python/miro_api/models/create_user_resource.py +++ b/packages/miro-api-python/miro_api/models/create_user_resource.py @@ -49,7 +49,7 @@ class CreateUserResource(BaseModel): ) user_type: Optional[StrictStr] = Field( default=None, - description="Free-form string to indicate the user license type in the organization.

Only supported values for licenses are allowed. Supported licences for organizations can vary. They can potentially have the following values: Full, Free, Free Restricted, Full (Trial), Basic.

Note: When `userType` is specified, the `userType` license is set per the value provided. When `userType` is not specified, the user license is set according to internal Miro logic, which depends on the organization plan.", + description="Free-form string to indicate the user license type in the organization.

Only supported values for license types are allowed. Supported license types can vary per organization. An organization can have one or more of the following license type values: Full, Free, Free Restricted, Full (Trial), Basic, Standard, Advanced.

Note: When `userType` is specified, the `userType` license is set per the value provided. When `userType` is not specified, the user license is set according to internal Miro logic, which depends on the organization plan.", alias="userType", ) active: Optional[StrictBool] = Field( diff --git a/packages/miro-api-python/miro_api/models/get_ai_interaction_logs_response.py b/packages/miro-api-python/miro_api/models/get_ai_interaction_logs_response.py new file mode 100644 index 000000000..537815a80 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/get_ai_interaction_logs_response.py @@ -0,0 +1,133 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.ai_interaction_log import AiInteractionLog +from typing import Optional, Set +from typing_extensions import Self + + +class GetAiInteractionLogsResponse(BaseModel): + """ + Response for query using cursor and filter parameters. + """ # noqa: E501 + + limit: Optional[StrictInt] = Field( + default=None, + description="The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. ", + ) + size: Optional[StrictInt] = Field( + default=None, + description="Number of results returned in the response considering the cursor and the limit values sent in the request. For example, if there are 20 results, the request does not have a cursor value, and the limit set to 10, the size of the results will be 10. In this example, the response will also return a cursor value that can be used to retrieve the next set of 10 remaining results in the collection. ", + ) + data: Optional[List[AiInteractionLog]] = Field( + default=None, description="Contains the list of AI interaction logs." + ) + cursor: Optional[StrictStr] = Field( + default=None, + description="Indicator of the position of the next page of the result. To retrieve the next page, make another query setting its cursor field to the value returned by the current query. If the value is empty, there are no more pages to fetch. ", + ) + type: Optional[StrictStr] = Field(default="cursor-list", description="Type of the object returned.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["limit", "size", "data", "cursor", "type"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetAiInteractionLogsResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict["data"] = _items + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetAiInteractionLogsResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "limit": obj.get("limit"), + "size": obj.get("size"), + "data": ( + [AiInteractionLog.from_dict(_item) for _item in obj["data"]] + if obj.get("data") is not None + else None + ), + "cursor": obj.get("cursor"), + "type": obj.get("type") if obj.get("type") is not None else "cursor-list", + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/miro_ai.py b/packages/miro-api-python/miro_api/models/miro_ai.py new file mode 100644 index 000000000..2c2277bde --- /dev/null +++ b/packages/miro-api-python/miro_api/models/miro_ai.py @@ -0,0 +1,108 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, Field, StrictBool +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class MiroAi(BaseModel): + """ + Contains information about whether the item was created or modified with AI assistance. + """ # noqa: E501 + + created_with_ai: Optional[StrictBool] = Field( + default=None, description="Indicates whether the item was created with AI assistance.", alias="createdWithAi" + ) + last_modified_at: Optional[datetime] = Field( + default=None, + description="Date and time when the item was last modified using AI.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).", + alias="lastModifiedAt", + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["createdWithAi", "lastModifiedAt"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of MiroAi from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of MiroAi from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + {"createdWithAi": obj.get("createdWithAi"), "lastModifiedAt": obj.get("lastModifiedAt")} + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/o_embed_data.py b/packages/miro-api-python/miro_api/models/o_embed_data.py new file mode 100644 index 000000000..652c2ee82 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/o_embed_data.py @@ -0,0 +1,165 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class OEmbedData(BaseModel): + """ + Data used to embed a Miro board. + """ # noqa: E501 + + html: Optional[StrictStr] = Field(default=None, description="HTML code to embed the board.") + title: Optional[StrictStr] = Field( + default=None, + description="The title of the board, if the board is publicly available. Otherwise, it displays a placeholder.", + ) + author: Optional[StrictStr] = Field( + default=None, + description="The user who owns the board, if the board is publicly available. Otherwise, the field is empty.", + ) + version: Optional[StrictStr] = None + type: Optional[StrictStr] = Field( + default=None, description="The embed type. For this endpoint, the embed type is always `rich`." + ) + thumbnail_url: Optional[StrictStr] = Field( + default=None, description="The URL pointing to a thumbnail image of the board." + ) + thumbnail_width: Optional[StrictInt] = Field( + default=None, + description="The width of the thumbnail image of the board in pixels, if the thumbnail is available.", + ) + thumbnail_height: Optional[StrictInt] = Field( + default=None, + description="The height of the thumbnail image of the board in pixels, if the thumbnail is available.", + ) + width: Optional[StrictInt] = Field( + default=None, + description="The explicit width of the embed, in pixels. If you want the iframe containing the embed to use all the available width, you can ignore this field.", + ) + height: Optional[StrictInt] = Field( + default=None, + description="The explicit height of the embed, in pixels. If you want the iframe containing the embed to use all the available height, you can ignore this field.", + ) + provider_name: Optional[StrictStr] = Field( + default=None, + description="The name of the oEmbed provider. For this endpoint, the provider name is always 'Miro'.", + ) + provider_url: Optional[StrictStr] = Field( + default=None, + description="The URL of the oEmbed provider. For this endpoint, the URL always points to a Miro domain.", + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "html", + "title", + "author", + "version", + "type", + "thumbnail_url", + "thumbnail_width", + "thumbnail_height", + "width", + "height", + "provider_name", + "provider_url", + ] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of OEmbedData from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of OEmbedData from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "html": obj.get("html"), + "title": obj.get("title"), + "author": obj.get("author"), + "version": obj.get("version"), + "type": obj.get("type"), + "thumbnail_url": obj.get("thumbnail_url"), + "thumbnail_width": obj.get("thumbnail_width"), + "thumbnail_height": obj.get("thumbnail_height"), + "width": obj.get("width"), + "height": obj.get("height"), + "provider_name": obj.get("provider_name"), + "provider_url": obj.get("provider_url"), + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/organization.py b/packages/miro-api-python/miro_api/models/organization.py index be38a6e2c..5dc624fe1 100644 --- a/packages/miro-api-python/miro_api/models/organization.py +++ b/packages/miro-api-python/miro_api/models/organization.py @@ -16,47 +16,20 @@ import re # noqa: F401 import json -from pydantic import BaseModel, Field, StrictInt, StrictStr, field_validator -from typing import Any, ClassVar, Dict, List, Optional +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List from typing import Optional, Set from typing_extensions import Self class Organization(BaseModel): """ - Organization + Contains information about the organization with which the board is associated. """ # noqa: E501 - id: StrictStr = Field(description="Id of the organization") - full_licenses_purchased: StrictInt = Field(description="Purchased FULL licenses", alias="fullLicensesPurchased") - name: StrictStr = Field(description="Name of the organization") - plan: StrictStr = Field(description="Organization plan type") - type: Optional[StrictStr] = Field(default="organization", description="Type of the object returned.") + id: StrictStr = Field(description="Unique identifier (ID) of the organization.") additional_properties: Dict[str, Any] = {} - __properties: ClassVar[List[str]] = ["id", "fullLicensesPurchased", "name", "plan", "type"] - - @field_validator("plan") - def plan_validate_enum(cls, value): - """Validates the enum""" - if value not in set( - [ - "company", - "consultant", - "consultant_slf", - "business", - "paid_team_org", - "integration_org", - "professional_2022", - "edu_team_org", - "free_team_org", - "dev_team_org", - "unknown", - ] - ): - raise ValueError( - "must be one of enum values ('company', 'consultant', 'consultant_slf', 'business', 'paid_team_org', 'integration_org', 'professional_2022', 'edu_team_org', 'free_team_org', 'dev_team_org', 'unknown')" - ) - return value + __properties: ClassVar[List[str]] = ["id"] model_config = { "populate_by_name": True, @@ -116,15 +89,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if not isinstance(obj, dict): return cls.model_validate(obj) - _obj = cls.model_validate( - { - "id": obj.get("id"), - "fullLicensesPurchased": obj.get("fullLicensesPurchased"), - "name": obj.get("name"), - "plan": obj.get("plan"), - "type": obj.get("type") if obj.get("type") is not None else "organization", - } - ) + _obj = cls.model_validate({"id": obj.get("id")}) # store additional fields in additional_properties for _key in obj.keys(): if _key not in cls.__properties: diff --git a/packages/miro-api-python/miro_api/models/organization_information.py b/packages/miro-api-python/miro_api/models/organization_information.py index e593b1282..90450a5b1 100644 --- a/packages/miro-api-python/miro_api/models/organization_information.py +++ b/packages/miro-api-python/miro_api/models/organization_information.py @@ -17,7 +17,7 @@ import json from pydantic import BaseModel, StrictStr -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set from typing_extensions import Self @@ -27,9 +27,9 @@ class OrganizationInformation(BaseModel): OrganizationInformation """ # noqa: E501 - type: StrictStr - name: StrictStr - id: StrictStr + type: Optional[StrictStr] = None + name: Optional[StrictStr] = None + id: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["type", "name", "id"] diff --git a/packages/miro-api-python/miro_api/models/organization_member.py b/packages/miro-api-python/miro_api/models/organization_member.py index fc4b55ae4..f497b31a3 100644 --- a/packages/miro-api-python/miro_api/models/organization_member.py +++ b/packages/miro-api-python/miro_api/models/organization_member.py @@ -64,9 +64,11 @@ class OrganizationMember(BaseModel): @field_validator("license") def license_validate_enum(cls, value): """Validates the enum""" - if value not in set(["full", "occasional", "free", "free_restricted", "full_trial", "unknown"]): + if value not in set( + ["advanced", "standard", "basic", "full", "occasional", "free", "free_restricted", "full_trial", "unknown"] + ): raise ValueError( - "must be one of enum values ('full', 'occasional', 'free', 'free_restricted', 'full_trial', 'unknown')" + "must be one of enum values ('advanced', 'standard', 'basic', 'full', 'occasional', 'free', 'free_restricted', 'full_trial', 'unknown')" ) return value diff --git a/packages/miro-api-python/miro_api/models/team_information.py b/packages/miro-api-python/miro_api/models/team_information.py index a5e764744..5f1fcc5f1 100644 --- a/packages/miro-api-python/miro_api/models/team_information.py +++ b/packages/miro-api-python/miro_api/models/team_information.py @@ -17,7 +17,7 @@ import json from pydantic import BaseModel, StrictStr -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set from typing_extensions import Self @@ -27,9 +27,9 @@ class TeamInformation(BaseModel): TeamInformation """ # noqa: E501 - type: StrictStr - name: StrictStr - id: StrictStr + type: Optional[StrictStr] = None + name: Optional[StrictStr] = None + id: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["type", "name", "id"] diff --git a/packages/miro-api-python/miro_api/models/token_context.py b/packages/miro-api-python/miro_api/models/token_context.py new file mode 100644 index 000000000..192b37b1a --- /dev/null +++ b/packages/miro-api-python/miro_api/models/token_context.py @@ -0,0 +1,132 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.organization_information import OrganizationInformation +from miro_api.models.team_information import TeamInformation +from miro_api.models.user_information import UserInformation +from miro_api.models.user_information1 import UserInformation1 +from typing import Optional, Set +from typing_extensions import Self + + +class TokenContext(BaseModel): + """ + TokenContext + """ # noqa: E501 + + type: Optional[StrictStr] = None + team: Optional[TeamInformation] = None + created_by: Optional[UserInformation] = Field(default=None, alias="createdBy") + scopes: Optional[List[StrictStr]] = None + organization: Optional[OrganizationInformation] = None + user: Optional[UserInformation1] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["type", "team", "createdBy", "scopes", "organization", "user"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of TokenContext from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of team + if self.team: + _dict["team"] = self.team.to_dict() + # override the default output from pydantic by calling `to_dict()` of created_by + if self.created_by: + _dict["createdBy"] = self.created_by.to_dict() + # override the default output from pydantic by calling `to_dict()` of organization + if self.organization: + _dict["organization"] = self.organization.to_dict() + # override the default output from pydantic by calling `to_dict()` of user + if self.user: + _dict["user"] = self.user.to_dict() + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of TokenContext from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "type": obj.get("type"), + "team": TeamInformation.from_dict(obj["team"]) if obj.get("team") is not None else None, + "createdBy": UserInformation.from_dict(obj["createdBy"]) if obj.get("createdBy") is not None else None, + "scopes": obj.get("scopes"), + "organization": ( + OrganizationInformation.from_dict(obj["organization"]) + if obj.get("organization") is not None + else None + ), + "user": UserInformation1.from_dict(obj["user"]) if obj.get("user") is not None else None, + } + ) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api-python/miro_api/models/update_user_group_members_request.py b/packages/miro-api-python/miro_api/models/update_user_group_members_request.py index d2f8dcffa..a6daf41e4 100644 --- a/packages/miro-api-python/miro_api/models/update_user_group_members_request.py +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_request.py @@ -28,10 +28,14 @@ class UpdateUserGroupMembersRequest(BaseModel): """ # noqa: E501 members_to_add: Optional[List[StrictStr]] = Field( - default=None, description="List of user emails to add to the user group.", alias="membersToAdd" + default=None, + description="List of user identifiers (can be email or ID) to add to the user group.", + alias="membersToAdd", ) members_to_remove: Optional[List[StrictStr]] = Field( - default=None, description="List of user emails to remove from the user group.", alias="membersToRemove" + default=None, + description="List of user identifiers (can be email or ID) to remove from the user group.", + alias="membersToRemove", ) additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["membersToAdd", "membersToRemove"] diff --git a/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py index 579377c1e..ab1c2bc55 100644 --- a/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py @@ -30,7 +30,7 @@ class UpdateUserGroupMembersResultError(BaseModel): """ # noqa: E501 operation: Optional[UpdateUserGroupMembersResultOperation] = None - status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for the successful operation.") + status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for an unsuccessful operation.") error: Optional[UpdateUserGroupMembersResultErrorError] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["operation", "status", "error"] diff --git a/packages/miro-api-python/miro_api/models/update_user_group_members_result_success.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_success.py index d2559554c..d053f8dfa 100644 --- a/packages/miro-api-python/miro_api/models/update_user_group_members_result_success.py +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_success.py @@ -30,7 +30,7 @@ class UpdateUserGroupMembersResultSuccess(BaseModel): """ # noqa: E501 operation: Optional[UpdateUserGroupMembersResultOperation] = None - status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for the successful operation.") + status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for a successful operation.") affected_users: Optional[List[GroupMember]] = Field(default=None, alias="affectedUsers") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["operation", "status", "affectedUsers"] diff --git a/packages/miro-api-python/miro_api/models/user_information.py b/packages/miro-api-python/miro_api/models/user_information.py index 87eaac541..725b56911 100644 --- a/packages/miro-api-python/miro_api/models/user_information.py +++ b/packages/miro-api-python/miro_api/models/user_information.py @@ -17,7 +17,7 @@ import json from pydantic import BaseModel, StrictStr -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set from typing_extensions import Self @@ -27,9 +27,9 @@ class UserInformation(BaseModel): UserInformation """ # noqa: E501 - type: StrictStr - name: StrictStr - id: StrictStr + type: Optional[StrictStr] = None + name: Optional[StrictStr] = None + id: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["type", "name", "id"] diff --git a/packages/miro-api-python/miro_api/models/user_information1.py b/packages/miro-api-python/miro_api/models/user_information1.py new file mode 100644 index 000000000..037360ec6 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/user_information1.py @@ -0,0 +1,100 @@ +# coding: utf-8 + +""" +Miro Developer Platform + + ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0. + +The version of the OpenAPI document: v2.0 +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class UserInformation1(BaseModel): + """ + UserInformation1 + """ # noqa: E501 + + type: Optional[StrictStr] = None + name: Optional[StrictStr] = None + id: Optional[StrictStr] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["type", "name", "id"] + + model_config = { + "populate_by_name": True, + "validate_assignment": True, + "protected_namespaces": (), + } + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UserInformation1 from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set( + [ + "additional_properties", + ] + ) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UserInformation1 from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"type": obj.get("type"), "name": obj.get("name"), "id": obj.get("id")}) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj diff --git a/packages/miro-api/.openapi-generator/FILES b/packages/miro-api/.openapi-generator/FILES index 9e2668bdb..920c29f09 100644 --- a/packages/miro-api/.openapi-generator/FILES +++ b/packages/miro-api/.openapi-generator/FILES @@ -1,8 +1,12 @@ api.ts api/apis.ts +model/accessTokenResponse.ts model/actor.ts model/addProjectMemberRequest.ts model/adminRole.ts +model/aiInteractionLog.ts +model/aiInteractionLogActor.ts +model/aiInteractionLogObject.ts model/appCardCreateRequest.ts model/appCardData.ts model/appCardDataChanges.ts @@ -39,6 +43,7 @@ model/boardExportTaskExportLink.ts model/boardExportTaskResult.ts model/boardFormat.ts model/boardItemContentLog.ts +model/boardItemContentLogAI.ts model/boardLinks.ts model/boardMember.ts model/boardMemberChanges.ts @@ -72,6 +77,11 @@ model/cardStylePlatformbulkcreateoperation.ts model/cardUpdateRequest.ts model/caseRequest.ts model/caseResponse.ts +model/codeWidgetCreateRequest.ts +model/codeWidgetCursorPaged.ts +model/codeWidgetData.ts +model/codeWidgetItem.ts +model/codeWidgetUpdateRequest.ts model/connectorChangesData.ts model/connectorCreationData.ts model/connectorStyle.ts @@ -171,6 +181,7 @@ model/geometryPlatformTags.ts model/geometryPlatformbulkcreateoperation.ts model/geometryPlatformcreateitemsinbulkusingfilefromdevice.ts model/geometryPlatformgroups.ts +model/getAiInteractionLogsResponse.ts model/getAllGroups200Response.ts model/getAllGroups400Response.ts model/getAllGroups404Response.ts @@ -246,6 +257,7 @@ model/mindmapNodeTextData.ts model/mindmapNodeView.ts model/mindmapStyle.ts model/mindmapWidgetDataOutput.ts +model/miroAi.ts model/modelError.ts model/models.ts model/modifiedBy.ts @@ -255,6 +267,7 @@ model/modifiedByPlatformFileUpload.ts model/modifiedByPlatformTags.ts model/modifiedByPlatformcreateitemsinbulkusingfilefromdevice.ts model/modifiedByPlatformgroups.ts +model/oEmbedData.ts model/organization.ts model/organizationInformation.ts model/organizationMember.ts @@ -371,7 +384,7 @@ model/textDataPlatformbulkcreateoperation.ts model/textItem.ts model/textStyle.ts model/textUpdateRequest.ts -model/tokenInformation.ts +model/tokenContext.ts model/unGroup400Response.ts model/unGroup404Response.ts model/unGroup429Response.ts @@ -402,6 +415,7 @@ model/user.ts model/userInfoLastOpenedBy.ts model/userInfoShort.ts model/userInformation.ts +model/userInformation1.ts model/userListResponse.ts model/userResource.ts model/userResourceEmailsInner.ts diff --git a/packages/miro-api/api/apis.ts b/packages/miro-api/api/apis.ts index 8c03b83f6..cb52b7a30 100644 --- a/packages/miro-api/api/apis.ts +++ b/packages/miro-api/api/apis.ts @@ -2,6 +2,8 @@ import fetch, {Response, RequestInit} from 'node-fetch' import {version} from '../package.json' import FormData = require('form-data') +import {GetAiInteractionLogsResponse} from '../model/getAiInteractionLogsResponse' + import {AppCardCreateRequest} from '../model/appCardCreateRequest' import {AppCardItem} from '../model/appCardItem' import {AppCardUpdateRequest} from '../model/appCardUpdateRequest' @@ -56,6 +58,13 @@ import {CardCreateRequest} from '../model/cardCreateRequest' import {CardItem} from '../model/cardItem' import {CardUpdateRequest} from '../model/cardUpdateRequest' +import {CodeWidgetCreateRequest} from '../model/codeWidgetCreateRequest' +import {CodeWidgetCursorPaged} from '../model/codeWidgetCursorPaged' +import {CodeWidgetItem} from '../model/codeWidgetItem' +import {CodeWidgetUpdateRequest} from '../model/codeWidgetUpdateRequest' +import {CreateFrameItem400Response} from '../model/createFrameItem400Response' +import {PositionChange} from '../model/positionChange' + import {ConnectorChangesData} from '../model/connectorChangesData' import {ConnectorCreationData} from '../model/connectorCreationData' import {ConnectorWithLinks} from '../model/connectorWithLinks' @@ -70,17 +79,17 @@ import {ServiceProviderConfigResponse} from '../model/serviceProviderConfigRespo import {DocFormatCreateRequest} from '../model/docFormatCreateRequest' import {DocFormatItem} from '../model/docFormatItem' -import {CreateDocumentItemUsingFileFromDeviceRequestData} from '../model/createDocumentItemUsingFileFromDeviceRequestData' import {DocumentCreateRequest} from '../model/documentCreateRequest' import {DocumentItem} from '../model/documentItem' import {DocumentUpdateRequest} from '../model/documentUpdateRequest' + +import {CreateDocumentItemUsingFileFromDeviceRequestData} from '../model/createDocumentItemUsingFileFromDeviceRequestData' import {UploadFileFromDeviceData} from '../model/uploadFileFromDeviceData' import {EmbedCreateRequest} from '../model/embedCreateRequest' import {EmbedItem} from '../model/embedItem' import {EmbedUpdateRequest} from '../model/embedUpdateRequest' -import {CreateFrameItem400Response} from '../model/createFrameItem400Response' import {GenericItem} from '../model/genericItem' import {GenericItemCursorPaged} from '../model/genericItemCursorPaged' import {ShapeCreateRequest} from '../model/shapeCreateRequest' @@ -126,8 +135,12 @@ import {MindmapCreateRequest} from '../model/mindmapCreateRequest' import {MindmapCursorPaged} from '../model/mindmapCursorPaged' import {MindmapItem} from '../model/mindmapItem' +import {AccessTokenResponse} from '../model/accessTokenResponse' import {ErrorResponse} from '../model/errorResponse' import {RevokeTokenRequest} from '../model/revokeTokenRequest' +import {TokenContext} from '../model/tokenContext' + +import {OEmbedData} from '../model/oEmbedData' import {EnterpriseGetOrganizationMembers200Response} from '../model/enterpriseGetOrganizationMembers200Response' import {OrganizationMember} from '../model/organizationMember' @@ -194,8 +207,6 @@ import {TextCreateRequest} from '../model/textCreateRequest' import {TextItem} from '../model/textItem' import {TextUpdateRequest} from '../model/textUpdateRequest' -import {TokenInformation} from '../model/tokenInformation' - import {CreateUserResource} from '../model/createUserResource' import {PatchUserResource} from '../model/patchUserResource' import {UserListResponse} from '../model/userListResponse' @@ -238,6 +249,99 @@ export class MiroApi { this.httpTimeout = httpTimeout } + /** + * Retrieves AI interaction logs for your organization. AI interaction logs capture user interactions with AI features in Miro. You can retrieve results for a specific time period. You can also filter results based on object IDs and the emails of users who interacted with AI features. Additionally, results can be paginated for easier viewing and processing.

Required scope

aiinteractionlogs:read

Rate limiting

Level 4

Enterprise Guard only

This API is available only for Enterprise plan users with the Enterprise Guard add-on.

+ * @summary Get AI interaction logs (Beta) + * @param orgId Unique identifier of the organization. + * @param from Start date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified <code>from</code> - <code>to</code> time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + * @param to End date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified <code>from</code> - <code>to</code> time range are returned. Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + * @param objectIds List of object IDs used to retrieve AI interaction logs. Currently, supported object types include board IDs and organization IDs. You can obtain object IDs from the response of this endpoint (the <code>object.id</code> field), from other Platform API endpoints (for example, [Get boards API](https://developers.miro.com/reference/get-boards)), or from Miro UI URLs (board ID and organization ID from the URLs). + * @param emails Filters AI interaction logs using a list of user emails. Only AI interactions associated with the provided emails will be included in the response. + * @param cursor A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request. + * @param limit The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + * @param sorting Sort order in which you want to view the result set based on the interaction date. To sort by an ascending date, specify `asc`. To sort by a descending date, specify `desc`. + */ + async enterpriseGetAiInteractionLogs( + orgId: string, + from: Date, + to: Date, + query?: { + objectIds?: Array + + emails?: Array + + cursor?: string + + limit?: number + + sorting?: 'asc' | 'desc' + }, + ): Promise<{response: Response; body: GetAiInteractionLogsResponse}> { + const localVarPath = '/v2/orgs/{org_id}/ai-interaction-logs'.replace( + '{' + 'org_id' + '}', + encodeURIComponent(String(orgId)), + ) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'orgId' is not null or undefined + if (orgId === null || orgId === undefined) { + throw new Error('Required parameter orgId was null or undefined when calling enterpriseGetAiInteractionLogs.') + } + + if (query?.objectIds !== undefined) { + localVarQueryParameters.append('object_ids', ObjectSerializer.serialize(query?.objectIds, 'Array')) + } + + if (query?.emails !== undefined) { + localVarQueryParameters.append('emails', ObjectSerializer.serialize(query?.emails, 'Array')) + } + + // verify required parameter 'from' is not null or undefined + if (from === null || from === undefined) { + throw new Error('Required parameter from was null or undefined when calling enterpriseGetAiInteractionLogs.') + } + + if (from !== undefined) { + localVarQueryParameters.append('from', ObjectSerializer.serialize(from, 'Date')) + } + + // verify required parameter 'to' is not null or undefined + if (to === null || to === undefined) { + throw new Error('Required parameter to was null or undefined when calling enterpriseGetAiInteractionLogs.') + } + + if (to !== undefined) { + localVarQueryParameters.append('to', ObjectSerializer.serialize(to, 'Date')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + if (query?.sorting !== undefined) { + localVarQueryParameters.append('sorting', ObjectSerializer.serialize(query?.sorting, "'asc' | 'desc'")) + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'GetAiInteractionLogsResponse') + + return {response, body} + } + /** * Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create app card item @@ -1595,7 +1699,7 @@ export class MiroApi { } /** - * Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters. Customize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards. If you\'re an Enterprise customer with Company Admin permissions: - Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins). - Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves a list of boards accessible to the user associated with the provided access token. This endpoint supports filtering and sorting through URL query parameters. Customize the response by specifying `team_id`, `project_id`, or other query parameters. Filtering by `team_id` or `project_id` (or both) returns results instantly. For other filters, allow a few seconds for indexing of newly created boards. When the `query` parameter is provided, results are capped at the first 10,000 matching boards (`offset` + `limit` must not exceed 10,000). To page through more boards, narrow the result set with `team_id`, `project_id`, or `owner` instead of relying on a higher `offset`. If you\'re an Enterprise customer with Company Admin permissions: - Enable **Content Admin** permissions to retrieve all boards, including private boards (those not explicitly shared with you). For details, see the [Content Admin Permissions for Company Admins](https://help.miro.com/hc/en-us/articles/360012777280-Content-Admin-permissions-for-Company-Admins). - Note that **Private board contents remain inaccessible**. The API allows you to verify their existence but prevents viewing their contents to uphold security best practices. Unauthorized access attempts will return an error.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get boards * @param teamId * @param projectId @@ -1983,23 +2087,24 @@ export class MiroApi { } /** - * Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Create connector - * @param boardId Unique identifier (ID) of the board for which you want to create the connector. - * @param connectorCreationData + * Adds a code widget item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create code widget item + * @param boardId Unique identifier (ID) of the board where you want to create the item. + * @param codeWidgetCreateRequest */ - async createConnector( + async createCodeWidgetItem( boardId: string, - connectorCreationData: ConnectorCreationData, - ): Promise<{response: Response; body: ConnectorWithLinks}> { - const localVarPath = '/v2/boards/{board_id}/connectors'.replace( + + codeWidgetCreateRequest?: CodeWidgetCreateRequest, + ): Promise<{response: Response; body: CodeWidgetItem}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets'.replace( '{' + 'board_id' + '}', encodeURIComponent(String(boardId)), ) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling createConnector.') + throw new Error('Required parameter boardId was null or undefined when calling createCodeWidgetItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2009,34 +2114,34 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'POST', urlResource, - JSON.stringify(ObjectSerializer.serialize(connectorCreationData, 'ConnectorCreationData')), + JSON.stringify(ObjectSerializer.serialize(codeWidgetCreateRequest, 'CodeWidgetCreateRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CodeWidgetItem') return {response, body} } /** - * Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
- * @summary Delete connector - * @param boardId Unique identifier (ID) of the board from which you want to delete the connector. - * @param connectorId Unique identifier (ID) of the connector that you want to delete. + * Deletes a code widget item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * @summary Delete code widget item + * @param boardId Unique identifier (ID) of the board from which you want to delete the item. + * @param itemId Unique identifier (ID) of the item that you want to delete. */ - async deleteConnector(boardId: string, connectorId: string): Promise<{response: Response; body: object}> { - const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + async deleteCodeWidgetItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets/{item_id}' .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling deleteConnector.') + throw new Error('Required parameter boardId was null or undefined when calling deleteCodeWidgetItem.') } - // verify required parameter 'connectorId' is not null or undefined - if (connectorId === null || connectorId === undefined) { - throw new Error('Required parameter connectorId was null or undefined when calling deleteConnector.') + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling deleteCodeWidgetItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2057,23 +2162,23 @@ export class MiroApi { } /** - * Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
- * @summary Get specific connector - * @param boardId Unique identifier (ID) of the board from which you want to retrieve a specific connector. - * @param connectorId Unique identifier (ID) of the connector that you want to retrieve. + * Retrieves information for a specific code widget item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * @summary Get code widget item + * @param boardId Unique identifier (ID) of the board from which you want to retrieve a specific item. + * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ - async getConnector(boardId: string, connectorId: string): Promise<{response: Response; body: ConnectorWithLinks}> { - const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + async getCodeWidgetItem(boardId: string, itemId: string): Promise<{response: Response; body: CodeWidgetItem}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets/{item_id}' .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling getConnector.') + throw new Error('Required parameter boardId was null or undefined when calling getCodeWidgetItem.') } - // verify required parameter 'connectorId' is not null or undefined - if (connectorId === null || connectorId === undefined) { - throw new Error('Required parameter connectorId was null or undefined when calling getConnector.') + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling getCodeWidgetItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2088,34 +2193,34 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CodeWidgetItem') return {response, body} } /** - * Retrieves a list of connectors for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let\'s say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
- * @summary Get connectors - * @param boardId Unique identifier (ID) of the board from which you want to retrieve a list of connectors. + * Retrieves a list of code widget items for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request.

Required scope

boards:read

Rate limiting

Level 2
+ * @summary Get code widget items + * @param boardId Unique identifier (ID) of the board for which you want to retrieve the list of code widget items. * @param limit * @param cursor */ - async getConnectors( + async getCodeWidgetItems( boardId: string, query?: { limit?: string cursor?: string }, - ): Promise<{response: Response; body: ConnectorsCursorPaged}> { - const localVarPath = '/v2/boards/{board_id}/connectors'.replace( + ): Promise<{response: Response; body: CodeWidgetCursorPaged}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets'.replace( '{' + 'board_id' + '}', encodeURIComponent(String(boardId)), ) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling getConnectors.') + throw new Error('Required parameter boardId was null or undefined when calling getCodeWidgetItems.') } if (query?.limit !== undefined) { @@ -2138,34 +2243,34 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorsCursorPaged') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CodeWidgetCursorPaged') return {response, body} } /** - * Updates a connector on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Update connector - * @param boardId Unique identifier (ID) of the board for which you want to update the connector. - * @param connectorId Unique identifier (ID) of the connector that you want to update. - * @param connectorChangesData + * Updates the position of a code widget item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Move code widget item + * @param boardId Unique identifier (ID) of the board where you want to move the item. + * @param itemId Unique identifier (ID) of the item that you want to move. + * @param positionChange */ - async updateConnector( + async moveCodeWidgetItem( boardId: string, - connectorId: string, - connectorChangesData: ConnectorChangesData, - ): Promise<{response: Response; body: ConnectorWithLinks}> { - const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + itemId: string, + positionChange: PositionChange, + ): Promise<{response: Response; body: CodeWidgetItem}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets/{item_id}/position' .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling updateConnector.') + throw new Error('Required parameter boardId was null or undefined when calling moveCodeWidgetItem.') } - // verify required parameter 'connectorId' is not null or undefined - if (connectorId === null || connectorId === undefined) { - throw new Error('Required parameter connectorId was null or undefined when calling updateConnector.') + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling moveCodeWidgetItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2175,30 +2280,39 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'PATCH', urlResource, - JSON.stringify(ObjectSerializer.serialize(connectorChangesData, 'ConnectorChangesData')), + JSON.stringify(ObjectSerializer.serialize(positionChange, 'PositionChange')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CodeWidgetItem') return {response, body} } /** - * Retrieve metadata for the available resource types (User and Group) that are supported. - * @summary Get resource type - * @param resource + * Updates a code widget item on a board based on the data properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Update code widget item + * @param boardId Unique identifier (ID) of the board where you want to update the item. + * @param itemId Unique identifier (ID) of the item that you want to update. + * @param codeWidgetUpdateRequest */ - async getResourceType(resource: 'User' | 'Group'): Promise<{response: Response; body: ResourceType}> { - const localVarPath = '/ResourceTypes/{resource}'.replace( - '{' + 'resource' + '}', - encodeURIComponent(String(resource)), - ) + async updateCodeWidgetItem( + boardId: string, + itemId: string, + codeWidgetUpdateRequest: CodeWidgetUpdateRequest, + ): Promise<{response: Response; body: CodeWidgetItem}> { + const localVarPath = '/v2-experimental/boards/{board_id}/code_widgets/{item_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'resource' is not null or undefined - if (resource === null || resource === undefined) { - throw new Error('Required parameter resource was null or undefined when calling getResourceType.') + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling updateCodeWidgetItem.') + } + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling updateCodeWidgetItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2206,34 +2320,36 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', + 'PATCH', urlResource, - undefined, + JSON.stringify(ObjectSerializer.serialize(codeWidgetUpdateRequest, 'CodeWidgetUpdateRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ResourceType') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CodeWidgetItem') return {response, body} } /** - * Retrieve information about how users, groups, and enterprise-user attributes URIs that are formatted. - * @summary Get schema - * @param uri Schema URI of a particular resource type. + * Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create connector + * @param boardId Unique identifier (ID) of the board for which you want to create the connector. + * @param connectorCreationData */ - async getSchema( - uri: - | 'urn:ietf:params:scim:schemas:core:2.0:User' - | 'urn:ietf:params:scim:schemas:core:2.0:Group' - | 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User', - ): Promise<{response: Response; body: SchemaResource}> { - const localVarPath = '/Schemas/{uri}'.replace('{' + 'uri' + '}', encodeURIComponent(String(uri))) + async createConnector( + boardId: string, + connectorCreationData: ConnectorCreationData, + ): Promise<{response: Response; body: ConnectorWithLinks}> { + const localVarPath = '/v2/boards/{board_id}/connectors'.replace( + '{' + 'board_id' + '}', + encodeURIComponent(String(boardId)), + ) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'uri' is not null or undefined - if (uri === null || uri === undefined) { - throw new Error('Required parameter uri was null or undefined when calling getSchema.') + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling createConnector.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2241,49 +2357,283 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', + 'POST', urlResource, - undefined, + JSON.stringify(ObjectSerializer.serialize(connectorCreationData, 'ConnectorCreationData')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'SchemaResource') + const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') return {response, body} } /** - * Retrieve information about which SCIM resources are supported.

Currently, Miro supports Users and Groups as Resource Types. - * @summary List resource types + * Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * @summary Delete connector + * @param boardId Unique identifier (ID) of the board from which you want to delete the connector. + * @param connectorId Unique identifier (ID) of the connector that you want to delete. */ - async listResourceTypes(): Promise<{response: Response; body: ResourceTypeListResponse}> { - const localVarPath = '/ResourceTypes' + async deleteConnector(boardId: string, connectorId: string): Promise<{response: Response; body: object}> { + const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling deleteConnector.') + } + // verify required parameter 'connectorId' is not null or undefined + if (connectorId === null || connectorId === undefined) { + throw new Error('Required parameter connectorId was null or undefined when calling deleteConnector.') + } const urlResource = new URL(localVarPath, this.basePath) urlResource.search = localVarQueryParameters.toString() const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', + 'DELETE', urlResource, undefined, this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ResourceTypeListResponse') + const body = ObjectSerializer.deserialize(bodyAsJson, 'object') return {response, body} } /** - * Retrieve metadata about Users, Groups, and extension attributes that are currently supported. - * @summary List schemas + * Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * @summary Get specific connector + * @param boardId Unique identifier (ID) of the board from which you want to retrieve a specific connector. + * @param connectorId Unique identifier (ID) of the connector that you want to retrieve. */ - async listSchemas(): Promise<{response: Response; body: SchemaListResponse}> { - const localVarPath = '/Schemas' + async getConnector(boardId: string, connectorId: string): Promise<{response: Response; body: ConnectorWithLinks}> { + const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling getConnector.') + } + // verify required parameter 'connectorId' is not null or undefined + if (connectorId === null || connectorId === undefined) { + throw new Error('Required parameter connectorId was null or undefined when calling getConnector.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') + + return {response, body} + } + + /** + * Retrieves a list of connectors for a specific board. This method returns results using a cursor-based approach. A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, on your next call to the same method, set the `cursor` parameter equal to the `cursor` value you received in the response of the previous request. For example, if you set the `limit` query parameter to `10` and the board contains 20 objects, the first call will return information about the first 10 objects in the response along with a cursor parameter and value. In this example, let\'s say the cursor parameter value returned in the response is `foo`. If you want to retrieve the next set of objects, on your next call to the same method, set the cursor parameter value to `foo`.

Required scope

boards:read

Rate limiting

Level 2
+ * @summary Get connectors + * @param boardId Unique identifier (ID) of the board from which you want to retrieve a list of connectors. + * @param limit + * @param cursor + */ + async getConnectors( + boardId: string, + query?: { + limit?: string + + cursor?: string + }, + ): Promise<{response: Response; body: ConnectorsCursorPaged}> { + const localVarPath = '/v2/boards/{board_id}/connectors'.replace( + '{' + 'board_id' + '}', + encodeURIComponent(String(boardId)), + ) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling getConnectors.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'string')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorsCursorPaged') + + return {response, body} + } + + /** + * Updates a connector on a board based on the data and style properties provided in the request body.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Update connector + * @param boardId Unique identifier (ID) of the board for which you want to update the connector. + * @param connectorId Unique identifier (ID) of the connector that you want to update. + * @param connectorChangesData + */ + async updateConnector( + boardId: string, + connectorId: string, + connectorChangesData: ConnectorChangesData, + ): Promise<{response: Response; body: ConnectorWithLinks}> { + const localVarPath = '/v2/boards/{board_id}/connectors/{connector_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'connector_id' + '}', encodeURIComponent(String(connectorId))) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling updateConnector.') + } + // verify required parameter 'connectorId' is not null or undefined + if (connectorId === null || connectorId === undefined) { + throw new Error('Required parameter connectorId was null or undefined when calling updateConnector.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'PATCH', + urlResource, + JSON.stringify(ObjectSerializer.serialize(connectorChangesData, 'ConnectorChangesData')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ConnectorWithLinks') + + return {response, body} + } + + /** + * Retrieve metadata for the available resource types (User and Group) that are supported. + * @summary Get resource type + * @param resource + */ + async getResourceType(resource: 'User' | 'Group'): Promise<{response: Response; body: ResourceType}> { + const localVarPath = '/ResourceTypes/{resource}'.replace( + '{' + 'resource' + '}', + encodeURIComponent(String(resource)), + ) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'resource' is not null or undefined + if (resource === null || resource === undefined) { + throw new Error('Required parameter resource was null or undefined when calling getResourceType.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ResourceType') + + return {response, body} + } + + /** + * Retrieve information about how users, groups, and enterprise-user attributes URIs that are formatted. + * @summary Get schema + * @param uri Schema URI of a particular resource type. + */ + async getSchema( + uri: + | 'urn:ietf:params:scim:schemas:core:2.0:User' + | 'urn:ietf:params:scim:schemas:core:2.0:Group' + | 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User', + ): Promise<{response: Response; body: SchemaResource}> { + const localVarPath = '/Schemas/{uri}'.replace('{' + 'uri' + '}', encodeURIComponent(String(uri))) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'uri' is not null or undefined + if (uri === null || uri === undefined) { + throw new Error('Required parameter uri was null or undefined when calling getSchema.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'SchemaResource') + + return {response, body} + } + + /** + * Retrieve information about which SCIM resources are supported.

Currently, Miro supports Users and Groups as Resource Types. + * @summary List resource types + */ + async listResourceTypes(): Promise<{response: Response; body: ResourceTypeListResponse}> { + const localVarPath = '/ResourceTypes' + let localVarQueryParameters = new URLSearchParams() + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ResourceTypeListResponse') + + return {response, body} + } + + /** + * Retrieve metadata about Users, Groups, and extension attributes that are currently supported. + * @summary List schemas + */ + async listSchemas(): Promise<{response: Response; body: SchemaListResponse}> { + const localVarPath = '/Schemas' let localVarQueryParameters = new URLSearchParams() const urlResource = new URL(localVarPath, this.basePath) @@ -2454,45 +2804,23 @@ export class MiroApi { } /** - * Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Create document item using file from device - * @param boardIdPlatformFileUpload Unique identifier (ID) of the board where you want to create the item. - * @param resource Select a file to upload. Maximum file size is 6 MB. - * @param data + * Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create document item using URL + * @param boardId Unique identifier (ID) of the board where you want to create the item. + * @param documentCreateRequest */ - async createDocumentItemUsingFileFromDevice( - boardIdPlatformFileUpload: string, - resource: RequestFile, - - data?: CreateDocumentItemUsingFileFromDeviceRequestData, + async createDocumentItemUsingUrl( + boardId: string, + documentCreateRequest: DocumentCreateRequest, ): Promise<{response: Response; body: DocumentItem}> { - const localVarPath = '/v2/boards/{board_id_PlatformFileUpload}/documents'.replace( - '{' + 'board_id_PlatformFileUpload' + '}', - encodeURIComponent(String(boardIdPlatformFileUpload)), + const localVarPath = '/v2/boards/{board_id}/documents'.replace( + '{' + 'board_id' + '}', + encodeURIComponent(String(boardId)), ) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'boardIdPlatformFileUpload' is not null or undefined - if (boardIdPlatformFileUpload === null || boardIdPlatformFileUpload === undefined) { - throw new Error( - 'Required parameter boardIdPlatformFileUpload was null or undefined when calling createDocumentItemUsingFileFromDevice.', - ) - } - - const formData = new FormData() - let extension = '' - if (data) { - formData.append( - 'data', - JSON.stringify(ObjectSerializer.serialize(data, 'CreateDocumentItemUsingFileFromDeviceRequestData')), - ) - } - if (resource) { - if ('createDocumentItemUsingFileFromDevice'.includes('Image')) { - extension = '.png' - } else if ('createDocumentItemUsingFileFromDevice'.includes('Document')) { - extension = '.pdf' - } - formData.append('resource', resource, 'file' + extension) + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling createDocumentItemUsingUrl.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2502,7 +2830,7 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'POST', urlResource, - formData, + JSON.stringify(ObjectSerializer.serialize(documentCreateRequest, 'DocumentCreateRequest')), this.logger, ) @@ -2513,23 +2841,60 @@ export class MiroApi { } /** - * Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Create document item using URL - * @param boardId Unique identifier (ID) of the board where you want to create the item. - * @param documentCreateRequest + * Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * @summary Delete document item + * @param boardId Unique identifier (ID) of the board from which you want to delete the item. + * @param itemId Unique identifier (ID) of the item that you want to delete. */ - async createDocumentItemUsingUrl( - boardId: string, - documentCreateRequest: DocumentCreateRequest, - ): Promise<{response: Response; body: DocumentItem}> { - const localVarPath = '/v2/boards/{board_id}/documents'.replace( - '{' + 'board_id' + '}', - encodeURIComponent(String(boardId)), + async deleteDocumentItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { + const localVarPath = '/v2/boards/{board_id}/documents/{item_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling deleteDocumentItem.') + } + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling deleteDocumentItem.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'DELETE', + urlResource, + undefined, + + this.logger, ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'object') + + return {response, body} + } + + /** + * Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
+ * @summary Get document item + * @param boardId Unique identifier (ID) of the board from which you want to retrieve a specific item. + * @param itemId Unique identifier (ID) of the item that you want to retrieve. + */ + async getDocumentItem(boardId: string, itemId: string): Promise<{response: Response; body: DocumentItem}> { + const localVarPath = '/v2/boards/{board_id}/documents/{item_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling createDocumentItemUsingUrl.') + throw new Error('Required parameter boardId was null or undefined when calling getDocumentItem.') + } + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling getDocumentItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2537,9 +2902,9 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', + 'GET', urlResource, - JSON.stringify(ObjectSerializer.serialize(documentCreateRequest, 'DocumentCreateRequest')), + undefined, this.logger, ) @@ -2550,23 +2915,28 @@ export class MiroApi { } /** - * Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
- * @summary Delete document item - * @param boardId Unique identifier (ID) of the board from which you want to delete the item. - * @param itemId Unique identifier (ID) of the item that you want to delete. + * Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Update document item using URL + * @param boardId Unique identifier (ID) of the board where you want to update the item. + * @param itemId Unique identifier (ID) of the item that you want to update. + * @param documentUpdateRequest */ - async deleteDocumentItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { + async updateDocumentItemUsingUrl( + boardId: string, + itemId: string, + documentUpdateRequest: DocumentUpdateRequest, + ): Promise<{response: Response; body: DocumentItem}> { const localVarPath = '/v2/boards/{board_id}/documents/{item_id}' .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) let localVarQueryParameters = new URLSearchParams() // verify required parameter 'boardId' is not null or undefined if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling deleteDocumentItem.') + throw new Error('Required parameter boardId was null or undefined when calling updateDocumentItemUsingUrl.') } // verify required parameter 'itemId' is not null or undefined if (itemId === null || itemId === undefined) { - throw new Error('Required parameter itemId was null or undefined when calling deleteDocumentItem.') + throw new Error('Required parameter itemId was null or undefined when calling updateDocumentItemUsingUrl.') } const urlResource = new URL(localVarPath, this.basePath) @@ -2574,36 +2944,58 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'DELETE', + 'PATCH', urlResource, - undefined, + JSON.stringify(ObjectSerializer.serialize(documentUpdateRequest, 'DocumentUpdateRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'object') + const body = ObjectSerializer.deserialize(bodyAsJson, 'DocumentItem') return {response, body} } /** - * Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
- * @summary Get document item - * @param boardId Unique identifier (ID) of the board from which you want to retrieve a specific item. - * @param itemId Unique identifier (ID) of the item that you want to retrieve. + * Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create document item using file from device + * @param boardIdPlatformFileUpload Unique identifier (ID) of the board where you want to create the item. + * @param resource Select a file to upload. Maximum file size is 6 MB. + * @param data */ - async getDocumentItem(boardId: string, itemId: string): Promise<{response: Response; body: DocumentItem}> { - const localVarPath = '/v2/boards/{board_id}/documents/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + async createDocumentItemUsingFileFromDevice( + boardIdPlatformFileUpload: string, + resource: RequestFile, + + data?: CreateDocumentItemUsingFileFromDeviceRequestData, + ): Promise<{response: Response; body: DocumentItem}> { + const localVarPath = '/v2/boards/{board_id_PlatformFileUpload}/documents'.replace( + '{' + 'board_id_PlatformFileUpload' + '}', + encodeURIComponent(String(boardIdPlatformFileUpload)), + ) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'boardId' is not null or undefined - if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling getDocumentItem.') + // verify required parameter 'boardIdPlatformFileUpload' is not null or undefined + if (boardIdPlatformFileUpload === null || boardIdPlatformFileUpload === undefined) { + throw new Error( + 'Required parameter boardIdPlatformFileUpload was null or undefined when calling createDocumentItemUsingFileFromDevice.', + ) } - // verify required parameter 'itemId' is not null or undefined - if (itemId === null || itemId === undefined) { - throw new Error('Required parameter itemId was null or undefined when calling getDocumentItem.') + + const formData = new FormData() + let extension = '' + if (data) { + formData.append( + 'data', + JSON.stringify(ObjectSerializer.serialize(data, 'CreateDocumentItemUsingFileFromDeviceRequestData')), + ) + } + if (resource) { + if ('createDocumentItemUsingFileFromDevice'.includes('Image')) { + extension = '.png' + } else if ('createDocumentItemUsingFileFromDevice'.includes('Document')) { + extension = '.pdf' + } + formData.append('resource', resource, 'file' + extension) } const urlResource = new URL(localVarPath, this.basePath) @@ -2611,9 +3003,9 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', + 'POST', urlResource, - undefined, + formData, this.logger, ) @@ -2686,48 +3078,6 @@ export class MiroApi { return {response, body} } - /** - * Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
- * @summary Update document item using URL - * @param boardId Unique identifier (ID) of the board where you want to update the item. - * @param itemId Unique identifier (ID) of the item that you want to update. - * @param documentUpdateRequest - */ - async updateDocumentItemUsingUrl( - boardId: string, - itemId: string, - documentUpdateRequest: DocumentUpdateRequest, - ): Promise<{response: Response; body: DocumentItem}> { - const localVarPath = '/v2/boards/{board_id}/documents/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) - let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'boardId' is not null or undefined - if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling updateDocumentItemUsingUrl.') - } - // verify required parameter 'itemId' is not null or undefined - if (itemId === null || itemId === undefined) { - throw new Error('Required parameter itemId was null or undefined when calling updateDocumentItemUsingUrl.') - } - - const urlResource = new URL(localVarPath, this.basePath) - urlResource.search = localVarQueryParameters.toString() - - const {response, bodyAsJson} = await makeJsonRequest( - typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'PATCH', - urlResource, - JSON.stringify(ObjectSerializer.serialize(documentUpdateRequest, 'DocumentUpdateRequest')), - - this.logger, - ) - - const body = ObjectSerializer.deserialize(bodyAsJson, 'DocumentItem') - - return {response, body} - } - /** * Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create embed item @@ -3756,62 +4106,6 @@ export class MiroApi { return {response, body} } - /** - * Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Create image item using file from device - * @param boardIdPlatformFileUpload Unique identifier (ID) of the board where you want to create the item. - * @param resource Select a file to upload. Maximum file size is 6 MB. - * @param data - */ - async createImageItemUsingLocalFile( - boardIdPlatformFileUpload: string, - resource: RequestFile, - - data?: UploadFileFromDeviceData, - ): Promise<{response: Response; body: ImageItem}> { - const localVarPath = '/v2/boards/{board_id_PlatformFileUpload}/images'.replace( - '{' + 'board_id_PlatformFileUpload' + '}', - encodeURIComponent(String(boardIdPlatformFileUpload)), - ) - let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'boardIdPlatformFileUpload' is not null or undefined - if (boardIdPlatformFileUpload === null || boardIdPlatformFileUpload === undefined) { - throw new Error( - 'Required parameter boardIdPlatformFileUpload was null or undefined when calling createImageItemUsingLocalFile.', - ) - } - - const formData = new FormData() - let extension = '' - if (data) { - formData.append('data', JSON.stringify(ObjectSerializer.serialize(data, 'UploadFileFromDeviceData'))) - } - if (resource) { - if ('createImageItemUsingLocalFile'.includes('Image')) { - extension = '.png' - } else if ('createImageItemUsingLocalFile'.includes('Document')) { - extension = '.pdf' - } - formData.append('resource', resource, 'file' + extension) - } - - const urlResource = new URL(localVarPath, this.basePath) - urlResource.search = localVarQueryParameters.toString() - - const {response, bodyAsJson} = await makeJsonRequest( - typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', - urlResource, - formData, - - this.logger, - ) - - const body = ObjectSerializer.deserialize(bodyAsJson, 'ImageItem') - - return {response, body} - } - /** * Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create image item using URL @@ -3901,9 +4195,107 @@ export class MiroApi { if (boardId === null || boardId === undefined) { throw new Error('Required parameter boardId was null or undefined when calling getImageItem.') } - // verify required parameter 'itemId' is not null or undefined - if (itemId === null || itemId === undefined) { - throw new Error('Required parameter itemId was null or undefined when calling getImageItem.') + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling getImageItem.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ImageItem') + + return {response, body} + } + + /** + * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Update image item using URL + * @param boardId Unique identifier (ID) of the board where you want to update the item. + * @param itemId Unique identifier (ID) of the item that you want to update. + * @param imageUpdateRequest + */ + async updateImageItemUsingUrl( + boardId: string, + itemId: string, + imageUpdateRequest: ImageUpdateRequest, + ): Promise<{response: Response; body: ImageItem}> { + const localVarPath = '/v2/boards/{board_id}/images/{item_id}' + .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) + .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardId' is not null or undefined + if (boardId === null || boardId === undefined) { + throw new Error('Required parameter boardId was null or undefined when calling updateImageItemUsingUrl.') + } + // verify required parameter 'itemId' is not null or undefined + if (itemId === null || itemId === undefined) { + throw new Error('Required parameter itemId was null or undefined when calling updateImageItemUsingUrl.') + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'PATCH', + urlResource, + JSON.stringify(ObjectSerializer.serialize(imageUpdateRequest, 'ImageUpdateRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ImageItem') + + return {response, body} + } + + /** + * Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create image item using file from device + * @param boardIdPlatformFileUpload Unique identifier (ID) of the board where you want to create the item. + * @param resource Select a file to upload. Maximum file size is 6 MB. + * @param data + */ + async createImageItemUsingLocalFile( + boardIdPlatformFileUpload: string, + resource: RequestFile, + + data?: UploadFileFromDeviceData, + ): Promise<{response: Response; body: ImageItem}> { + const localVarPath = '/v2/boards/{board_id_PlatformFileUpload}/images'.replace( + '{' + 'board_id_PlatformFileUpload' + '}', + encodeURIComponent(String(boardIdPlatformFileUpload)), + ) + let localVarQueryParameters = new URLSearchParams() + // verify required parameter 'boardIdPlatformFileUpload' is not null or undefined + if (boardIdPlatformFileUpload === null || boardIdPlatformFileUpload === undefined) { + throw new Error( + 'Required parameter boardIdPlatformFileUpload was null or undefined when calling createImageItemUsingLocalFile.', + ) + } + + const formData = new FormData() + let extension = '' + if (data) { + formData.append('data', JSON.stringify(ObjectSerializer.serialize(data, 'UploadFileFromDeviceData'))) + } + if (resource) { + if ('createImageItemUsingLocalFile'.includes('Image')) { + extension = '.png' + } else if ('createImageItemUsingLocalFile'.includes('Document')) { + extension = '.pdf' + } + formData.append('resource', resource, 'file' + extension) } const urlResource = new URL(localVarPath, this.basePath) @@ -3911,9 +4303,9 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', + 'POST', urlResource, - undefined, + formData, this.logger, ) @@ -3986,48 +4378,6 @@ export class MiroApi { return {response, body} } - /** - * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Update image item using URL - * @param boardId Unique identifier (ID) of the board where you want to update the item. - * @param itemId Unique identifier (ID) of the item that you want to update. - * @param imageUpdateRequest - */ - async updateImageItemUsingUrl( - boardId: string, - itemId: string, - imageUpdateRequest: ImageUpdateRequest, - ): Promise<{response: Response; body: ImageItem}> { - const localVarPath = '/v2/boards/{board_id}/images/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) - let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'boardId' is not null or undefined - if (boardId === null || boardId === undefined) { - throw new Error('Required parameter boardId was null or undefined when calling updateImageItemUsingUrl.') - } - // verify required parameter 'itemId' is not null or undefined - if (itemId === null || itemId === undefined) { - throw new Error('Required parameter itemId was null or undefined when calling updateImageItemUsingUrl.') - } - - const urlResource = new URL(localVarPath, this.basePath) - urlResource.search = localVarQueryParameters.toString() - - const {response, bodyAsJson} = await makeJsonRequest( - typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'PATCH', - urlResource, - JSON.stringify(ObjectSerializer.serialize(imageUpdateRequest, 'ImageUpdateRequest')), - - this.logger, - ) - - const body = ObjectSerializer.deserialize(bodyAsJson, 'ImageItem') - - return {response, body} - } - /** * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete item @@ -5034,6 +5384,157 @@ export class MiroApi { return {response, body} } + /** + * Exchange the authorization code returned to your redirect URI for an access token and a refresh token. + * @summary Step 3: Exchange authorization code with access token + * @param grantType Always set the value for this parameter to `authorization_code`. + * @param clientId The Client ID of the app that is requesting user authorization. + * @param clientSecret App client secret. **The client secret must be kept confidential.** + * @param code Paste the authorization code that was provided as the `code` parameter value in the redirect URI. + * @param redirectUri Paste the redirect URI. The URI must match the original redirect URI that was used when requesting the authorization (including the trailing slash). + */ + async exchangeAuthorizationCodeWithAccessToken( + grantType: string, + clientId: string, + clientSecret: string, + code: string, + redirectUri: string, + ): Promise<{response: Response; body: AccessTokenResponse}> { + const localVarPath = '/v1/oauth/token' + let localVarQueryParameters = new URLSearchParams() + + // verify required parameter 'grantType' is not null or undefined + if (grantType === null || grantType === undefined) { + throw new Error( + 'Required parameter grantType was null or undefined when calling exchangeAuthorizationCodeWithAccessToken.', + ) + } + + if (grantType !== undefined) { + localVarQueryParameters.append('grant_type', ObjectSerializer.serialize(grantType, 'string')) + } + + // verify required parameter 'clientId' is not null or undefined + if (clientId === null || clientId === undefined) { + throw new Error( + 'Required parameter clientId was null or undefined when calling exchangeAuthorizationCodeWithAccessToken.', + ) + } + + if (clientId !== undefined) { + localVarQueryParameters.append('client_id', ObjectSerializer.serialize(clientId, 'string')) + } + + // verify required parameter 'clientSecret' is not null or undefined + if (clientSecret === null || clientSecret === undefined) { + throw new Error( + 'Required parameter clientSecret was null or undefined when calling exchangeAuthorizationCodeWithAccessToken.', + ) + } + + if (clientSecret !== undefined) { + localVarQueryParameters.append('client_secret', ObjectSerializer.serialize(clientSecret, 'string')) + } + + // verify required parameter 'code' is not null or undefined + if (code === null || code === undefined) { + throw new Error( + 'Required parameter code was null or undefined when calling exchangeAuthorizationCodeWithAccessToken.', + ) + } + + if (code !== undefined) { + localVarQueryParameters.append('code', ObjectSerializer.serialize(code, 'string')) + } + + // verify required parameter 'redirectUri' is not null or undefined + if (redirectUri === null || redirectUri === undefined) { + throw new Error( + 'Required parameter redirectUri was null or undefined when calling exchangeAuthorizationCodeWithAccessToken.', + ) + } + + if (redirectUri !== undefined) { + localVarQueryParameters.append('redirect_uri', ObjectSerializer.serialize(redirectUri, 'string')) + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'POST', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'AccessTokenResponse') + + return {response, body} + } + + /** + * Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token. + * @summary Get access token context + */ + async getAccessTokenContext(): Promise<{response: Response; body: TokenContext}> { + const localVarPath = '/v1/oauth-token' + let localVarQueryParameters = new URLSearchParams() + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'TokenContext') + + return {response, body} + } + + /** + *

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated because the access token is passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. + * @summary Revoke token (v1) + * @param accessToken Paste the access token that you want to revoke. + */ + async revokeToken(accessToken: string): Promise<{response: Response; body?: any}> { + const localVarPath = '/v1/oauth/revoke' + let localVarQueryParameters = new URLSearchParams() + + // verify required parameter 'accessToken' is not null or undefined + if (accessToken === null || accessToken === undefined) { + throw new Error('Required parameter accessToken was null or undefined when calling revokeToken.') + } + + if (accessToken !== undefined) { + localVarQueryParameters.append('access_token', ObjectSerializer.serialize(accessToken, 'string')) + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'POST', + urlResource, + undefined, + + this.logger, + ) + + const body = bodyAsJson + + return {response, body} + } + /** * Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. * @summary Revoke token (v2) @@ -5060,6 +5561,72 @@ export class MiroApi { return {response, body} } + /** + * Retrieves information to embed a Miro board as a [live embed](doc:oembed-live-embed). + * @summary Get oEmbed data + * @param url The URL pointing to the resource to return as oEmbed data. Currently, it supports only URLs pointing to Miro boards. + * @param format Specifies the return format of the response. It complies with the [oEmbed standard](https://oembed.com/). Allowed formats: either \"json\", or \"xml\". + * @param referrer The URL pointing to the source of the request. Service providers such as Embedly use it to forward the initial site that triggered the oEmbed request. + * @param maxwidth The maximum width available to the embed, in pixels. + * @param maxheight The maximum height available to the embed, in pixels. + */ + async getEmbedData( + url: string, + query?: { + format?: 'json' | 'xml' + + referrer?: string + + maxwidth?: number + + maxheight?: number + }, + ): Promise<{response: Response; body: OEmbedData}> { + const localVarPath = '/oembed' + let localVarQueryParameters = new URLSearchParams() + + // verify required parameter 'url' is not null or undefined + if (url === null || url === undefined) { + throw new Error('Required parameter url was null or undefined when calling getEmbedData.') + } + + if (url !== undefined) { + localVarQueryParameters.append('url', ObjectSerializer.serialize(url, 'string')) + } + + if (query?.format !== undefined) { + localVarQueryParameters.append('format', ObjectSerializer.serialize(query?.format, "'json' | 'xml'")) + } + + if (query?.referrer !== undefined) { + localVarQueryParameters.append('referrer', ObjectSerializer.serialize(query?.referrer, 'string')) + } + + if (query?.maxwidth !== undefined) { + localVarQueryParameters.append('maxwidth', ObjectSerializer.serialize(query?.maxwidth, 'number')) + } + + if (query?.maxheight !== undefined) { + localVarQueryParameters.append('maxheight', ObjectSerializer.serialize(query?.maxheight, 'number')) + } + + const urlResource = new URL(localVarPath, this.basePath) + urlResource.search = localVarQueryParameters.toString() + + const {response, bodyAsJson} = await makeJsonRequest( + typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, + 'GET', + urlResource, + undefined, + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'OEmbedData') + + return {response, body} + } + /** * Retrieves organization member information for an existing organization.

Required scope

organizations:read

Rate limiting

Level 3

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

* @summary Get organization member @@ -5123,7 +5690,16 @@ export class MiroApi { | 'organization_team_guest_user' | 'unknown' - license?: 'full' | 'occasional' | 'free' | 'free_restricted' | 'full_trial' | 'unknown' + license?: + | 'advanced' + | 'standard' + | 'basic' + | 'full' + | 'occasional' + | 'free' + | 'free_restricted' + | 'full_trial' + | 'unknown' active?: boolean @@ -5158,7 +5734,7 @@ export class MiroApi { 'license', ObjectSerializer.serialize( query?.license, - "'full' | 'occasional' | 'free' | 'free_restricted' | 'full_trial' | 'unknown'", + "'advanced' | 'standard' | 'basic' | 'full' | 'occasional' | 'free' | 'free_restricted' | 'full_trial' | 'unknown'", ), ) } @@ -7774,66 +8350,6 @@ export class MiroApi { return {response, body} } - /** - *

Please use the new revoke endpoint /v2/oauth/revoke. This endpoint is considered vulnerable and deprecated due to access token passed publicly in the URL.

Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user. - * @summary Revoke token (v1) - * @param accessToken Access token that you want to revoke - */ - async revokeToken(accessToken: string): Promise<{response: Response; body?: any}> { - const localVarPath = '/v1/oauth/revoke' - let localVarQueryParameters = new URLSearchParams() - - // verify required parameter 'accessToken' is not null or undefined - if (accessToken === null || accessToken === undefined) { - throw new Error('Required parameter accessToken was null or undefined when calling revokeToken.') - } - - if (accessToken !== undefined) { - localVarQueryParameters.append('access_token', ObjectSerializer.serialize(accessToken, 'string')) - } - - const urlResource = new URL(localVarPath, this.basePath) - urlResource.search = localVarQueryParameters.toString() - - const {response, bodyAsJson} = await makeJsonRequest( - typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', - urlResource, - undefined, - - this.logger, - ) - - const body = bodyAsJson - - return {response, body} - } - - /** - * Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token. - * @summary Get access token information - */ - async tokenInfo(): Promise<{response: Response; body: TokenInformation}> { - const localVarPath = '/v1/oauth-token' - let localVarQueryParameters = new URLSearchParams() - - const urlResource = new URL(localVarPath, this.basePath) - urlResource.search = localVarQueryParameters.toString() - - const {response, bodyAsJson} = await makeJsonRequest( - typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'GET', - urlResource, - undefined, - - this.logger, - ) - - const body = ObjectSerializer.deserialize(bodyAsJson, 'TokenInformation') - - return {response, body} - } - /** * Creates a new user in the organization.


Note: All newly provisioned users are added to the default team. * @summary Create user @@ -8254,7 +8770,7 @@ export class MiroApi { } /** - * Add and remove members in one request. For example, remove user A and add user B.

Required scope

organizations:groups:write

Rate limiting

Level 1 per item. For example, if you want to add 10 users and remove 5, the rate limiting applicable will be 750 credits. This is because each user addition or deletion takes Level 1 rate limiting of 50 credits, so 15 * 50 = 750.

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

+ * Add and remove members in one request. For example, remove user A and add user B. You can add or remove up to 500 users at a time.

Required scope

organizations:groups:write

Rate limiting

Level 1 per item. For example, if you want to add 10 users and remove 5, the rate limiting applicable will be 750 credits. This is because each user addition or deletion takes Level 1 rate limiting of 50 credits, so 15 * 50 = 750.

Enterprise only

This API is available only for Enterprise plan users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using this form.

* @summary Bulk edit of membership in user group * @param orgId The ID of an organization. * @param groupId The ID of a user group. diff --git a/packages/miro-api/highlevel/index.ts b/packages/miro-api/highlevel/index.ts index 70dff43f0..4c9ca352c 100644 --- a/packages/miro-api/highlevel/index.ts +++ b/packages/miro-api/highlevel/index.ts @@ -2,7 +2,7 @@ import {MiroApi} from '../api' import {KeepBase} from './helpers' import {BaseApi} from './../highlevel/Api' -import {TokenInformation as BaseTokenInformation} from './../model/tokenInformation' +import {TokenContext as BaseTokenInformation} from './../model/tokenContext' import {BaseOrganization} from './Organization' import {OrganizationMember as BaseOrganizationMember} from './../model/organizationMember' import {BaseTeam} from './Team' @@ -72,10 +72,10 @@ export class Api extends BaseApi { /** * Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token. - * @summary Get access token information + * @summary Get access token context */ async tokenInfo(): Promise { - const result = (await this._api.tokenInfo()).body + const result = (await this._api.getAccessTokenContext()).body return new TokenInformation(this._api, result) } diff --git a/packages/miro-api/model/accessTokenResponse.ts b/packages/miro-api/model/accessTokenResponse.ts new file mode 100644 index 000000000..21a4cafd7 --- /dev/null +++ b/packages/miro-api/model/accessTokenResponse.ts @@ -0,0 +1,68 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +export class AccessTokenResponse { + 'userId'?: string + 'expiresIn'?: number + 'teamId'?: string + 'accessToken'?: string + 'scope'?: string + 'refreshToken'?: string + 'tokenType'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'userId', + baseName: 'user_id', + type: 'string', + }, + { + name: 'expiresIn', + baseName: 'expires_in', + type: 'number', + }, + { + name: 'teamId', + baseName: 'team_id', + type: 'string', + }, + { + name: 'accessToken', + baseName: 'access_token', + type: 'string', + }, + { + name: 'scope', + baseName: 'scope', + type: 'string', + }, + { + name: 'refreshToken', + baseName: 'refresh_token', + type: 'string', + }, + { + name: 'tokenType', + baseName: 'token_type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return AccessTokenResponse.attributeTypeMap + } +} diff --git a/packages/miro-api/model/aiInteractionLog.ts b/packages/miro-api/model/aiInteractionLog.ts new file mode 100644 index 000000000..b8f15ff00 --- /dev/null +++ b/packages/miro-api/model/aiInteractionLog.ts @@ -0,0 +1,117 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {AiInteractionLogActor} from './aiInteractionLogActor' +import {AiInteractionLogObject} from './aiInteractionLogObject' + +/** + * @internal + * Contains information about a single AI interaction log entry. + */ +export class AiInteractionLog { + /** + * Unique identifier of the AI interaction log entry. + */ + 'id'?: string + /** + * Date and time when the AI interaction occurred.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + */ + 'createdAt'?: Date + /** + * Date and time when the AI interaction log was stored.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + */ + 'storedAt'?: Date + /** + * Unique identifier of the session during which the AI interaction occurred. + */ + 'sessionId'?: string + /** + * Unique identifier of the message associated with the AI interaction. + */ + 'messageId'?: string + 'object'?: AiInteractionLogObject + /** + * Name of the AI feature that was used during the interaction. + */ + 'aiFeatureName'?: string + 'actor'?: AiInteractionLogActor + /** + * Type of the AI interaction log entry. + */ + 'logType'?: string + /** + * Additional details about the AI interaction. The structure of this object varies depending on the AI feature used. The text may contain unstructured data that could reveal information used in interactions with the LLM. + */ + 'details'?: {[key: string]: any} + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'createdAt', + baseName: 'createdAt', + type: 'Date', + }, + { + name: 'storedAt', + baseName: 'storedAt', + type: 'Date', + }, + { + name: 'sessionId', + baseName: 'sessionId', + type: 'string', + }, + { + name: 'messageId', + baseName: 'messageId', + type: 'string', + }, + { + name: 'object', + baseName: 'object', + type: 'AiInteractionLogObject', + }, + { + name: 'aiFeatureName', + baseName: 'aiFeatureName', + type: 'string', + }, + { + name: 'actor', + baseName: 'actor', + type: 'AiInteractionLogActor', + }, + { + name: 'logType', + baseName: 'logType', + type: 'string', + }, + { + name: 'details', + baseName: 'details', + type: '{ [key: string]: any; }', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return AiInteractionLog.attributeTypeMap + } +} diff --git a/packages/miro-api/model/aiInteractionLogActor.ts b/packages/miro-api/model/aiInteractionLogActor.ts new file mode 100644 index 000000000..34dbd9128 --- /dev/null +++ b/packages/miro-api/model/aiInteractionLogActor.ts @@ -0,0 +1,57 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Contains information about the user who performed the AI interaction. + */ +export class AiInteractionLogActor { + /** + * Unique identifier of the user who performed the AI interaction. + */ + 'id'?: string + /** + * Email of the user who performed the AI interaction. + */ + 'email'?: string + /** + * Name of the user who performed the AI interaction. + */ + 'name'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'email', + baseName: 'email', + type: 'string', + }, + { + name: 'name', + baseName: 'name', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return AiInteractionLogActor.attributeTypeMap + } +} diff --git a/packages/miro-api/model/aiInteractionLogObject.ts b/packages/miro-api/model/aiInteractionLogObject.ts new file mode 100644 index 000000000..b57318536 --- /dev/null +++ b/packages/miro-api/model/aiInteractionLogObject.ts @@ -0,0 +1,48 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Contains information about the Miro object involved in the AI interaction. + */ +export class AiInteractionLogObject { + /** + * Unique identifier of the Miro object involved in the AI interaction, e.g., Board ID or Organization ID. + */ + 'id'?: string + /** + * Type of the Miro object involved in the AI interaction, e.g., \"board, \"organization\". + */ + 'type'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return AiInteractionLogObject.attributeTypeMap + } +} diff --git a/packages/miro-api/model/auditEvent.ts b/packages/miro-api/model/auditEvent.ts index a8c50c63f..9b010ce75 100644 --- a/packages/miro-api/model/auditEvent.ts +++ b/packages/miro-api/model/auditEvent.ts @@ -35,7 +35,7 @@ export class AuditEvent { */ 'event'?: string /** - * Event category of the audit event. + * Event category of the audit event */ 'category'?: string diff --git a/packages/miro-api/model/boardItemContentLog.ts b/packages/miro-api/model/boardItemContentLog.ts index fd3f6d6fa..b21c42bb9 100644 --- a/packages/miro-api/model/boardItemContentLog.ts +++ b/packages/miro-api/model/boardItemContentLog.ts @@ -11,6 +11,7 @@ */ import {Actor} from './actor' +import {BoardItemContentLogAI} from './boardItemContentLogAI' import {Relationship} from './relationship' /** @@ -51,6 +52,7 @@ export class BoardItemContentLog { * Contains the list of items related to the current board item. */ 'relationships'?: Array + 'ai'?: BoardItemContentLogAI /** @ignore */ static discriminator: string | undefined = undefined @@ -102,6 +104,11 @@ export class BoardItemContentLog { baseName: 'relationships', type: 'Array', }, + { + name: 'ai', + baseName: 'ai', + type: 'BoardItemContentLogAI', + }, ] /** @ignore */ diff --git a/packages/miro-api/model/boardItemContentLogAI.ts b/packages/miro-api/model/boardItemContentLogAI.ts new file mode 100644 index 000000000..ad1a91368 --- /dev/null +++ b/packages/miro-api/model/boardItemContentLogAI.ts @@ -0,0 +1,39 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Contains AI-related information about the board content action. + */ +export class BoardItemContentLogAI { + /** + * Indicates whether the content log was performed with AI assistance. + */ + 'assisted'?: boolean + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'assisted', + baseName: 'assisted', + type: 'boolean', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardItemContentLogAI.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardWithLinks.ts b/packages/miro-api/model/boardWithLinks.ts index 0469f4020..69640b737 100644 --- a/packages/miro-api/model/boardWithLinks.ts +++ b/packages/miro-api/model/boardWithLinks.ts @@ -14,6 +14,7 @@ import {BoardLinks} from './boardLinks' import {BoardMember} from './boardMember' import {BoardPolicy} from './boardPolicy' import {BoardProject} from './boardProject' +import {Organization} from './organization' import {Picture} from './picture' import {Team} from './team' import {UserInfoShort} from './userInfoShort' @@ -32,6 +33,7 @@ export class BoardWithLinks { */ 'description': string 'team'?: Team + 'organization'?: Organization 'project'?: BoardProject 'picture'?: Picture 'policy'?: BoardPolicy @@ -82,6 +84,11 @@ export class BoardWithLinks { baseName: 'team', type: 'Team', }, + { + name: 'organization', + baseName: 'organization', + type: 'Organization', + }, { name: 'project', baseName: 'project', diff --git a/packages/miro-api/model/boardWithLinksAndLastOpened.ts b/packages/miro-api/model/boardWithLinksAndLastOpened.ts index abfc88090..c55be18db 100644 --- a/packages/miro-api/model/boardWithLinksAndLastOpened.ts +++ b/packages/miro-api/model/boardWithLinksAndLastOpened.ts @@ -15,6 +15,7 @@ import {BoardMember} from './boardMember' import {BoardPolicy} from './boardPolicy' import {BoardProject} from './boardProject' import {GetBoardUserInfoLastOpenedBy} from './getBoardUserInfoLastOpenedBy' +import {Organization} from './organization' import {Picture} from './picture' import {Team} from './team' import {UserInfoShort} from './userInfoShort' @@ -33,6 +34,7 @@ export class BoardWithLinksAndLastOpened { */ 'description': string 'team'?: Team + 'organization'?: Organization 'project'?: BoardProject 'picture'?: Picture 'policy'?: BoardPolicy @@ -88,6 +90,11 @@ export class BoardWithLinksAndLastOpened { baseName: 'team', type: 'Team', }, + { + name: 'organization', + baseName: 'organization', + type: 'Organization', + }, { name: 'project', baseName: 'project', diff --git a/packages/miro-api/model/boardWithLinksAndWithoutProject.ts b/packages/miro-api/model/boardWithLinksAndWithoutProject.ts index a448ef850..e8a169f28 100644 --- a/packages/miro-api/model/boardWithLinksAndWithoutProject.ts +++ b/packages/miro-api/model/boardWithLinksAndWithoutProject.ts @@ -13,6 +13,7 @@ import {BoardLinks} from './boardLinks' import {BoardMember} from './boardMember' import {BoardPolicy} from './boardPolicy' +import {Organization} from './organization' import {Picture} from './picture' import {Team} from './team' import {UserInfoShort} from './userInfoShort' @@ -31,6 +32,7 @@ export class BoardWithLinksAndWithoutProject { */ 'description': string 'team'?: Team + 'organization'?: Organization 'picture'?: Picture 'policy'?: BoardPolicy /** @@ -80,6 +82,11 @@ export class BoardWithLinksAndWithoutProject { baseName: 'team', type: 'Team', }, + { + name: 'organization', + baseName: 'organization', + type: 'Organization', + }, { name: 'picture', baseName: 'picture', diff --git a/packages/miro-api/model/codeWidgetCreateRequest.ts b/packages/miro-api/model/codeWidgetCreateRequest.ts new file mode 100644 index 000000000..9b8b1bab7 --- /dev/null +++ b/packages/miro-api/model/codeWidgetCreateRequest.ts @@ -0,0 +1,55 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {CodeWidgetData} from './codeWidgetData' +import {Geometry} from './geometry' +import {Parent} from './parent' +import {PositionChange} from './positionChange' + +export class CodeWidgetCreateRequest { + 'data'?: CodeWidgetData + 'position'?: PositionChange + 'geometry'?: Geometry + 'parent'?: Parent + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'data', + baseName: 'data', + type: 'CodeWidgetData', + }, + { + name: 'position', + baseName: 'position', + type: 'PositionChange', + }, + { + name: 'geometry', + baseName: 'geometry', + type: 'Geometry', + }, + { + name: 'parent', + baseName: 'parent', + type: 'Parent', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CodeWidgetCreateRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/codeWidgetCursorPaged.ts b/packages/miro-api/model/codeWidgetCursorPaged.ts new file mode 100644 index 000000000..6e338ad91 --- /dev/null +++ b/packages/miro-api/model/codeWidgetCursorPaged.ts @@ -0,0 +1,80 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {CodeWidgetItem} from './codeWidgetItem' +import {PageLinks} from './pageLinks' + +export class CodeWidgetCursorPaged { + /** + * Contains the result data. + */ + 'data'?: Array + /** + * Total number of results available. If the value of the `total` parameter is higher than the value of the `size` parameter, this means that there are more results that you can retrieve. To retrieve more results, you can make another request and set the `offset` value accordingly. + */ + 'total'?: number + /** + * Number of results returned in the response considering the `cursor` and the `limit` values sent in the request. + */ + 'size'?: number + /** + * A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the value returned in this parameter. + */ + 'cursor'?: string + /** + * Maximum number of results returned based on the `limit` specified in the request. + */ + 'limit'?: number + 'links'?: PageLinks + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'data', + baseName: 'data', + type: 'Array', + }, + { + name: 'total', + baseName: 'total', + type: 'number', + }, + { + name: 'size', + baseName: 'size', + type: 'number', + }, + { + name: 'cursor', + baseName: 'cursor', + type: 'string', + }, + { + name: 'limit', + baseName: 'limit', + type: 'number', + }, + { + name: 'links', + baseName: 'links', + type: 'PageLinks', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CodeWidgetCursorPaged.attributeTypeMap + } +} diff --git a/packages/miro-api/model/codeWidgetData.ts b/packages/miro-api/model/codeWidgetData.ts new file mode 100644 index 000000000..0c5830b1c --- /dev/null +++ b/packages/miro-api/model/codeWidgetData.ts @@ -0,0 +1,66 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Contains the data properties of a code widget item, such as the code content, programming language, and display settings. + */ +export class CodeWidgetData { + /** + * The code content of the widget. + */ + 'code'?: string + /** + * The programming language of the code content. Used for syntax highlighting. + */ + 'language'?: string + /** + * Indicates whether line numbers are visible in the code widget. + */ + 'lineNumbersVisible'?: boolean + /** + * The title of the code widget. + */ + 'title'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'code', + baseName: 'code', + type: 'string', + }, + { + name: 'language', + baseName: 'language', + type: 'string', + }, + { + name: 'lineNumbersVisible', + baseName: 'lineNumbersVisible', + type: 'boolean', + }, + { + name: 'title', + baseName: 'title', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CodeWidgetData.attributeTypeMap + } +} diff --git a/packages/miro-api/model/codeWidgetItem.ts b/packages/miro-api/model/codeWidgetItem.ts new file mode 100644 index 000000000..b3b6c43f0 --- /dev/null +++ b/packages/miro-api/model/codeWidgetItem.ts @@ -0,0 +1,105 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {CodeWidgetData} from './codeWidgetData' +import {CreatedBy} from './createdBy' +import {Geometry} from './geometry' +import {ModifiedBy} from './modifiedBy' +import {Position} from './position' +import {WidgetLinks} from './widgetLinks' + +export class CodeWidgetItem { + /** + * Unique identifier (ID) of an item. + */ + 'id': string + 'data'?: CodeWidgetData + 'position'?: Position + 'geometry'?: Geometry + /** + * Date and time when the item was created.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + */ + 'createdAt'?: Date + 'createdBy'?: CreatedBy + /** + * Date and time when the item was last modified.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + */ + 'modifiedAt'?: Date + 'modifiedBy'?: ModifiedBy + 'links'?: WidgetLinks + /** + * Type of item that is returned. + */ + 'type': string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'data', + baseName: 'data', + type: 'CodeWidgetData', + }, + { + name: 'position', + baseName: 'position', + type: 'Position', + }, + { + name: 'geometry', + baseName: 'geometry', + type: 'Geometry', + }, + { + name: 'createdAt', + baseName: 'createdAt', + type: 'Date', + }, + { + name: 'createdBy', + baseName: 'createdBy', + type: 'CreatedBy', + }, + { + name: 'modifiedAt', + baseName: 'modifiedAt', + type: 'Date', + }, + { + name: 'modifiedBy', + baseName: 'modifiedBy', + type: 'ModifiedBy', + }, + { + name: 'links', + baseName: 'links', + type: 'WidgetLinks', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CodeWidgetItem.attributeTypeMap + } +} diff --git a/packages/miro-api/model/codeWidgetUpdateRequest.ts b/packages/miro-api/model/codeWidgetUpdateRequest.ts new file mode 100644 index 000000000..db36da20a --- /dev/null +++ b/packages/miro-api/model/codeWidgetUpdateRequest.ts @@ -0,0 +1,55 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {CodeWidgetData} from './codeWidgetData' +import {Geometry} from './geometry' +import {Parent} from './parent' +import {PositionChange} from './positionChange' + +export class CodeWidgetUpdateRequest { + 'data'?: CodeWidgetData + 'position'?: PositionChange + 'geometry'?: Geometry + 'parent'?: Parent + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'data', + baseName: 'data', + type: 'CodeWidgetData', + }, + { + name: 'position', + baseName: 'position', + type: 'PositionChange', + }, + { + name: 'geometry', + baseName: 'geometry', + type: 'Geometry', + }, + { + name: 'parent', + baseName: 'parent', + type: 'Parent', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CodeWidgetUpdateRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/createBoardExportRequest.ts b/packages/miro-api/model/createBoardExportRequest.ts index 948535487..965b0fdda 100644 --- a/packages/miro-api/model/createBoardExportRequest.ts +++ b/packages/miro-api/model/createBoardExportRequest.ts @@ -14,11 +14,11 @@ import {BoardFormat} from './boardFormat' /** * @internal - * List of board IDs to be exported. + * List of board IDs to be exported. Each export job can contain up to 1,000 boards. */ export class CreateBoardExportRequest { /** - * List of board IDs to be exported. + * List of board IDs to be exported. Each export job can contain up to 1,000 boards. */ 'boardIds'?: Array 'boardFormat'?: BoardFormat diff --git a/packages/miro-api/model/createUserResource.ts b/packages/miro-api/model/createUserResource.ts index f38a147b1..bedb39d76 100644 --- a/packages/miro-api/model/createUserResource.ts +++ b/packages/miro-api/model/createUserResource.ts @@ -30,7 +30,7 @@ export class CreateUserResource { */ 'displayName'?: string /** - * Free-form string to indicate the user license type in the organization.

Only supported values for licenses are allowed. Supported licences for organizations can vary. They can potentially have the following values: Full, Free, Free Restricted, Full (Trial), Basic.

Note: When `userType` is specified, the `userType` license is set per the value provided. When `userType` is not specified, the user license is set according to internal Miro logic, which depends on the organization plan. + * Free-form string to indicate the user license type in the organization.

Only supported values for license types are allowed. Supported license types can vary per organization. An organization can have one or more of the following license type values: Full, Free, Free Restricted, Full (Trial), Basic, Standard, Advanced.

Note: When `userType` is specified, the `userType` license is set per the value provided. When `userType` is not specified, the user license is set according to internal Miro logic, which depends on the organization plan. */ 'userType'?: string /** diff --git a/packages/miro-api/model/getAiInteractionLogsResponse.ts b/packages/miro-api/model/getAiInteractionLogsResponse.ts new file mode 100644 index 000000000..7e0b6e05e --- /dev/null +++ b/packages/miro-api/model/getAiInteractionLogsResponse.ts @@ -0,0 +1,77 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import {AiInteractionLog} from './aiInteractionLog' + +/** + * @internal + * Response for query using cursor and filter parameters. + */ +export class GetAiInteractionLogsResponse { + /** + * The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit'?: number + /** + * Number of results returned in the response considering the cursor and the limit values sent in the request. For example, if there are 20 results, the request does not have a cursor value, and the limit set to 10, the size of the results will be 10. In this example, the response will also return a cursor value that can be used to retrieve the next set of 10 remaining results in the collection. + */ + 'size'?: number + /** + * Contains the list of AI interaction logs. + */ + 'data'?: Array + /** + * Indicator of the position of the next page of the result. To retrieve the next page, make another query setting its cursor field to the value returned by the current query. If the value is empty, there are no more pages to fetch. + */ + 'cursor'?: string + /** + * Type of the object returned. + */ + 'type'?: string = 'cursor-list' + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'limit', + baseName: 'limit', + type: 'number', + }, + { + name: 'size', + baseName: 'size', + type: 'number', + }, + { + name: 'data', + baseName: 'data', + type: 'Array', + }, + { + name: 'cursor', + baseName: 'cursor', + type: 'string', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return GetAiInteractionLogsResponse.attributeTypeMap + } +} diff --git a/packages/miro-api/model/miroAi.ts b/packages/miro-api/model/miroAi.ts new file mode 100644 index 000000000..7df7fc15a --- /dev/null +++ b/packages/miro-api/model/miroAi.ts @@ -0,0 +1,48 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Contains information about whether the item was created or modified with AI assistance. + */ +export class MiroAi { + /** + * Indicates whether the item was created with AI assistance. + */ + 'createdWithAi'?: boolean + /** + * Date and time when the item was last modified using AI.
Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)). + */ + 'lastModifiedAt'?: Date + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'createdWithAi', + baseName: 'createdWithAi', + type: 'boolean', + }, + { + name: 'lastModifiedAt', + baseName: 'lastModifiedAt', + type: 'Date', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return MiroAi.attributeTypeMap + } +} diff --git a/packages/miro-api/model/models.ts b/packages/miro-api/model/models.ts index 771c19070..2ca76bf07 100644 --- a/packages/miro-api/model/models.ts +++ b/packages/miro-api/model/models.ts @@ -1,6 +1,10 @@ +export * from './accessTokenResponse' export * from './actor' export * from './addProjectMemberRequest' export * from './adminRole' +export * from './aiInteractionLog' +export * from './aiInteractionLogActor' +export * from './aiInteractionLogObject' export * from './appCardCreateRequest' export * from './appCardData' export * from './appCardDataChanges' @@ -37,6 +41,7 @@ export * from './boardExportTaskExportLink' export * from './boardExportTaskResult' export * from './boardFormat' export * from './boardItemContentLog' +export * from './boardItemContentLogAI' export * from './boardLinks' export * from './boardMember' export * from './boardMemberChanges' @@ -70,6 +75,11 @@ export * from './cardStylePlatformbulkcreateoperation' export * from './cardUpdateRequest' export * from './caseRequest' export * from './caseResponse' +export * from './codeWidgetCreateRequest' +export * from './codeWidgetCursorPaged' +export * from './codeWidgetData' +export * from './codeWidgetItem' +export * from './codeWidgetUpdateRequest' export * from './connectorChangesData' export * from './connectorCreationData' export * from './connectorStyle' @@ -169,6 +179,7 @@ export * from './geometryPlatformTags' export * from './geometryPlatformbulkcreateoperation' export * from './geometryPlatformcreateitemsinbulkusingfilefromdevice' export * from './geometryPlatformgroups' +export * from './getAiInteractionLogsResponse' export * from './getAllGroups200Response' export * from './getAllGroups400Response' export * from './getAllGroups404Response' @@ -244,6 +255,7 @@ export * from './mindmapNodeTextData' export * from './mindmapNodeView' export * from './mindmapStyle' export * from './mindmapWidgetDataOutput' +export * from './miroAi' export * from './modelError' export * from './modifiedBy' export * from './modifiedByPlatformContainers' @@ -252,6 +264,7 @@ export * from './modifiedByPlatformFileUpload' export * from './modifiedByPlatformTags' export * from './modifiedByPlatformcreateitemsinbulkusingfilefromdevice' export * from './modifiedByPlatformgroups' +export * from './oEmbedData' export * from './organization' export * from './organizationInformation' export * from './organizationMember' @@ -368,7 +381,7 @@ export * from './textDataPlatformbulkcreateoperation' export * from './textItem' export * from './textStyle' export * from './textUpdateRequest' -export * from './tokenInformation' +export * from './tokenContext' export * from './unGroup400Response' export * from './unGroup404Response' export * from './unGroup429Response' @@ -399,6 +412,7 @@ export * from './user' export * from './userInfoLastOpenedBy' export * from './userInfoShort' export * from './userInformation' +export * from './userInformation1' export * from './userListResponse' export * from './userResource' export * from './userResourceEmailsInner' @@ -427,9 +441,13 @@ export interface RequestDetailedFile { } export type RequestFile = string | Buffer | fs.ReadStream | RequestDetailedFile +import {AccessTokenResponse} from './accessTokenResponse' import {Actor} from './actor' import {AddProjectMemberRequest} from './addProjectMemberRequest' import {AdminRole} from './adminRole' +import {AiInteractionLog} from './aiInteractionLog' +import {AiInteractionLogActor} from './aiInteractionLogActor' +import {AiInteractionLogObject} from './aiInteractionLogObject' import {AppCardCreateRequest} from './appCardCreateRequest' import {AppCardData} from './appCardData' import {AppCardDataChanges} from './appCardDataChanges' @@ -466,6 +484,7 @@ import {BoardExportTaskExportLink} from './boardExportTaskExportLink' import {BoardExportTaskResult} from './boardExportTaskResult' import {BoardFormat} from './boardFormat' import {BoardItemContentLog} from './boardItemContentLog' +import {BoardItemContentLogAI} from './boardItemContentLogAI' import {BoardLinks} from './boardLinks' import {BoardMember} from './boardMember' import {BoardMemberChanges} from './boardMemberChanges' @@ -499,6 +518,11 @@ import {CardStylePlatformbulkcreateoperation} from './cardStylePlatformbulkcreat import {CardUpdateRequest} from './cardUpdateRequest' import {CaseRequest} from './caseRequest' import {CaseResponse} from './caseResponse' +import {CodeWidgetCreateRequest} from './codeWidgetCreateRequest' +import {CodeWidgetCursorPaged} from './codeWidgetCursorPaged' +import {CodeWidgetData} from './codeWidgetData' +import {CodeWidgetItem} from './codeWidgetItem' +import {CodeWidgetUpdateRequest} from './codeWidgetUpdateRequest' import {ConnectorChangesData} from './connectorChangesData' import {ConnectorCreationData} from './connectorCreationData' import {ConnectorStyle} from './connectorStyle' @@ -598,6 +622,7 @@ import {GeometryPlatformTags} from './geometryPlatformTags' import {GeometryPlatformbulkcreateoperation} from './geometryPlatformbulkcreateoperation' import {GeometryPlatformcreateitemsinbulkusingfilefromdevice} from './geometryPlatformcreateitemsinbulkusingfilefromdevice' import {GeometryPlatformgroups} from './geometryPlatformgroups' +import {GetAiInteractionLogsResponse} from './getAiInteractionLogsResponse' import {GetAllGroups200Response} from './getAllGroups200Response' import {GetAllGroups400Response} from './getAllGroups400Response' import {GetAllGroups404Response} from './getAllGroups404Response' @@ -673,6 +698,7 @@ import {MindmapNodeTextData} from './mindmapNodeTextData' import {MindmapNodeView} from './mindmapNodeView' import {MindmapStyle} from './mindmapStyle' import {MindmapWidgetDataOutput} from './mindmapWidgetDataOutput' +import {MiroAi} from './miroAi' import {ModelError} from './modelError' import {ModifiedBy} from './modifiedBy' import {ModifiedByPlatformContainers} from './modifiedByPlatformContainers' @@ -681,6 +707,7 @@ import {ModifiedByPlatformFileUpload} from './modifiedByPlatformFileUpload' import {ModifiedByPlatformTags} from './modifiedByPlatformTags' import {ModifiedByPlatformcreateitemsinbulkusingfilefromdevice} from './modifiedByPlatformcreateitemsinbulkusingfilefromdevice' import {ModifiedByPlatformgroups} from './modifiedByPlatformgroups' +import {OEmbedData} from './oEmbedData' import {Organization} from './organization' import {OrganizationInformation} from './organizationInformation' import {OrganizationMember} from './organizationMember' @@ -797,7 +824,7 @@ import {TextDataPlatformbulkcreateoperation} from './textDataPlatformbulkcreateo import {TextItem} from './textItem' import {TextStyle} from './textStyle' import {TextUpdateRequest} from './textUpdateRequest' -import {TokenInformation} from './tokenInformation' +import {TokenContext} from './tokenContext' import {UnGroup400Response} from './unGroup400Response' import {UnGroup404Response} from './unGroup404Response' import {UnGroup429Response} from './unGroup429Response' @@ -828,6 +855,7 @@ import {User} from './user' import {UserInfoLastOpenedBy} from './userInfoLastOpenedBy' import {UserInfoShort} from './userInfoShort' import {UserInformation} from './userInformation' +import {UserInformation1} from './userInformation1' import {UserListResponse} from './userListResponse' import {UserResource} from './userResource' import {UserResourceEmailsInner} from './userResourceEmailsInner' @@ -924,7 +952,6 @@ let enumsMap: {[index: string]: any} = { LegalHoldState: LegalHoldState, 'MindmapData.DirectionEnum': MindmapData.DirectionEnum, 'MindmapStyle.ShapeEnum': MindmapStyle.ShapeEnum, - 'Organization.PlanEnum': Organization.PlanEnum, 'OrganizationMember.LicenseEnum': OrganizationMember.LicenseEnum, 'OrganizationMember.RoleEnum': OrganizationMember.RoleEnum, 'PatchGroupResource.SchemasEnum': PatchGroupResource.SchemasEnum, @@ -1038,9 +1065,13 @@ let enumsMap: {[index: string]: any} = { } let typeMap: {[index: string]: any} = { + AccessTokenResponse: AccessTokenResponse, Actor: Actor, AddProjectMemberRequest: AddProjectMemberRequest, AdminRole: AdminRole, + AiInteractionLog: AiInteractionLog, + AiInteractionLogActor: AiInteractionLogActor, + AiInteractionLogObject: AiInteractionLogObject, AppCardCreateRequest: AppCardCreateRequest, AppCardData: AppCardData, AppCardDataChanges: AppCardDataChanges, @@ -1076,6 +1107,7 @@ let typeMap: {[index: string]: any} = { BoardExportTaskExportLink: BoardExportTaskExportLink, BoardExportTaskResult: BoardExportTaskResult, BoardItemContentLog: BoardItemContentLog, + BoardItemContentLogAI: BoardItemContentLogAI, BoardLinks: BoardLinks, BoardMember: BoardMember, BoardMemberChanges: BoardMemberChanges, @@ -1109,6 +1141,11 @@ let typeMap: {[index: string]: any} = { CardUpdateRequest: CardUpdateRequest, CaseRequest: CaseRequest, CaseResponse: CaseResponse, + CodeWidgetCreateRequest: CodeWidgetCreateRequest, + CodeWidgetCursorPaged: CodeWidgetCursorPaged, + CodeWidgetData: CodeWidgetData, + CodeWidgetItem: CodeWidgetItem, + CodeWidgetUpdateRequest: CodeWidgetUpdateRequest, ConnectorChangesData: ConnectorChangesData, ConnectorCreationData: ConnectorCreationData, ConnectorStyle: ConnectorStyle, @@ -1210,6 +1247,7 @@ let typeMap: {[index: string]: any} = { GeometryPlatformbulkcreateoperation: GeometryPlatformbulkcreateoperation, GeometryPlatformcreateitemsinbulkusingfilefromdevice: GeometryPlatformcreateitemsinbulkusingfilefromdevice, GeometryPlatformgroups: GeometryPlatformgroups, + GetAiInteractionLogsResponse: GetAiInteractionLogsResponse, GetAllGroups200Response: GetAllGroups200Response, GetAllGroups400Response: GetAllGroups400Response, GetAllGroups404Response: GetAllGroups404Response, @@ -1284,6 +1322,7 @@ let typeMap: {[index: string]: any} = { MindmapNodeView: MindmapNodeView, MindmapStyle: MindmapStyle, MindmapWidgetDataOutput: MindmapWidgetDataOutput, + MiroAi: MiroAi, ModelError: ModelError, ModifiedBy: ModifiedBy, ModifiedByPlatformContainers: ModifiedByPlatformContainers, @@ -1292,6 +1331,7 @@ let typeMap: {[index: string]: any} = { ModifiedByPlatformTags: ModifiedByPlatformTags, ModifiedByPlatformcreateitemsinbulkusingfilefromdevice: ModifiedByPlatformcreateitemsinbulkusingfilefromdevice, ModifiedByPlatformgroups: ModifiedByPlatformgroups, + OEmbedData: OEmbedData, Organization: Organization, OrganizationInformation: OrganizationInformation, OrganizationMember: OrganizationMember, @@ -1407,7 +1447,7 @@ let typeMap: {[index: string]: any} = { TextItem: TextItem, TextStyle: TextStyle, TextUpdateRequest: TextUpdateRequest, - TokenInformation: TokenInformation, + TokenContext: TokenContext, UnGroup400Response: UnGroup400Response, UnGroup404Response: UnGroup404Response, UnGroup429Response: UnGroup429Response, @@ -1437,6 +1477,7 @@ let typeMap: {[index: string]: any} = { UserInfoLastOpenedBy: UserInfoLastOpenedBy, UserInfoShort: UserInfoShort, UserInformation: UserInformation, + UserInformation1: UserInformation1, UserListResponse: UserListResponse, UserResource: UserResource, UserResourceEmailsInner: UserResourceEmailsInner, diff --git a/packages/miro-api/model/oEmbedData.ts b/packages/miro-api/model/oEmbedData.ts new file mode 100644 index 000000000..0d481ce79 --- /dev/null +++ b/packages/miro-api/model/oEmbedData.ts @@ -0,0 +1,135 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * @internal + * Data used to embed a Miro board. + */ +export class OEmbedData { + /** + * HTML code to embed the board. + */ + 'html'?: string + /** + * The title of the board, if the board is publicly available. Otherwise, it displays a placeholder. + */ + 'title'?: string + /** + * The user who owns the board, if the board is publicly available. Otherwise, the field is empty. + */ + 'author'?: string + 'version'?: string + /** + * The embed type. For this endpoint, the embed type is always `rich`. + */ + 'type'?: string + /** + * The URL pointing to a thumbnail image of the board. + */ + 'thumbnailUrl'?: string + /** + * The width of the thumbnail image of the board in pixels, if the thumbnail is available. + */ + 'thumbnailWidth'?: number + /** + * The height of the thumbnail image of the board in pixels, if the thumbnail is available. + */ + 'thumbnailHeight'?: number + /** + * The explicit width of the embed, in pixels. If you want the iframe containing the embed to use all the available width, you can ignore this field. + */ + 'width'?: number + /** + * The explicit height of the embed, in pixels. If you want the iframe containing the embed to use all the available height, you can ignore this field. + */ + 'height'?: number + /** + * The name of the oEmbed provider. For this endpoint, the provider name is always \'Miro\'. + */ + 'providerName'?: string + /** + * The URL of the oEmbed provider. For this endpoint, the URL always points to a Miro domain. + */ + 'providerUrl'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'html', + baseName: 'html', + type: 'string', + }, + { + name: 'title', + baseName: 'title', + type: 'string', + }, + { + name: 'author', + baseName: 'author', + type: 'string', + }, + { + name: 'version', + baseName: 'version', + type: 'string', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + { + name: 'thumbnailUrl', + baseName: 'thumbnail_url', + type: 'string', + }, + { + name: 'thumbnailWidth', + baseName: 'thumbnail_width', + type: 'number', + }, + { + name: 'thumbnailHeight', + baseName: 'thumbnail_height', + type: 'number', + }, + { + name: 'width', + baseName: 'width', + type: 'number', + }, + { + name: 'height', + baseName: 'height', + type: 'number', + }, + { + name: 'providerName', + baseName: 'provider_name', + type: 'string', + }, + { + name: 'providerUrl', + baseName: 'provider_url', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return OEmbedData.attributeTypeMap + } +} diff --git a/packages/miro-api/model/organization.ts b/packages/miro-api/model/organization.ts index f9560c1de..42bf3d613 100644 --- a/packages/miro-api/model/organization.ts +++ b/packages/miro-api/model/organization.ts @@ -10,27 +10,15 @@ * Do not edit the class manually. */ +/** + * @internal + * Contains information about the organization with which the board is associated. + */ export class Organization { /** - * Id of the organization + * Unique identifier (ID) of the organization. */ 'id': string - /** - * Purchased FULL licenses - */ - 'fullLicensesPurchased': number - /** - * Name of the organization - */ - 'name': string - /** - * Organization plan type - */ - 'plan': string | (typeof Organization.PlanEnum)[keyof typeof Organization.PlanEnum] - /** - * Type of the object returned. - */ - 'type'?: string = 'organization' /** @ignore */ static discriminator: string | undefined = undefined @@ -42,26 +30,6 @@ export class Organization { baseName: 'id', type: 'string', }, - { - name: 'fullLicensesPurchased', - baseName: 'fullLicensesPurchased', - type: 'number', - }, - { - name: 'name', - baseName: 'name', - type: 'string', - }, - { - name: 'plan', - baseName: 'plan', - type: 'Organization.PlanEnum', - }, - { - name: 'type', - baseName: 'type', - type: 'string', - }, ] /** @ignore */ @@ -69,19 +37,3 @@ export class Organization { return Organization.attributeTypeMap } } - -export namespace Organization { - export const PlanEnum = { - Company: 'company', - Consultant: 'consultant', - ConsultantSlf: 'consultant_slf', - Business: 'business', - PaidTeamOrg: 'paid_team_org', - IntegrationOrg: 'integration_org', - Professional2022: 'professional_2022', - EduTeamOrg: 'edu_team_org', - FreeTeamOrg: 'free_team_org', - DevTeamOrg: 'dev_team_org', - Unknown: 'unknown', - } as const -} diff --git a/packages/miro-api/model/organizationInformation.ts b/packages/miro-api/model/organizationInformation.ts index 88eeb41d1..d05d38c7b 100644 --- a/packages/miro-api/model/organizationInformation.ts +++ b/packages/miro-api/model/organizationInformation.ts @@ -11,9 +11,9 @@ */ export class OrganizationInformation { - 'type': string - 'name': string - 'id': string + 'type'?: string + 'name'?: string + 'id'?: string /** @ignore */ static discriminator: string | undefined = undefined diff --git a/packages/miro-api/model/organizationMember.ts b/packages/miro-api/model/organizationMember.ts index 1c3ee78f8..bc58ad625 100644 --- a/packages/miro-api/model/organizationMember.ts +++ b/packages/miro-api/model/organizationMember.ts @@ -114,6 +114,9 @@ export class OrganizationMember { export namespace OrganizationMember { export const LicenseEnum = { + Advanced: 'advanced', + Standard: 'standard', + Basic: 'basic', Full: 'full', Occasional: 'occasional', Free: 'free', diff --git a/packages/miro-api/model/teamInformation.ts b/packages/miro-api/model/teamInformation.ts index ea48a473c..7712809f0 100644 --- a/packages/miro-api/model/teamInformation.ts +++ b/packages/miro-api/model/teamInformation.ts @@ -11,9 +11,9 @@ */ export class TeamInformation { - 'type': string - 'name': string - 'id': string + 'type'?: string + 'name'?: string + 'id'?: string /** @ignore */ static discriminator: string | undefined = undefined diff --git a/packages/miro-api/model/tokenInformation.ts b/packages/miro-api/model/tokenContext.ts similarity index 88% rename from packages/miro-api/model/tokenInformation.ts rename to packages/miro-api/model/tokenContext.ts index aa48fe063..2b4f9f697 100644 --- a/packages/miro-api/model/tokenInformation.ts +++ b/packages/miro-api/model/tokenContext.ts @@ -13,14 +13,15 @@ import {OrganizationInformation} from './organizationInformation' import {TeamInformation} from './teamInformation' import {UserInformation} from './userInformation' +import {UserInformation1} from './userInformation1' -export class TokenInformation { - 'type': string - 'organization': OrganizationInformation - 'team': TeamInformation - 'createdBy': UserInformation - 'user': UserInformation +export class TokenContext { + 'type'?: string + 'team'?: TeamInformation + 'createdBy'?: UserInformation 'scopes'?: Array + 'organization'?: OrganizationInformation + 'user'?: UserInformation1 /** @ignore */ static discriminator: string | undefined = undefined @@ -32,11 +33,6 @@ export class TokenInformation { baseName: 'type', type: 'string', }, - { - name: 'organization', - baseName: 'organization', - type: 'OrganizationInformation', - }, { name: 'team', baseName: 'team', @@ -47,20 +43,25 @@ export class TokenInformation { baseName: 'createdBy', type: 'UserInformation', }, - { - name: 'user', - baseName: 'user', - type: 'UserInformation', - }, { name: 'scopes', baseName: 'scopes', type: 'Array', }, + { + name: 'organization', + baseName: 'organization', + type: 'OrganizationInformation', + }, + { + name: 'user', + baseName: 'user', + type: 'UserInformation1', + }, ] /** @ignore */ static getAttributeTypeMap() { - return TokenInformation.attributeTypeMap + return TokenContext.attributeTypeMap } } diff --git a/packages/miro-api/model/updateUserGroupMembersRequest.ts b/packages/miro-api/model/updateUserGroupMembersRequest.ts index ad1a8956b..70b03206e 100644 --- a/packages/miro-api/model/updateUserGroupMembersRequest.ts +++ b/packages/miro-api/model/updateUserGroupMembersRequest.ts @@ -12,11 +12,11 @@ export class UpdateUserGroupMembersRequest { /** - * List of user emails to add to the user group. + * List of user identifiers (can be email or ID) to add to the user group. */ 'membersToAdd'?: Array /** - * List of user emails to remove from the user group. + * List of user identifiers (can be email or ID) to remove from the user group. */ 'membersToRemove'?: Array diff --git a/packages/miro-api/model/updateUserGroupMembersResultError.ts b/packages/miro-api/model/updateUserGroupMembersResultError.ts index 9b874acc0..1afe630cc 100644 --- a/packages/miro-api/model/updateUserGroupMembersResultError.ts +++ b/packages/miro-api/model/updateUserGroupMembersResultError.ts @@ -16,7 +16,7 @@ import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersRes export class UpdateUserGroupMembersResultError { 'operation'?: UpdateUserGroupMembersResultOperation /** - * The HTTP status code for the successful operation. + * The HTTP status code for an unsuccessful operation. */ 'status'?: number 'error'?: UpdateUserGroupMembersResultErrorError diff --git a/packages/miro-api/model/updateUserGroupMembersResultInner.ts b/packages/miro-api/model/updateUserGroupMembersResultInner.ts index 052b389fa..85733a693 100644 --- a/packages/miro-api/model/updateUserGroupMembersResultInner.ts +++ b/packages/miro-api/model/updateUserGroupMembersResultInner.ts @@ -19,7 +19,7 @@ import {UpdateUserGroupMembersResultSuccess} from './updateUserGroupMembersResul export class UpdateUserGroupMembersResultInner { 'operation'?: UpdateUserGroupMembersResultOperation /** - * The HTTP status code for the successful operation. + * The HTTP status code for an unsuccessful operation. */ 'status'?: number 'affectedUsers'?: Array diff --git a/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts b/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts index 1309df3df..861db6c44 100644 --- a/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts +++ b/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts @@ -16,7 +16,7 @@ import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersRes export class UpdateUserGroupMembersResultSuccess { 'operation'?: UpdateUserGroupMembersResultOperation /** - * The HTTP status code for the successful operation. + * The HTTP status code for a successful operation. */ 'status'?: number 'affectedUsers'?: Array diff --git a/packages/miro-api/model/userInformation.ts b/packages/miro-api/model/userInformation.ts index c976269ba..f1c466789 100644 --- a/packages/miro-api/model/userInformation.ts +++ b/packages/miro-api/model/userInformation.ts @@ -11,9 +11,9 @@ */ export class UserInformation { - 'type': string - 'name': string - 'id': string + 'type'?: string + 'name'?: string + 'id'?: string /** @ignore */ static discriminator: string | undefined = undefined diff --git a/packages/miro-api/model/userInformation1.ts b/packages/miro-api/model/userInformation1.ts new file mode 100644 index 000000000..fbeee0abd --- /dev/null +++ b/packages/miro-api/model/userInformation1.ts @@ -0,0 +1,44 @@ +/** + * Miro Developer Platform + * ### Miro Developer Platform concepts - New to the Miro Developer Platform? Interested in learning more about platform concepts?? [Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes. ### Getting started with the Miro REST API - [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes. - [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes. ### Miro REST API tutorials Check out our how-to articles with step-by-step instructions and code examples so you can: - [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth) ### Miro App Examples Clone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro\'s Developer Platform 2.0. + * + * The version of the OpenAPI document: v2.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +export class UserInformation1 { + 'type'?: string + 'name'?: string + 'id'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'type', + baseName: 'type', + type: 'string', + }, + { + name: 'name', + baseName: 'name', + type: 'string', + }, + { + name: 'id', + baseName: 'id', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UserInformation1.attributeTypeMap + } +}